Un Ground Check detecta si el personaje está tocando el suelo.
La opción básica:
controller.isGrounded
bool enSuelo = Physics.Raycast(
transform.position,
Vector3.down,
distanciaSuelo,
layerSuelo
);
Suele ser más estable que un rayo muy fino.
bool enSuelo = Physics.SphereCast(
transform.position,
radio,
Vector3.down,
out RaycastHit hit,
distancia,
layerSuelo
);
Muy práctico para personajes.
[SerializeField]
private Transform groundCheck;
[SerializeField]
private float radioSuelo = 0.3f;
[SerializeField]
private LayerMask suelo;
bool enSuelo = Physics.CheckSphere(
groundCheck.position,
radioSuelo,
suelo
);
Podés visualizar el área:
void OnDrawGizmosSelected()
{
if (groundCheck == null)
{
return;
}
Gizmos.DrawWireSphere(
groundCheck.position,
radioSuelo
);
}