【问题标题】:Camera rotation with interpolation带插值的相机旋转
【发布时间】:2020-06-19 19:33:24
【问题描述】:

我有一个使用“鼠标 X”输入在 y 轴上旋转的对象和一个通过 slerp 四元数的摄像机应该跟随对象的旋转。 不幸的是,当我用快速鼠标移动旋转对象时,slerp 相机的旋转停止,就好像它撞到墙上一样,并且不跟随对象的旋转。 如果没有四元数 slerp,它会跟随对象工作,但我需要使用插值来完成。

旋转对象(在 LateUpdate 中:

float rot = Input.GetAxisRaw("Mouse X") * speedrotation;
transform.Rotate(0, rot, 0);

旋转相机(在 LateUpdate 中):

var rot = Quaternion.Slerp(camera.transform.rotation, object.rotation, speed_rot * Time.deltaTime);
camera.transform.position = object.transform.position + rot;
camera.transform.LookAt(object.transform.position);

【问题讨论】:

    标签: unity3d camera interpolation quaternions


    【解决方案1】:

    改用 EulerAngles!这是制作相机控制器的更好选择!

    Simple Code:
    Vector3 currentCameraEulers;
    float rotationDPI = 7f; // I didn't remeber how to call better this thing
    
    void Update(){
    float cameraX = Input.GetAxisRaw("Mouse X") * rotationDPI;
    if(cameraX != 0f){
    currentCameraEulers = new Vector3(0, cameraX, 0);
    transform.eulerAngles += currentCameraEulers;
    }
    }
    

    这应该工作得很好。

    【讨论】:

    • 我认为你应该使用 EulerAngles 轻松完成旋转相机(在 LateUpdate 中)。
    • 我试过了,但什么也没做,我明白这是因为后面的对象的速度太高了。使用 lerp 并因此移动较晚的相机遇到了这种情况,我不得不降低被跟踪物体的速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多