public void FixedUpdate()
{
for (int direction = 1; direction < 5;direction )
{
if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
{
direction = 1;
continue;
}
else if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S))
{
direction = 2;
continue;
}
else if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A))
{
direction = 3;
continue;
}
else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D))
{
direction = 4;
continue;
}
if (direction == 1)
{
RB.velocity = transform.up * speed;
continue;
}
else if (direction == 2)
{
RB.velocity = -transform.up * speed;
continue;
}
else if (direction == 3)
{
RB.velocity = -transform.right * speed;
continue;
}
else if (direction == 4)
{
RB.velocity = transform.right * speed;
continue;
}
break;
這是我為改變 for 回圈中專案符號的方向并試圖打破它而撰寫的代碼,但它根本沒有打破我知道我必須將腳本附加到統一編輯器但我不知道如何打破回圈除錯時
uj5u.com熱心網友回復:
你的代碼是做什么的?坦率地說,您應該重寫它,但您可以通過洗掉所有“繼續”和“中斷”陳述句來解決這個問題。發生的事情是(例如,如果您按向上鍵)您的回圈正在運行direction == 1
,您的代碼會檢測到它并使用 繼續回圈direction == 2
。然后你再次檢測到 Up 并設定direction
為 1。這將永遠重復。
但實際上,我認為您想獨立檢查每個箭頭。這不需要回圈,也不需要else
. 只需撰寫代碼來檢查每個箭頭鍵。
uj5u.com熱心網友回復:
注意你在回圈中使用的變數。不要為其分配任何值,因為您將面臨無限回圈的風險。
for (int direction; direction < 5; direction ){
direction = 1;
}
這個回圈永遠不會停止。
此外,continue;
陳述句將確保代碼塊的其余部分不會執行,因此您永遠不會到達break;
那里,換句話說,一旦continue;
到達它將跳到下一次迭代。
我建議您洗掉回圈并在 update() 方法中分配方向變數。看看這個:https ://answers.unity.com/questions/409507/eliminating-input-loss.html
uj5u.com熱心網友回復:
默認情況下, FixedUpdate函式以固定間隔呼叫,因此您不必為您提到的目的引入 for 回圈。您可以直接在函式體中檢查輸入鍵。
您還可以從腳本更改呼叫之間的默認時間或導航到:
Edit > Settings > Time > Fixed Timestep
uj5u.com熱心網友回復:
撰寫函式嘗試執行的操作的正確方法是:
void FixedUpdate() => RB.velocity = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488908.html