CharacterController
Usa CharacterController para movimientos cinemáticos conscientes de colisiones, puesta a tierra y velocidad vertical sin implementar un solucionador de cuerpo rígido en Lua.
| Método | Retorno | Descripción |
|---|---|---|
CharacterController.Move(gameObjectId, x, y, z) | booleano | Aplica un delta de movimiento a través de la colisión del controlador. |
CharacterController.IsGrounded(gameObjectId) | booleano | Lee estado en contacto con el suelo. |
CharacterController.GetVelocityY(gameObjectId) | número | Lee la velocidad vertical. |
CharacterController.SetVelocityY(gameObjectId, velocity) | booleano | Invalida la velocidad vertical. |
moveSpeed = 3.0
jumpSpeed = 4.5
function Update(gameObjectId, deltaTime)
local moveX, moveY = Input.GetAxis("Move")
CharacterController.Move(
gameObjectId,
moveX * moveSpeed * deltaTime,
0.0,
-moveY * moveSpeed * deltaTime
)
if Input.GetButtonDown("Jump") and CharacterController.IsGrounded(gameObjectId) then
CharacterController.SetVelocityY(gameObjectId, jumpSpeed)
end
end
El movimiento puede estar limitado por Colliders, Step Offset, Slope Limit y Skin Width. Las pruebas de suelo y pendiente muestrean el plano superior de los Colliders de caja rotados compatibles. Este es el manejo de superficies de Character Controller, no un sistema general de física OBB para cuerpos rígidos. Si el proyecto necesita velocidad de plataformas móviles, tolerancia de salto al abandonar una plataforma (coyote time) o almacenamiento anticipado de la entrada de salto (jump buffering), debe implementarlos.
El ejemplo requiere un Character Controller en el host y una acción de botón Jump en Project Settings Input Action Map. Evita ejecutar este movimiento personalizado junto con un motor de jugador nativo en el mismo objeto, que aplicaría el movimiento dos veces. El motor no crea una acción de salto simplemente porque un script lo nombre.