简单的视野转动


  我们接着上一节简单移动的例子,我们这次来制作视野的移动,上下旋转我们的思路就是通过鼠标的轴输入,改变我们的摄像机手臂,因为我们的摄像机是绑定在摄像机手臂上的,所以转动我们的摄像机手臂就相当于转动我们的摄像机,同时也就完成了我们的视野上下转动功能。而左右旋转呢,那就很简单了,我们直接转动我们的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已经为我们写好了一套函数给我们直接调用,而且更加方便。