1. 程式人生 > >Unity3D 鍵盤控制物體平面移動(操作相對於攝像機方向)

Unity3D 鍵盤控制物體平面移動(操作相對於攝像機方向)

Intro

目標是實現目標隨攝像機方向的不同而進行不同方向移動——而且,目標不需要隨攝像機一起旋轉。

使用攝像機的四元數旋轉

    void HandleKeyboardAction()
    {
        var horizontal = Input.GetAxis("Horizontal") * PlayerMotionScaleLevel * Time.deltaTime;
        var vertical = Input.GetAxis("Vertical") * PlayerMotionScaleLevel * Time.deltaTime;
        var motion = transform.rotation * new Vector3(horizontal, 0, vertical);
        var mag = motion.magnitude;
        motion.y = 0;
        Player.transform.position += motion.normalized * mag;
    }

極其簡單的做法,獲取到鍵盤移動的軸之後,用攝像機的旋轉四元數乘一下,即可得到旋轉後的向量,加上去就ok了。

需要注意的是這裡用攝像機的四元數旋轉要求攝像機必須只在x和y兩個軸旋轉。

先備份一下三維向量的數量值,這是為了能保證攝像機向上和向下看時,平面x和z軸上的分量不會過小,保持一致的移動速度。

用四元數旋轉完成後,去除y軸的值,使目標只在當前平面上移動。再用算出來的向量的單位向量乘上之前備份的數量值,得到平面上移動的偏移向量。

最後,算出新的位置座標,賦值,完事兒。