通过Transform.Translate移动物体
6个重载:
public void Translate(float x, float y, float z, [DefaultValue("Space.Self")] Space relativeTo);
public void Translate(float x, float y, float z);
public void Translate(Vector3 translation, [DefaultValue("Space.Self")] Space relativeTo);
public void Translate(Vector3 translation);
public void Translate(float x, float y, float z, Transform relativeTo);
public void Translate(Vector3 translation, Transform relativeTo);
1.相对与自身坐标系移动
void Update() { this.transform.Translate(0.01f, 0, 0);//向 x 轴方向分别移动0.01 相对于自身坐标系,下同 //this.transform.Translate(Vector3.right*0.01f); //this.transform.Translate(new Vector3(0.01f,0,0)); //this.transform.Translate(0.01f, 0, 0, Space.Self); }

2.相对与世界坐标系移动
void Update() { this.transform.Translate(0.01f, 0, 0, Space.World);//向 x 轴方向分别移动0.01 相对于世界坐标系 //this.transform.Translate(Vector3.right*0.01f,Space.World); //this.transform.Translate(new Vector3(0.01f,0,0),Space.World); }
3. 相对于其它物体的一个坐标系
void Update() { transform.Translate(0, 0.01f, 0, sphere.transform);//向y轴方向移动0.01 相对于sphere的坐标系 //transform.Translate(Vector3.up*0.01f, sphere.transform); }
关于transform.up与Vector3.up
transform.up(right/forward)会随着物体的旋转发生变化,如当y轴向下(与世界坐标y轴相反)transform.up是(0,-1,0)这个后果是此时用transform.up控制物体的移动物体不会向自身y轴方向移动,反而会向y轴负方向移动,因为此时我们乘的向量是(0,-1,0),一般不用transform.translate(transform.up)控制移动
而vector3.up是严格的(0,1,0)。