代码
var v = Input.GetAxis("Vertical");
var h = Input.GetAxis("Horizontal");
transform.Translate(transform.forward * Time.deltaTime * moveSpeed * v, Space.World);
transform.Rotate(transform.up * Time.deltaTime * rotateSpeed * h);
也可以换成
var v = Input.GetAxis("Vertical");
var h = Input.GetAxis("Horizontal");
transform.Translate(new Vector3(0, 0, 1) * Time.deltaTime * moveSpeed * v);
transform.Rotate(transform.up * Time.deltaTime * rotateSpeed * h);
注意点
Translate
函数默认模式是Space.Self
,此时移动方向需要为人物坐标系下的人物前进方向Vector3(0, 0, 1)
;如果模式指定为Space.World
,移动方向应该为世界坐标系下的人物前进方向transform.forward
,transform.forward
在人物转向过程中会改变。如果不注意这个问题,人物转向后前进动作会出问题,比如斜着前进或者横着走。
Rotate
函数则没有这个问题,这是因为在人物转向过程,Rotate
函数的旋转轴不会变化,所以transform.up
和Vector3(0, 1, 0)
可以和Space.World
或Space.Self
任意组合。