Ваш цикл do while будет выполняться Rigidbody2d.velocity = new Vector2(1f, 0f);
каждый раз.В этом цикле ничего не меняется.Если бы вы сделали:
while (x < y)
{
a = 5;
x++;
}
Не было бы никакого смысла делать это.Просто a = 5
будет иметь тот же эффект, только намного меньше ненужных циклов.
Кроме того, вы вообще не меняете значение x
.Вот что вызывает проблему.Вы в основном делаете
while (x < y)
a = 5;
Если x
был меньше y
в начале, x
всегда будет меньше y
, поэтому он продолжит выполнение тела while
цикл навсегда, и поэтому Unity застрял в методе Update
.
Это не имеет ничего , связанного с тем фактом, что Update
вызывается один раз за кадр.Это простой бесконечный цикл, вызванный использованием условия, которое не меняется.Это заблокирует программу, даже если она выполняет другую функцию.
Вот что вы можете сделать вместо этого:
// Using a property will always return the targets X value when called without having to
// set it to a variable
private float X
{
// Called when getting value of X
get { return Rigidbody2d.transform.position.X; } }
// Called when setting the value of X
set { transform.position = new Vector2(value, transform.position.y); }
}
private bool isMoving = false;
private void Update ()
{
if (X < -4 && !isMoving)
{
Rigidbody2d.velocity = new Vector2(1f, 0f); // Move plank till it reaches point B
isMoving = true;
}
else if (isMoving)
{
Rigidbody2d.velocity = new Vector(0f, 0f); // You probably want to reset the
// velocity back to 0
isMoving = false;
}
}