Я пытаюсь добиться самого простого. У меня есть код для плавного перемещения объекта, и я хочу, чтобы он останавливался на определенном расстоянии относительно того, где находился объект при нажатии кнопки. Поэтому я не могу сохранить позицию внутри любой функции, которая обновляет каждый кадр. Сейчас объект просто начинает двигаться и не останавливается.
void Update()
{
Vector3 targetPosition = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z);
if (movement == true)
{
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, targetPosition, step);
}
}
public void coroutineStarter()
{
float targetPosition = transform.position.x - 1;
StartCoroutine(OnClick(targetPosition));
}
IEnumerator OnClick(float targetPosition)
{
if (transform.position.x != targetPosition)
{
movement = true;
}
else
{
movement = false;
yield return null;
}
}
}
Я должен указать, что нажатие на кнопку запускает coroutineStarter
. Я попытался использовать цикл while вместо оператора if внутри OnClick
, но, по-видимому, использование циклов while в любом месте замораживает единство, если оно бесконечно, а если нет, оно замораживает единство на время цикла.
yield return null;
в нем .. что говорит Unity приостановить процедуру, отрендерить кадр и продолжить в следующем кадре. - person derHugo   schedule 22.11.2019