это мой код для обработки двойного прыжка. Но иногда он не работает.Двойной прыжок не работает, как ожидалось
В первый раз, когда я касаюсь экрана, мой персонаж прыгает вверх (переменная doublejump = true). Когда я касаюсь экрана во второй раз, мой персонаж прыгает выше (двойной прыжок = ложь) (двойной прыжок работал).
Но иногда, когда я коснуться экрана в первый раз (нет необходимости прикасаться к экрану во второй раз) doublejump переменного = лжи (двойной прыжок не работает, как я ожидал)
Помогите мне исправить
Мой код:
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 если (isGrounded) { \t \t \t \t прыжки = ложь; \t \t \t \t doubleJump = false; – soraka
В этом случае переменная 'jumping' на самом деле ничего не делает в блоках o кода, который вы опубликовали, и вы можете его вынуть. 'if (this.gameObject.name ==" P0 "&& isGrounded &&! doubleJump &&! jumping)' может быть 'if (this.gameObject.name ==" P0 "&& isGrounded)' с помощью той же функции – Knells