Замораживает ваше приложение, потому что вы не даете другим сценариям возможности работать, если условие в цикле while
не выполнено.
Чтобы исправить это, поместите этот код в функцию сопрограммы, затем добавьте yield return null;
в цикл while
. Это заставляет Unity ждать кадра после каждого цикла, поэтому другие сценарии могут запускать каждый кадр. Это должно решить проблему замораживания вне зависимости от того, завершается цикл while
или нет. Я бы также предложил вам использовать Vector3.Distance
, чтобы определить, когда вы находитесь рядом с пунктом назначения.
public float reachThreshold = 0.2f;
void Start()
{
StartCoroutine(MoveBject());
}
IEnumerator MoveBject()
{
float distance = Vector3.Distance(transform.position, new Vector3(desX, desY));
while (distance > reachThreshold)
{
// 2 - Movement
Vector3 movement = new Vector3(
0.1f * desX,
0.1f * desY,
0);
//movement *= Time.deltaTime;
transform.Translate(movement);
//Wait a frame
yield return null;
}
}
Если вы действительно хотите переместить GameObject на другую позицию с течением времени, см. этот пост.