简单的视野转动
我们接着上一节简单移动的例子,我们这次来制作视野的移动,上下旋转我们的思路就是通过鼠标的轴输入,改变我们的摄像机手臂,因为我们的摄像机是绑定在摄像机手臂上的,所以转动我们的摄像机手臂就相当于转动我们的摄像机,同时也就完成了我们的视野上下转动功能。而左右旋转呢,那就很简单了,我们直接转动我们的Pawn自身即可,因为我们的组件是绑定在Pawn上的,那么转动Pawn的时候我们的摄像机也就会跟着一起转动了。
首先我们要设置我们的轴映射输入,如下图:

然后我们需要在MyPawn.h中加入我们的定义:
public:
// 摄像机旋转值,因为只是屏幕,只需要两个轴即可,Z轴的值不变
FVector2D CameraInput;
private:
// 两个对应轴映射事件的函数
void Turn(float value);
void LookUp(float value);
于是我们在MyPawn.cpp中写入:
构造函数中,我们要设置一个摄像机手臂的属性
// 非常重要,如果不为true,那么我们的摄像机手臂将不会进行平滑过渡,也就不会进行转动
CameraBoom->bEnableCameraLag = true;
/*
这里还可以设置CameraLagSpeed属性,这个速度将会设置我们平滑过渡的速度,
以这个速度由这个位置过渡到那个位置,也就有了我们镜头转动的动画,一般我们默认不改
*/
// 左右看
void AMyPawn::Turn(float value) {
CameraInput.X = value;
}
// 上下看
void AMyPawn::LookUp(float value) {
CameraInput.Y = value;
}
在Tick函数中加入:
void AMyPawn::Tick(float DeltaTime) {
///......之前的东西
// 设置一个新的旋转值,默认值为当前Pawn的旋转
FRotator NewRotator = GetActorRotation();
// 旋转的Yaw(Y轴旋转值)值加上我们鼠标X轴移动的值
NewRotator.Yaw += CameraInput.X;
// 设置Pwan新的旋转
SetActorRotation(NewRotator);
// 设置一个新的摄像机手臂的旋转值,默认为摄像机手臂的旋转值
FRotator NewSpringArmRotator = CameraBoom->GetComponentRotation();
// 旋转的Pitch(X轴旋转值)加上我们鼠标Y轴的移动值
NewSpringArmRotator.Pitch += CameraInput.Y;
// 设置范围为-85到-15,如果不设置,将会由于欧拉角的计算问题,导致修改Z轴旋转值,我们要避免修改那个值
NewSpringArmRotator.Pitch = FMath::Clamp(NewSpringArmRotator.Pitch,-85.f,-15.f);
// 设置摄像机手臂组件新的旋转
CameraBoom->SetWorldRotation(NewSpringArmRotator);
}
编译,运行,移动我们的鼠标,我们发现我们的视野也跟着变动了。
这样我们就完成了简单的视野的转动,基础功能已经完成,当然,实际项目中我们基本上不会这样子去做,因为无论是我们的移动还是视野的转动,UE4已经为我们写好了一套函数给我们直接调用,而且更加方便。