2016-04-03 36 views
0

我对Unity非常陌生。我想将一个对象从一个地方移动到另一个地方,然后再自动地返回到第一个地方。有没有办法做到这一点?这是我的代码来移动对象,但它是无限的,超越!想要将对象从第一位移动到第二位,然后再使用翻译对象

float speedX = 1; float speedY = 0; float speedZ = 0; 

// Use this for initialization 
void Start() { 

} 

// Update is called once per frame 
void Update() { 
    transform.Translate (new Vector3 (speedX, speedY, speedZ) * Time.deltaTime); 
} 

回答

0

这不起作用,因为你只是在相同的方向上翻译对象,没有任何限制停止。一种做法是使用Lerp将位置值从一个点插入另一个点。 http://docs.unity3d.com/ScriptReference/Vector3.Lerp.html

下面的代码将一个gameObject从p1移动到p2,然后返回到p1;

public Transform p1, p2; 
public float speed = 1.0f; 
private float startTime; 
private float journeyLength; 
bool isMovingForward = true; 
float threshold = 0.001f; 

void Start() { 
    startTime = Time.time; 
    journeyLength = Vector3.Distance(p1.position, p2.position); 
} 

void Update() { 
    if (isMovingForward && Mathf.Abs((transform.position - p2.position).sqrMagnitude) < (threshold * threshold)){ 
     isMovingForward = false; 
     startTime = Time.time; 
    } 
    float distCovered = (Time.time - startTime) * speed; 
    float fracJourney = distCovered/journeyLength; 

    if (isMovingForward) 
     transform.position = Vector3.Lerp(p1.position, p2.position, fracJourney); 
    else 
     transform.position = Vector3.Lerp(p2.position, p1.position, fracJourney); 
} 
+0

谢谢,那就是我正在寻找的。 – solo365

相关问题