对于第三人称的游戏,主人公身上一般加一个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