Contenidos
- El error de partida: usar fuerzas como si fuesen control (y acabar patinando)
- No incumplas las leyes: jamás fuerces la Velocity cada frame
- Primer síntoma: “mi personaje patina como si tuviera hielo”
- Segundo síntoma: “mi personaje se tambalea y cae”
- Colisiones perfectas: Ground check que no falle en bordes
- Pendientes: cómo evitar el patinaje hacia abajo
- Escaleras: la cápsula rígida se queda atascada
- La alternativa sensata: CharacterController en vez de Rigidbody (cuando aplica)
- El enfoque híbrido: “Ragdoll como en GTA” solo cuando muere
- Tips finales para calidad profesional en tu controlador de personaje
- Recursos para seguir mejorando en Unity
- Conclusión: movimiento que responde cuando debe (y solo entonces)
- Preguntas Frecuentes
Si tu player controller (controlador de personaje) en Unity se siente raro, flotante o “como patines”, no estás solo. Y lo peor es que suele venir de un enfoque muy común: usar Rigidbody para mover el personaje con fuerzas y cambios de velocidad “porque sí”, como se ve en muchos tutoriales.
La buena noticia es que esto tiene arreglo. No necesitas magia ni un motor nuevo. Solo necesitas dejar de pelearte con la física y empezar a controlarla como toca. Aquí tienes una guía práctica, paso a paso, con los errores más habituales y las decisiones que marcan la diferencia entre un controlador de personaje con movimiento que se ve “finito” y uno que da asco al jugador.
El error de partida: usar fuerzas como si fuesen control (y acabar patinando)
El controlador de personaje típico que se enseña consiste en aplicar una AddForce (a veces en FixedUpdate) con una dirección multiplicada por una velocidad. Funciona… hasta que lo pruebas en un juego real.
El síntoma es muy claro: el personaje se mueve con sensación de flotabilidad. Acelera raro, tarda en detenerse, se desliza incluso cuando deberías estar parado. En una palabra: no tienes control, tienes física descontrolada.
Piensa en esto: en físicas reales, la fuerza es lo que inicia el movimiento. En personajes controlados, lo que necesitamos es que el jugador sienta una respuesta consistente: “pulso y me muevo”, “suelto y me paro”. La física ayuda, pero no debe decidirlo todo.
No incumplas las leyes: jamás fuerces la Velocity cada frame
Este es el error número uno que se ve en el 90% de los scripts que reviso.
Muchos ponen algo así como rigidbody.velocity = valor o una fórmula con la velocidad que calculan cada frame. Sí, puede parecer que “corrige” el movimiento, pero en realidad estás rompiendo la simulación.
Unity corre las físicas en FixedUpdate y espera que el sistema avance de forma coherente. En la vida real, las cosas no cambian de velocidad instantáneamente por arte de magia. Se aplican fuerzas y el objeto responde con aceleración.
Si cambias velocity directamente continuamente, te quedas sin esa coherencia. Resultado: deslizamientos, aceleraciones invisibles y colisiones menos creíbles.
Primer síntoma: “mi personaje patina como si tuviera hielo”
Cuando el suelo se siente resbaladizo, no basta con cambiar fuerzas. Aquí entra el apartado que casi nadie ajusta a conciencia: drag y el comportamiento entre suelo y aire.
Cómo arreglarlo bien
- Sube el Drag en el suelo para que al soltar el mando el personaje se detenga casi al instante.
- Bájalo en el aire para que al saltar o caer desde un borde no parezca una pluma flotando de forma eterna.
En resumen: el rozamiento “debe existir” donde el jugador está apoyado, y desaparecer cuando ya no lo está. El movimiento tiene que venir de tu lógica, no de un modelo físico pasivo del editor.
Segundo síntoma: “mi personaje se tambalea y cae”
Si tu rigid body está en el personaje y te permite rotar libremente por los tres ejes, tendrás problemas. No porque el rigid body sea malo, sino porque tu controlador de personaje casi nunca quiere rotación libre.
Los tres ejes que te arruinan el control
La rotación ocurre en X, Y y Z. Pero en juegos, de esos tres, solo tiene sentido una rotación controlada (normalmente la Y, tipo bailarina para mirar alrededor).
Cuando dejas que X y Z roten libremente, el personaje empieza a volcarse, caerse, girarse “sin motivo” o comportarse como si fuera un muñeco de feria.
Solución rápida
Dentro del Rigidbody, congela la rotación:
- Freeze rotation en el eje X
- Freeze rotation en el eje Z
Con eso, el “efecto futbolín” desaparece. Todavía no es perfecto, pero ya dejas de perder tiempo persiguiendo bugs raros.
Colisiones perfectas: Ground check que no falle en bordes
Este detalle es el que diferencia un controlador de personaje “pro” de uno que a veces se cree que está en el aire.
Mucha gente usa un raycast hacia abajo porque es fácil. El problema aparece cuando el personaje está justo en el borde: el rayo puede no tocar el suelo y Unity interpreta que estás en el vacío. El resultado típico: animaciones y fuerzas que cambian de estado de forma absurda.
Usa SphereCast en lugar de RayCast
En su lugar, usa un SphereCast, como si disparases una esfera hacia abajo. Una esfera tiene más área de contacto que un rayo fino, así que detecta suelo de forma mucho más fiable.
Filtra por capas (layers)
Configura las layers para evitar que una pared cercana cuente como suelo. Si no lo haces, tendrás el clásico bug de “Spider-Man” donde el personaje reacciona como si fuese a aterrizar contra la pared.
Regla práctica: crea una layer tipo Ground y comprueba el contacto solo contra esa capa.
Pendientes: cómo evitar el patinaje hacia abajo
En pendientes, el rigid body tiene una tendencia natural: deslizarse por la gravedad. Si solo aplicas fuerza horizontal, vas a tener comportamientos muy incoherentes.
La idea clave
Para que el personaje no se caiga marcha atrás (como patines sin freno), necesitas aplicar una fuerza que contrarreste la gravedad cuando estás “quieto” sobre la rampa.
Además, la fuerza de movimiento debe ir paralela a la superficie. El error típico es hacerla horizontal.
- Si vas hacia arriba con fuerza horizontal, pierdes eficiencia (te frena).
- Si vas hacia abajo con fuerza horizontal, te aceleras demasiado (sale disparado).
Esto se resuelve con trigonometría y uso correcto de la normal/perpendicular de la pendiente. No hace falta que lo conviertas en una tesis, pero sí entender la regla:
la fuerza que contrarresta y la dirección de movimiento deben estar relacionadas con la normal de la rampa.
Escaleras: la cápsula rígida se queda atascada
Si intentas subir escaleras con una cápsula rígida (rigid body) y colliders normales, verás algo frustrante: se queda enganchado en la altura del escalón.
Dos soluciones reales
- Colloiders invisibles tipo rampa
La escalera visual puede seguir teniendo escalones, pero por debajo le pones colliders que formen una rampa o triángulo “subible” para el sistema físico. Es simple y funciona. - Truco profesional: teletransporte suave hacia arriba
Cuando detectes el escalón, haces un ajuste ligeramente superior a la altura del escalón usando MovePosition. Así el personaje sube escalón a escalón sin dejar que la física explote.
Este segundo enfoque es el que suele utilizarse cuando buscas sensación suave y control estable.
La alternativa sensata: CharacterController en vez de Rigidbody (cuando aplica)
Con todo lo anterior, la pregunta es inevitable: ¿por qué no usar el componente “de serie” para el controlador de personaje?
Unity tiene un CharacterController que, para la mayoría de juegos, te da detección de suelo, pendientes y escaleras con menos sufrimiento. Y a veces, lo más profesional es lo más simple: si no necesitas físicas complejas (viento, mareas, personaje flotando en agua, explosiones con lanzamiento exagerado), CharacterController suele ser la opción correcta.
El enfoque híbrido: “Ragdoll como en GTA” solo cuando muere
Hay un punto donde el Rigidbody sí brilla: cuando el personaje deja de ser un controlador y pasa a ser física “libre”. El ejemplo típico es la muerte tipo ragdoll (muñeco de trapo) como en GTA.
La solución es híbrida:
- Usa CharacterController para moverte y subir escaleras.
- Desactívalo y activa el Rigidbody solo en el momento de la muerte.
Así te llevas lo mejor de los dos mundos: control preciso durante la vida y física convincente durante el ragdoll.
Tips finales para calidad profesional en tu controlador de personaje
Si vas a usar Rigidbody para el movimiento, estos son los ajustes que conviene revisar con lupa:
1) Congela rotación en X y Z
Evita el tambaleo y caídas raras.
2) Activa interpolación
La interpolación mejora la precisión de las colisiones entre pasos, especialmente en PC y consolas donde el salto visual entre frames puede notarse.
3) Colisiones continuas en vez de discretas
Si puedes, usa detección continua para que el punto de contacto sea más exacto. Esto reduce errores como “casi choco” o “me atravesó cuando iba rápido”.
4) No uses AddForce sin elegir bien el ForceMode
En lugar de cambiar la velocidad directa, usa AddForce con un ForceMode adecuado. Una recomendación práctica es usar VelocityChange para que el efecto de la fuerza no deje deslizamientos infinitos. Cuando el jugador suelta el input, el personaje se para de forma coherente.
5) SphereCast para suelo
Para bordes y evitar fallos de ground check. Mucho más fiable que un raycast fino.
6) Ground layer para todo lo relacionado con suelo
Solo comprueba contra esa capa para saltar, frenar o detectar apoyo.
7) Pendientes: fuerza alineada con la normal
Si trabajas con ángulos típicamente inferiores a 45º, ajusta fuerzas en función de la normal/perpendicular de la pendiente. Así evitas acelerar al bajar y quedarte frenado al subir.
Recursos para seguir mejorando en Unity
Si tu objetivo es que el movimiento de tu personaje esté a nivel profesional, conviene dominar tanto mecánicas como base técnica. En Frogames Formación tienes rutas y cursos centrados en Unity y desarrollo de videojuegos:
- Cursos de Unity
- Programación de videojuegos
- Ruta de desarrollo de videojuegos
- Catálogo completo de formación
- Blog de Frogames Formación
Para complementar con más artículos de desarrollo, buenas prácticas y conceptos que suelen faltar en los tutoriales básicos.
Conclusión: movimiento que responde cuando debe (y solo entonces)
Un buen controlador de personaje no se mide por si “se mueve”. Se mide por su respuesta.
Cuando tocas: el personaje se mueve. Cuando sueltas: se para. Cuando subes o bajas: no patina raro ni se acelera porque sí. Y cuando toca morir: ahí sí, ragdoll con física creíble.
Si aplicas estos principios a tu controlador de personaje (rotación congelada, SphereCast, force mode correcto, drag por estado, fuerzas alineadas a la pendiente y enfoque híbrido cuando toque), tu juego cambia de golpe. Se siente más sólido, más natural y mucho más “de estudio”.
Y eso es exactamente lo que buscamos: control preciso, estabilidad y colisiones que no traicionan cuando el jugador va rápido.
Preguntas Frecuentes
¿Por qué mi personaje en Unity se siente flotante o resbaladizo?
Porque el movimiento suele depender demasiado de fuerzas físicas mal configuradas.
¿Es buena idea modificar velocity directamente cada frame?
No. Rompe la coherencia física y genera deslizamientos y colisiones inconsistentes.
¿Qué es mejor para detectar el suelo: RayCast o SphereCast?
SphereCast, porque detecta el suelo de forma más estable, especialmente en bordes.
¿Cuándo conviene usar CharacterController en vez de Rigidbody?
Cuando buscas movimiento preciso y no necesitas físicas complejas o realistas.
¿Cómo evito que el personaje se caiga o tambalee?
Congelando la rotación en los ejes X y Z dentro del Rigidbody.