Я не могу получить, чтобы положение объекта заняло 20 секунд, чтобы измениться из точки А в В, потому что он движется быстрее, чем должен, но сообщение «Готово» действительно появляется за 20 секунд, как и должно.
Что я пропускаю?
private bool canMove = true;
...
private IEnumerator SmoothMove() {
canMove = false;
Vector2 target = new Vector2(transform.position.x + 1.5f, transform.position.y);
float moveDurationTimer = 0.0f;
float moveDuration = 20f;
while (moveDurationTimer < moveDuration) {
moveDurationTimer += Time.deltaTime;
transform.position = Vector2.Lerp(transform.position, target, moveDurationTimer / moveDuration);
yield return null;
}
Debug.Log("Ready");
canMove = true;
}
Я использую сопрограмму, которую я вызываю из Update ().
Редактировать:
Когда я сказал «Я использую сопрограмму, которую я вызываю из Update ()», я должен был быть более точным c, извините:
void Update() {
if (canMove && Input.GetKeyDown(KeyCode.RightArrow)) {
StartCoroutine(SmoothMove());
}
}