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

Intro

目標是實現目標隨攝像機方向的不一樣而進行不一樣方向移動——並且,目標不須要隨攝像機一塊兒旋轉。c#

使用攝像機的四元數旋轉

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了。code

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

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

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

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

相關文章
相關標籤/搜索