CharacterController permite mover personajes con colisiones sin depender completamente de la física de un Rigidbody.
private CharacterController controller;
void Awake()
{
controller = GetComponent<CharacterController>();
}
Vector2 input = moveAction.action.ReadValue<Vector2>();
Vector3 direccion = new Vector3(
input.x,
0f,
input.y
);
controller.Move(
direccion * velocidad * Time.deltaTime
);
CharacterController.Move() no aplica gravedad automáticamente.
La gravedad debe programarse.
if (controller.isGrounded)
{
Debug.Log("En el suelo");
}
private float velocidadVertical;
[SerializeField]
private float gravedad = -9.81f;
void Update()
{
if (controller.isGrounded && velocidadVertical < 0f)
{
velocidadVertical = -2f;
}
velocidadVertical += gravedad * Time.deltaTime;
Vector3 movimiento = direccion * velocidad;
movimiento.y = velocidadVertical;
controller.Move(movimiento * Time.deltaTime);
}
Es muy usado para: