再讲之前先知道Vector3.forward就是朝前也就是Z轴的方向,如果不明白的可以看一下图
代码中写的是根据世界坐标轴的z轴方向移动,然后再看一下右上角的世界坐标轴发现是根据世界坐标轴的z轴移动是没有问题的,这里在观察一个问题就是这个物体的自身坐标轴的z轴是朝向左侧的,这个就是因为方法第二个参数的作用,Space.World为根据世界坐标轴方向移动,Space.Self则是根据自身的方向移动
// Update is called once per frame
void Update () {
transform.Translate(Vector3.forward * Time.deltaTime * 10f, Space.World);
}
下一行注释的一行就相当于上一行,这个方法默认有一个枚举是根据自身的坐标系来进行位移,也就是说这里写不写Space.self都一样。
// Update is called once per frame
void Update () {
transform.Translate(Vector3.forward * Time.deltaTime * 10f,Space.Self); //1
//transform.Translate(Vector3.forward * Time.deltaTime * 10f); //2
}
CharacterController.Move这个方法没有明确的枚举告诉我们是世界坐标系还是自身坐标系,所以这里通常transform.XXX(forward)来代表自身坐标,用Vector.XXX(forward)来代表世界坐标。
如下图所示:
代码如下:
// Update is called once per frame
void Update () {
chars.Move(Vector3.forward * Time.deltaTime * 10f);
}
// Update is called once per frame
void Update () {
chars.Move(transform.forward * Time.deltaTime * 10f);
}
为什么说慎用这个方法是因为这个移动是需要有某种基础来可以移动的
效果图放在下面:
代码如下:
void Update () {
chars.SimpleMove(Vector3.forward);
}
代码如下:
void Update () {
chars.SimpleMove(transform.forward);
}