Moverse sobre pendientes puede requerir lógica extra según el sistema de movimiento.

CharacterController

CharacterController tiene propiedades como:

Estas se ajustan desde el Inspector.


Obtener normal del suelo

Con un Raycast:

if (Physics.Raycast(
    transform.position,
    Vector3.down,
    out RaycastHit hit,
    2f,
    layerSuelo))
{
    Vector3 normal = hit.normal;
}

Proyectar movimiento sobre la pendiente

Vector3 movimientoPendiente =
    Vector3.ProjectOnPlane(
        direccion,
        hit.normal
    ).normalized;

Esto adapta la dirección al plano de la superficie.


Ángulo de pendiente

float angulo = Vector3.Angle(
    hit.normal,
    Vector3.up
);

Comprobar límite