Unity3D 鍵盤控制物體平面移動(操作相對於攝像機方向)
阿新 • • 發佈:2018-11-25
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軸的值,使目標只在當前平面上移動。再用算出來的向量的單位向量乘上之前備份的數量值,得到平面上移動的偏移向量。
最後,算出新的位置座標,賦值,完事兒。