travesaño saca reglas regla que offside obsai lugar juego habilita futbol fuera cuando casos arquero aplica c# unity3d

c# - saca - Unidad: comprobar si el reproductor está conectado a tierra no funciona



regla 11 del futbol (2)

Quiero que el jugador salte cuando el jugador esté conectado a tierra.

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

El jugador está en el aire cuando se genera. Después de que el jugador cae al Terreno, que tiene la etiqueta Ground , isGrounded sigue siendo falso. Cuando configuro isGround manualmente verdadero y salto de nuevo, sigue siendo cierto después de la colisión. Tampoco quiero que el jugador salte dos veces en el aire, lo que probablemente ya codifiqué pero no funciona porque algo está mal.

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


No use OnTriggerStay para hacer esto. Eso no garantiza que sea cierto en el momento.

Establezca el indicador isGunded en verdadero cuando se OnCollisionEnter . Establézcalo en falso cuando se OnCollisionExit .

bool isGrounded = true; private float jumpForce = 2f; private Rigidbody pRigidBody; void Start() { pRigidBody = GetComponent<Rigidbody>(); } 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 conectado al reproductor.

  • Si este Rigidbody2D , debe usar OnCollisionEnter2D y OnCollisionExit2D .

  • Debes tener Collider conectado al jugador con IsTrigger deshabilitado.

  • Asegúrese de no mover el Rigidbody con la transformación, como transform.position y transform.Translate . Debe 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); }