1 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
你的 do while 循環(huán)Rigidbody2d.velocity = new Vector2(1f, 0f);每次都會(huì)執(zhí)行。該循環(huán)中沒有任何變化。如果你這樣做:
while (x < y)
{
a = 5;
x++;
}
這樣做沒有任何意義。只是a = 5會(huì)產(chǎn)生相同的效果,只是少了很多不必要的循環(huán)。
最重要的是,您根本沒有改變 的價(jià)值x。這就是導(dǎo)致問題的原因。你基本上在做
while (x < y)
a = 5;
如果在開始x時(shí)小于y,x將始終小于y,因此它將永遠(yuǎn)執(zhí)行while循環(huán)體,因此 Unity 卡在該Update方法中。
這與每幀調(diào)用一次的事實(shí)無關(guān)Update。這只是一個(gè)簡單的無限循環(huán),由使用不變的條件引起。即使程序在不同的函數(shù)中,這也會(huì)阻塞程序。
您可以改為執(zhí)行以下操作:
// 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 關(guān)注
- 185 瀏覽
添加回答
舉報(bào)