天天看點

unity中控制主角的移動和旋轉

在遊戲中我們通常要控制玩家的移動和旋轉

首先我們說一下移動:

移動的本質就是在Update()或LateUpdate()中不斷修改物體的position來實作移動,移動的方法有4中:

(1):transform.Translate()第一種方法與直接修改transform.position是一樣的,缺點就是在有碰撞器元件的物體上時它會穿體而過

(2):Rigidbody.MovePosition()第二種用于模拟物體的實體狀态,比如物體受重力影響,物體被碰撞後的擊飛等等。對于運動學剛體,它基于剛體的運動應用摩擦力。這個讓你模拟剛體位于移動平台之上的情況

(3):CharacterController.Move()模拟更複雜的運動,重力需要通過代碼實作,傳回值表示角色與周圍的碰撞資訊。

(4):Rigidbody.AddForce()但這種方法力的大小需要直接不斷的調整。

旋轉相對于物體的移動就沒有那麼多的方法了

(1):transform.Rotation()當然這個方法也是通過修改物體的rotation來實作

(2):Rigidbody.MoveRotation()對于運動學剛體,它基于剛體的運動應用摩擦力。這個讓你模拟剛體位于移動平台之上的情況

下面我隻是展示了用Rigidbody.MovePosition()與Rigidbody.MoveRotation()來實作

    private int Speed = 2;

void Update () {

        float h = Input.GetAxis("Horizontal");

        float v = Input.GetAxis("Vertical");

        rigBody.MovePosition(this.transform.position+new Vector3(h,0,v)*Speed*Time.deltaTime);

       if(Input.GetAxis("Horizontal")!=0|| Input.GetAxis("Vertical")!=0)

        {

            Rotating(h,v);

        }

}

    void Rotating(float horizontal, float vertical)

    {

        // 建立角色目标方向的向量

        Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);

        // 建立目标旋轉值 并假設Y軸正方向為"上"方向

        Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up); //函數參數解釋: LookRotation(目标方向為"前方向", 定義聲明"上方向")

        // 建立新旋轉值 并根據轉向速度平滑轉至目标旋轉值

        //函數參數解釋: Lerp(角色剛體目前旋轉值, 目标旋轉值, 根據旋轉速度平滑轉向)

        Quaternion newRotation = Quaternion.Lerp(rigBody.rotation, targetRotation, Speed * Time.deltaTime);

        // 更新剛體旋轉值為 新旋轉值

        rigBody.MoveRotation(newRotation);

    }

當然,一般情況下在物體移動的同時并且包括動畫的播放,稍後我将為大家說一下動畫的控制,謝謝大家!

繼續閱讀