1 回答
TA贡献1828条经验 获得超3个赞
你的 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;
}
}
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报