UNITY 18 Feb, 2026

Character Controller Unity | Movimiento Básico

Como usar el Character Controller y mover a tu personaje en Unity 3D!!

Introducción al Character Controller

¡Bienvenidos al primer paso para dar vida a nuestro personaje en Unity 3D! En este proyecto, nos adentramos en las bases del movimiento utilizando el componente nativo Character Controller. A diferencia del Rigidbody, que se basa en físicas puras (fuerzas, masas y fricciones), el Character Controller nos permite mover a nuestro jugador de forma más precisa y "arcade", ideal para juegos de plataformas, aventuras o acción en tercera persona.

¿Qué hace exactamente este código?

El script que tienes en el snippet de abajo es la piedra angular de cualquier sistema de movimiento. Aquí te detallo las claves principales que hemos programado:

Este es solo el principio de una base muy sólida. ¡Copia el código de abajo, pruébalo en tu proyecto y prepárate para los siguientes niveles donde le añadiremos la orientación de la cámara y la gravedad!

Nota sobre versiones recientes de Unity

Este código utiliza el sistema de entrada clásico de Unity (Legacy Input Manager). Sigue siendo 100% funcional y excelente para aprender las bases en las versiones actuales de Unity. Solo asegúrate de ir a Edit > Project Settings > Player y comprobar que Active Input Handling está configurado en "Input Manager (Old)" o "Both".

Character Controller - Movimiento basico

Movimiento básico para controlar un personaje en un entorno 3D en Unity

C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

    public float horizontalMove;
    public float verticalMove;
    public CharacterController player;

    public float playerSpeed; 

    // Use this for initialization
    void Start () {
        player = GetComponent<CharacterController>();
    }
    
    // Update is called once per frame
    void Update () {

        horizontalMove = Input.GetAxis("Horizontal");
        verticalMove = Input.GetAxis("Vertical");
        
    }

    private void FixedUpdate()
    {
        player.Move(new Vector3(horizontalMove, 0, verticalMove) * playerSpeed * Time.deltaTime);
    }
}