在物体到达目标后,我如何使其移动回原来的位置



启动方式:

StartCoroutine(ThrowObject(objToThrow.transform, primaryTarget.transform, throwSpeed));

然后:

IEnumerator ThrowObject(Transform objectToMove, Transform toPosition, float duration)
{
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
Vector3 currentPos = objectToMove.position;
float time = Vector3.Distance(currentPos, toPosition.position) / (duration - counter) * Time.deltaTime;
objectToMove.position = Vector3.MoveTowards(currentPos, toPosition.position, time);
yield return null;
}
}

当objectToMove到达目标(toPosition(时,我希望脚本现在做一些操作,不管等待5秒是什么,或者做一些效果,但要做一些事情,然后让objectToMove返回到它以相同速度抛出的原始位置。

这就是我尝试的:

IEnumerator ThrowObject(Transform objectToMove, Transform toPosition, float duration)
{
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
Vector3 currentPos = objectToMove.position;
float time = Vector3.Distance(currentPos, toPosition.position) / (duration - counter) * Time.deltaTime;
objectToMove.position = Vector3.MoveTowards(currentPos, toPosition.position, time);
yield return null;
}
StartCoroutine(ThrowBack(objectToMove, toPosition, duration));
}
IEnumerator ThrowBack(Transform objectToMove, Transform toPosition, float duration)
{
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
Vector3 currentPos = objectToMove.position;
float time = Vector3.Distance(currentPos, toPosition.position) / (duration - counter) * Time.deltaTime;
objectToMove.position = Vector3.MoveTowards(toPosition.position, currentPos, time);
yield return null;
}
}

但它永远不会把它移回来。它要到喉咙了回到线路:

objectToMove.position = Vector3.MoveTowards(toPosition.position, currentPos, time);

但对象ToMove永远不会向后移动,而是一直保持在目标位置。

最简单的方法是在程序开始或对象实例化时获得开始位置,如下所示:

//Variables
private Vector3 startPos;
//Code
private void Start() //or when you want to get the position
{
startPos = transform.position;
}
//when you want to move back to the original position do this:
objectToMove.position = Vector3.MoveTowards(startPos);

对于您的示例,我可能会在枚举器的开头执行开始无效操作。这将设置startpos,但startpos只是一个私有变量,因此您还需要在枚举器中声明它,以便它相对于每个objectToMove。

最新更新