如何将物体从 A 点移动到 B 点,到达该点后,等待一段时间,然后再从 B 点移动到新的点。
我想让物体移动到一个点然后静止一段时间,然后再移动到另一个点,这无法理解,我为此折磨了很长时间。请帮帮我。对象只是逐点传送。物体必须顺利到达目的地,在那里等待一段时间,然后再次移动
公共类协程:MonoBehavior
{
// стартовая позиция
private Vector3 startPosition;
// новая позиция объекта
private Vector3 newPoint;
private void Start()
{
// даю начальную позицию
startPosition = transform.position;
}
private void Update()
{
// указываю новую точку рандомными координатами, от начальной точки
newPoint = new Vector3(
Random.Range(startPosition.x - 5, startPosition.x + 5),
startPosition.y,
Random.Range(startPosition.z + 5, startPosition.z - 5)
);
// запускаю корутину
StartCoroutine(MoveCoroutine(newPoint));
}
private IEnumerator MoveCoroutine(Vector3 moveTo)
{
// жду 2 сек
yield return new WaitForSeconds(2f);
// если позиция объекта не равна конечной точки
if (transform.position != newPoint)
{
// телепортирую объект по отрезку, создавая иллюзию перемещения
transform.position = Vector3.Lerp(transform.position, newPoint, Time.time / 0.5f);
}
}
}
使用协程,运动不会很流畅,所以
Update.将移动和延迟分离为不同的能力。
TimeAction你可以在任何地方使用它,并且MoveAction基于你TimeAction如何MoveAction编写很多各种各样的动作。移动并不顺畅,因为 Lerp 在协程结束时被处理一次。在Update中做这样的举动更正确,因为 该操作将每帧执行一次。如果移动的对象与其他对象(物理)交互,则需要以不同的方式移动它 - 通过 Velocity 或 Force 并在 FixedUpdate 中处理。可以在协程中进行平滑的运动,但从优化的角度来看这是错误的。您需要将现有的协程分成两部分: