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
oRigidbody2D
conectado al reproductor. -
Si este
Rigidbody2D
, debe usarOnCollisionEnter2D
yOnCollisionExit2D
. -
Debes tener Collider conectado al jugador con IsTrigger deshabilitado.
-
Asegúrese de no mover el
Rigidbody
con la transformación, comotransform.position
ytransform.Translate
. Debe moverRigidbody
con la funciónMovePosition
.
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);
}