您的位置:首页 > 移动开发 > Unity3D

unity3D学习【功能实现】之十二:指定时间移动到目标位置

2016-08-17 11:15 721 查看




首先看下两个物体的坐标一个是x=-10,另一个是x=10,

那么这两个物体的距离就是20了。

一般我们移动都是

transform.position = Vector2.MoveTowards (transform.position,target.position,moveSpeed*Time.deltaTime);


假设moveSpeed 赋值一个2.0f,那么10秒就能到达目标位置。

所以指定时间达到目标位置就是反向操作了

替换moveSpeed为

moveSpeed=(transform.position到target.position的距离)/你指定的时间;

所以代码是这样的

public Transform target;//目标位置
public float distance;//两个物体的距离
void Start () {
distance = Vector2.Distance (transform.position,target.position);
}
void Update () {
transform.position = Vector2.MoveTowards (transform.position,target.position,(distance/1f)*Time.deltaTime);
}//我设置了1秒达到。

所以如果用协程的话,做出两个方式,一下是摘自网络
//在time时间内移动物体
private IEnumerator MoveObject(Vector3 startPos, Vector3 endPos, float time)
{
var dur = 0.0f;
while (dur <= time)
{
dur += Time.deltaTime;
transform.position = Vector3.Lerp(startPos, endPos, dur / time);
yield return null;
}
}

//以指定速度speed移动物体
private IEnumerator MoveObject_Speed(Vector3 startPos, Vector3 endPos, float speed)
{
float startTime = Time.time;
float length = Vector3.Distance(startPos, endPos);
float frac = 0;

while (frac < 1.0f)
{
float dist = (Time.time - startTime) * speed;
frac = dist / length;
transform.position = Vector3.Lerp(startPos, endPos, frac);
yield return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity2d