一、物体移动
void Update(){
Vector3 pos = this.transform.localPosition;
pos.x += 0.01f;
this.transform.localPosition = pos;
}
物体会根据x方向以0.01的距离每帧运行,但是不是匀速运动,因为帧率刷新时间不同。
想要实现物体匀速(近似)运动,可以通过daltaTime实现。
void Update(){
float Speed = 3;
float distance = Speed*Time.daltaTime;
Vector3 pos = this.transform.localPosition;
pos.x += distance / 0.01f;
this.transform.localPosition = pos;
}
设置每秒经过3m,那么每次帧率更新走过的距离就是速度×时间。
二、物体的运动
一般使用transform.Translate(),实现相对运动 transform.Translate(dx,dy,dz)其中dx,dy,dz是坐标增量。
例如:transform.Translate(0,0,distance);//z方向增加distance
三、相对运动
transform.Translate():可以实现物体的运动
transform.Translate(x,y,z,space), 其中第四个参数分为Space.World和Space.Self。
Space.World相对于世界坐标系,Space.Self相对于自身坐标系(本地坐标系)
Space.Self会根据自身角度向前移动(用于世界方向与自身方向有夹角)
四、运动的方向
运动的方向,让物体朝着红旗移动。
先转头,使物体朝向红旗,再让物体朝着红旗移动。
1、获取目标物体
GameObject flag = GameObject.Find("红旗");
2、转向目标
this.transfrom.LookAt(flag.transfrom);
3、向‘前’运动,物体自身的朝向
this.transform.Translate(0,0,dz,Space.Self)
void Start(){
GameObject flat = GameObejct.Find("红旗");
this.transform.LookAt(flat.transfrom);
}
void Update(){
float speed = 1;
float distance = speed*Time.deltaTime;
this.transfrom.Translate(0,0,distance,Space.Self);
}
这样物体就可以朝着旗子做匀速运动了,但是这时物体运动到红旗的位置后并不会停止,那么如何实现物体碰到旗子并停止呢?
向量测距:
p1 = 火车.transfrom.position
p2 = 红旗.transfrom.position
p = p1-p2
distance = p.magnitude
GameObject flat;
void Start(){
GameObject flat = GameObejct.Find("红旗")
this.transform.LookAt(flat.transfrom)
}
void Update(){
Vector3 p1 = this.transfrom.position;
Vector3 p2 = flag.transfrom.position;
Vector3 p = p1-p2;
float distance = p.magnitudel;
float speed = 1;
if(distance>0.3){
float move= speed*Time.deltaTime;
this.transfrom.Translate(0,0,move,Space.Self);
}
}