這是我的代碼來處理雙跳。但有時它不起作用。雙跳不按預期工作
第一次我觸摸屏幕我的角色跳轉(變量doublejump = true)。當我第二次觸摸屏幕時,我的角色跳得更高(雙跳=假)(雙跳起作用)。
但有時當我觸摸屏幕首次(無需觸摸屏幕第二次)doublejump變量= FALSE(雙跳不工作,我預期)
幫我解決這個問題
我的代碼:
void FixedUpdate()
{
isGrounded = GroundedCheck();
if (gm.gameState == GameManager.GameState.playing) {
foreach (GameObject g in gm.deadObjects) {
if (g.name == "P13") {
g.GetComponent<Mygroup>().targetName = "P12";
} else if (g.name == "P12") {
g.GetComponent<Mygroup>().targetName = "P11";
} else if (g.name == "P11") {
g.GetComponent<Mygroup>().targetName = "P10";
} else if (g.name == "P10") {
g.GetComponent<Mygroup>().targetName = "P9";
} else if (g.name == "P9") {
g.GetComponent<Mygroup>().targetName = "P8";
} else if (g.name == "P8") {
g.GetComponent<Mygroup>().targetName = "P7";
} else if (g.name == "P7") {
g.GetComponent<Mygroup>().targetName = "P6";
} else if (g.name == "P6") {
g.GetComponent<Mygroup>().targetName = "P5";
} else if (g.name == "P5") {
g.GetComponent<Mygroup>().targetName = "P4";
} else if (g.name == "P4") {
g.GetComponent<Mygroup>().targetName = "P3";
} else if (g.name == "P3") {
g.GetComponent<Mygroup>().targetName = "P2";
} else if (g.name == "P2") {
g.GetComponent<Mygroup>().targetName = "P1";
} else if (g.name == "P1") {
g.GetComponent<Mygroup>().targetName = "P0";
} else if (g.name == "P0") {
g.GetComponent<Mygroup>().targetName = null;
}
}
if (this.gameObject.name == "P0") {
targetName = "";
} else if (this.gameObject.name == "P1")
targetName = "P0";
else if (this.gameObject.name == "P2")
targetName = "P1";
else if (this.gameObject.name == "P3")
targetName = "P2";
else if (this.gameObject.name == "P4")
targetName = "P3";
else if (this.gameObject.name == "P5")
targetName = "P4";
else if (this.gameObject.name == "P6")
targetName = "P5";
else if (this.gameObject.name == "P7")
targetName = "P6";
else if (this.gameObject.name == "P8")
targetName = "P7";
else if (this.gameObject.name == "P9")
targetName = "P8";
else if (this.gameObject.name == "P10")
targetName = "P9";
else if (this.gameObject.name == "P11")
targetName = "P10";
else if (this.gameObject.name == "P12")
targetName = "P11";
target = GameObject.Find (targetName);
if (isGrounded) {
jumping = false;
doubleJump = false;
jumpAnim = false;
if (this.gameObject.name == "P0" && isGrounded && !doubleJump && !jumping) {
if (Input.GetMouseButtonDown (0) && this.gameObject.name == "P0") {
jumping = true;
rid.velocity = new Vector3 (0, 50f * jump, 0);
doubleJump = true;
}
}
if (this.gameObject.name == "P0" && !isGrounded && doubleJump && jumping) {
if (Input.GetMouseButtonDown (0) && this.gameObject.name == "P0") {
rid.velocity = new Vector3 (0, 60f * jump, 0);
doubleJump = false;
}
}
if (target != null && this.gameObject.name != "P0" && isGrounded && target.GetComponent<Mygroup>().doubleJump && !target.GetComponent<Mygroup>().isGrounded) {
StartCoroutine (Jump());
}
if (target != null && this.gameObject.name != "P0" && !isGrounded && doubleJump && !target.GetComponent<Mygroup>().isGrounded && !target.GetComponent<Mygroup>().doubleJump) {
StartCoroutine (JumpDouble());
}
}
IEnumerator Jump()
{
yield return new WaitForSeconds (time);
if (gameObject.name == "P1")
rid.velocity = new Vector3 (0, 49.6f * jump, 0);
if (gameObject.name == "P2")
rid.velocity = new Vector3 (0, 49.4f * jump, 0);
if (gameObject.name == "P3")
rid.velocity = new Vector3 (0, 49.2f * jump, 0);
if (gameObject.name == "P4")
rid.velocity = new Vector3 (0, 49f * jump, 0);
if (gameObject.name == "P5")
rid.velocity = new Vector3 (0, 48.8f * jump, 0);
if (gameObject.name == "P6")
rid.velocity = new Vector3 (0, 48.6f * jump, 0);
if (gameObject.name == "P7")
rid.velocity = new Vector3 (0, 48.4f * jump, 0);
if (gameObject.name == "P8")
rid.velocity = new Vector3 (0, 48.2f * jump, 0);
if (gameObject.name == "P9")
rid.velocity = new Vector3 (0, 48f * jump, 0);
if (gameObject.name == "P10")
rid.velocity = new Vector3 (0, 47.8f * jump, 0);
if (gameObject.name == "P11")
rid.velocity = new Vector3 (0, 47.6f * jump, 0);
if (gameObject.name == "P12")
rid.velocity = new Vector3 (0, 47.4f * jump, 0);
jumping = true;
doubleJump = true;
}
IEnumerator JumpDouble()
{
yield return new WaitForSeconds (time);
if (doubleJump) {
if (gameObject.name == "P1")
rid.velocity = new Vector3 (0, 59.8f * jump, 0);
if (gameObject.name == "P2")
rid.velocity = new Vector3 (0, 59.6f * jump, 0);
if (gameObject.name == "P3")
rid.velocity = new Vector3 (0, 59.4f * jump, 0);
if (gameObject.name == "P4")
rid.velocity = new Vector3 (0, 59.2f * jump, 0);
if (gameObject.name == "P5")
rid.velocity = new Vector3 (0, 59f * jump, 0);
if (gameObject.name == "P6")
rid.velocity = new Vector3 (0, 58.8f * jump, 0);
if (gameObject.name == "P7")
rid.velocity = new Vector3 (0, 58.6f * jump, 0);
if (gameObject.name == "P8")
rid.velocity = new Vector3 (0, 58.4f * jump, 0);
if (gameObject.name == "P9")
rid.velocity = new Vector3 (0, 58.2f * jump, 0);
if (gameObject.name == "P10")
rid.velocity = new Vector3 (0, 58f * jump, 0);
if (gameObject.name == "P11")
rid.velocity = new Vector3 (0, 57.8f * jump, 0);
if (gameObject.name == "P12")
rid.velocity = new Vector3 (0, 57.6f * jump, 0);
doubleJump = false;
jumping = false;
}
}
當你到達地面時,你是否將'doubleJump'&'jumping'設置爲false? – Knells
是的,我做 \t if(isGrounded){ \t \t \t \t jumping = false; \t \t \t \t doubleJump = false; – soraka
這種情況下,'跳躍'變量實際上並沒有做任何事情在塊o你已經發布的代碼,你可以把它拿出來。 'if(this.gameObject.name ==「P0」&& isGrounded &&!doubleJump &&!jumping)'可以是'if(this.gameObject.name ==「P0」&& isGrounded)''具有完全相同的功能 – Knells