Unity3d中的人物移動


對於第三人稱的游戲,主人公身上一般加一個character controller用來控制移動。這時候需要自己模擬重力,讓主人公站在地板上。如果用A D控制左右, W S控制前后,那么控制移動代碼可以這么寫:

public class Move : MonoBehaviour {
    public CharacterController character;
    public float speed;
    // Use this for initialization
    void Start () {
        character = this.GetComponent<CharacterController>();
        speed=1f;
    }
    
    // Update is called once per frame
    void Update () {
        float horizontal = Input.GetAxis("Horizontal"); //A D 左右
        float vertical = Input.GetAxis("Vertical"); //W S 上 下
        float moveY = 0;
        float gravity = -9.8f;
        moveY = gravity*Time.deltaTime;
        character.Move(new Vector3(horizontal, moveY, vertical) * speed * Time.deltaTime);
    }
}

使用Input.GetAxis方法獲取下列默認軸: "Horizontal" 和"Vertical" 映射於控制桿、A、W、S、D和箭頭鍵(方向鍵)。horizontal和verical分別是兩個介於[-1,1]之間的數。利用這段代碼,人物只在xz平面上移動。

移動還可以用transform.Translate方法,或者使用Rigidbody並賦予剛體速度。但有一點要注意,如果移動命令是在Update()函數里面,物體移動時會有抖動情況,因為每一幀時間不固定,移動的距離有長有短。解決這個問題的方法是把移動語句寫在FixedUpdate()函數里面,因為該函數每一幀的長度固定。

具體其他移動方法可以看http://www.jianshu.com/p/5653b0be5fd4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM