任务:使用鼠标控制Pawn的Yow转向,已经Pictch的视角旋转
第一步、项目设置添加鼠标X,Y轴输入
第二步、修改Pawn类相关C++代码
Creature.h关键代码如下:
private:
//2D向量储存鼠标的输入
FVector2D CameraInput;
//接收Yaw旋转
void CameraYaw(float Value);
//接收Pictch旋转
void CameraPitch(float Value);
Creature.cpp关键代码如下:
1、构造函数初始化CameraInput向量
CameraInput = FVector2D(0.f,0.f);
2、实现CameraYaw,CameraPitch函数
void ACreature::CameraYaw(float Value)
{
CameraInput.X = Value;
}
void ACreature::CameraPitch(float Value)
{
CameraInput.Y = Value;
}
3、将CameraYaw,CameraPitch函数和鼠标输入绑定
void ACreature::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("CameraPitch", this, &ACreature::CameraPitch);
PlayerInputComponent->BindAxis("CameraYaw", this, &ACreature::CameraYaw);
}
4、每一帧根据CameraInput来控制Pawn的镜头
void ACreature::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
//将Camerainput.X和Pawn的旋转绑定,达到控制左右旋转的效果
FRotator NewRotator = GetActorRotation();
NewRotator.Yaw += CameraInput.X;
SetActorRotation(NewRotator);
//当使用Yaw转向时,我们不希望Pawn本体旋转,所以将CameraInput.Y绑定在弹簧臂上,同时为了避免欧拉角带来的游戏BUG,将其旋转限定在-80到+80之间
FRotator SpringArmRotator = SpringArm->GetComponentRotation();
SpringArmRotator.Pitch += CameraInput.Y;
SpringArmRotator.Pitch = FMath::Clamp(SpringArmRotator.Pitch, -80.f, 80.f);
SpringArm->SetWorldRotation(SpringArmRotator);
}