这是我的代码来处理双跳。但有时它不起作用。双跳不按预期工作
第一次我触摸屏幕我的角色跳转(变量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