Unidad: comprobar si el jugador no está trabajando correctamente

Quiero que el jugador salte cuando el jugador sea castigado.

private void OnTriggerStay(Collider other) { if(other.gameObject.layer == 8) { isGrounded = true; }else { isGrounded = false; } } 

El jugador está en el air cuando genera. Después de que el jugador cae al Terreno, que tiene la etiqueta Ground , isGrounded sigue siendo falso. Cuando lo configuro se redondea manualmente y vuelvo a saltar, sigue siendo cierto después de la colisión. Tampoco quiero que el jugador haga doble salto en el air, lo que probalmente ya he codificado, pero no funciona porque algo anda mal.

Cambiar OnTriggerStay a OnTriggerEnter no cambia algo. Espero que puedas ayudarme.

No use OnTriggerStay para hacer esto. Eso no está garantizado para ser verdad en mucho tiempo.

Set isGrounded flag en true cuando se llama a OnCollisionEnter . Establézcalo en falso cuando se OnCollisionExit .

 bool isGrounded = true; private float jumpForce = 2f; private Rigidbody pRigidBody; void Start() { pRigidBody = GetComponent(); } private void Update() { if (Input.GetButtonDown("Jump") && isGrounded) { pRigidBody.AddForce(new Vector3(0, jumpForce, 0)); } } void OnCollisionEnter(Collision collision) { Debug.Log("Entered"); if (collision.gameObject.CompareTag("Ground")) { isGrounded = true; } } void OnCollisionExit(Collision collision) { Debug.Log("Exited"); if (collision.gameObject.CompareTag("Ground")) { isGrounded = false; } } 

Antes de decir que no funciona, verifique lo siguiente:

  • Debes tener Rigidbody o Rigidbody2D unidos al jugador.

  • Si este Rigidbody2D , debe usar OnCollisionEnter2D y OnCollisionExit2D .

  • Debe tener Collider conectado al reproductor con IsTrigger deshabilitado.

  • Asegúrese de no mover el Rigidbody con la transformación como transform.position y transform.Translate . Debes mover Rigidbody con la función MovePosition .

Use esto para verificar si se detecta colisión, es un buen punto de partida para una mayor depuración:

 private void OnTriggerStay(Collider other) { Debug.Log(other); }