對於第三人稱的游戲,主人公身上一般加一個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