[英]Does someone know what's wrong in my if statement in C# Unity3D?
我想更改int速度值,但是不起作用。 有人能幫我嗎? 如果您的信息太少,請問我。 這是我的代碼:
if (Input.GetKeyDown (KeyCode.W)) {
sprint1 = true;
} else if (Input.GetKeyUp(KeyCode.W)){
sprint1 = false;
}
if (Input.GetKeyDown(KeyCode.LeftShift)){
sprint2 = true;
} else if (Input.GetKeyUp(KeyCode.LeftShift)){
sprint2 = false;
}
if (sprint2 == false && Input.GetKeyUp(KeyCode.W) && Input.GetKeyUp(KeyCode.A) && Input.GetKeyUp(KeyCode.S) && Input.GetKeyUp(KeyCode.D)){
speed = 0;
} if (sprint2==false && (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.D))){
speed = 4;
}if (sprint1 == true && sprint2 == true && Scoped==true) {
speed = 8;
}
if (sprint2 == false && Input.GetKeyUp(KeyCode.W) && Input.GetKeyUp(KeyCode.A) && Input.GetKeyUp(KeyCode.S) && Input.GetKeyUp(KeyCode.D)){
speed = 0;
}
除非在完全相同的幀中釋放W,A,S和D,否則將永遠不會輸入這種特殊情況。請查看Input.GetKeyUp文檔 :
在用戶釋放由key KeyCode枚舉參數標識的幀期間,返回true。
您應該這樣組織:
// If you are sprinting, set the speed to 8
if (sprint1 == true && sprint2 == true && Scoped==true) {
speed = 8;
}
// Else if one of those keys has been touched during this frame, set the speed to 4
else if (sprint2==false && (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D))){
speed = 4;
}
// Else, just set the speed to 0
else
speed = 0;
如果按鍵沒有按下,則表示向上。 無需同時檢查兩者。 無論如何,這就是我解釋你是否的方式。
sprint1 = Input.GetKeyDown(KeyCode.W);
sprint2 = Input.GetKeyDown(KeyCode.LeftShift);
if (sprint2)
{
if (sprint1 && Scoped)
speed = 8;
else
speed = 4; // do you want speed 0 or 4 if either of these others are false
}
else
{
if (sprint1
|| Input.GetKeyDown(KeyCode.A)
|| Input.GetKeyDown(KeyCode.S)
|| Input.GetKeyDown(KeyCode.D))
speed = 4;
else
speed = 0;
}
如果我解釋您的願望,我認為會更好的是
sprint1 = Input.GetKeyDown(KeyCode.W);
sprint2 = Input.GetKeyDown(KeyCode.LeftShift);
if (sprint1 && sprint2 && Scoped)
speed = 8;
else if (sprint1
|| Input.GetKeyDown(KeyCode.A)
|| Input.GetKeyDown(KeyCode.S)
|| Input.GetKeyDown(KeyCode.D))
speed = 4;
else
speed = 0;
這是一種方法,因此您不必為sprint做所有這些不必要的標記。
if (Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftShift) && Scoped)
speed = 8;
else if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.S))
speed = 4;
else
speed = 0;
我已經解決了自己的問題。 感謝您的所有評論,但我想向您展示我的解決方案:
if (Input.GetKey (KeyCode.W)) {
sprint1 = true;
} else {
sprint1 = false;
}
if (Input.GetKey (KeyCode.LeftShift)) {
sprint2 = true;
} else {
sprint2 = false;
}
if (sprint2 == false && sprint1==false && !(Input.GetKey (KeyCode.A)) && !(Input.GetKey (KeyCode.S)) && !(Input.GetKey (KeyCode.D))){
speed = 0;
} if ((sprint1==true && sprint2==false) || Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.S) || Input.GetKey (KeyCode.D)){
speed = 4;
}if (sprint1 == true && sprint2 == true && Scoped==true) {
speed = 8;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.