Scripting en Lua 5.4
Manual de Cramion
La lógica de juego de Cramion se escribe en Lua, con un modelo de componentes sencillo:
cada script es una tabla, cada entidad con un componente Script recibe su propia instancia
(self) y el motor llama a sus métodos durante el modo Play.
Empieza aquí
Tu primer script en tres pasos.
Primeros pasos
Cómo funciona un script y cómo se trabaja con él en el editor.
Tu primer script
Crea un script Lua, engánchalo a un objeto y dale a Play.
Ciclo de vida
Start, Update, colisiones... qué llama el motor y cuándo.
Propiedades
Valores que se editan en el Inspector sin tocar el código.
Recarga en caliente
Guarda en Play sin perder el estado y usa la consola de Lua.
Prefabs
Objetos reutilizables: crear, instanciar, aplicar y usarlos desde Lua.
Conectar una IA (MCP)
Claude, Cursor o Copilot trabajando dentro del editor: escenas, scripts, shaders y modelos.
Referencia de la API
Todo lo que puedes usar desde Lua, por tema.
Vec3
Vectores 3D: operaciones, ángulos, interpolación, suavizado y proyecciones.
Quat (rotaciones)
Rotaciones sin bloqueo de cardán: mirar hacia, girar con velocidad fija, interpolar.
Mathf
Limitar, interpolar, suavizar, ángulos, trigonometría y ruido Perlin.
Random
Aleatorios con semilla: rangos, probabilidades, direcciones, listas.
Entity
Transformación, jerarquía, física, sonido, animación e interfaz de un objeto.
Scene
Buscar, crear, instanciar y destruir objetos; cambiar de escena.
Input
Teclado, ratón, ejes y mando.
Time
Tiempo del frame, tiempo total y escala de tiempo.
Physics
Raycasts y consultas a la física.
Navegación
NavMesh: agentes que buscan el camino.
Mallas por código
Crea y modifica mallas con varios materiales desde Lua.
Mundo de bloques
Leer y cambiar bloques de un mundo voxel.
Audio
Sonidos sueltos y fuentes de audio.
Interfaz (UI)
Textos, botones e imágenes en pantalla.
Prefs y Game
Datos guardados entre partidas y salir del juego.
Debug
Mensajes, avisos y errores en la consola del editor.
Gráficos
Tus propios shaders: el aspecto de las superficies en GLSL.
Ejemplos
Scripts completos listos para copiar a Assets/Scripts/.
Girar un objeto
Aspas de molino, monedas, plataformas… El eje y la velocidad se ajustan en el Inspector.
Cámara que sigue al jugador
Se ejecuta en LateUpdate para moverse después de que el jugador ya se movió en su Update.
Jugador con física
Movimiento con WASD y salto con Espacio sobre un Rigidbody con CapsuleCollider.
Detecta el suelo con un raycast y fija la velocidad horizontal para que el control sea preciso.
Disparo con raycast
Al hacer clic, lanza un rayo desde la cámara hacia delante y empuja lo que toque.
Monedas y puntuación
Cada moneda tiene un SphereCollider marcado como trigger y la etiqueta Moneda.
El marcador es una entidad con un UIText llamada Marcador.
Generador de enemigos
Usa una entidad desactivada como plantilla (un "prefab" dentro de la escena) y la copia con
Scene.instantiate cada cierto tiempo en un punto aleatorio.
Conducir un vehículo
En una entidad con Rigidbody, Vehicle y ruedas con WheelCollider.
Muestra la velocidad en un UIText llamado Velocimetro.
Menú, opciones y récord
El método OnJugar se conecta al UIButton "Jugar", OnVolumen a un UISlider
y OnSalir al botón "Salir". El volumen y el récord se guardan con Prefs.
Animación de un personaje
Alimenta los parámetros del controlador de animación a partir de la velocidad del Rigidbody.
Scripts que se hablan
entity:getScript() devuelve la instancia del script de otra entidad: puedes leer sus datos y llamar a sus métodos.
Así, un gestor de nivel puede coordinar a los demás.
IA: patrullar y perseguir
Un guardia con NavAgent que patrulla por puntos al azar y persigue al jugador cuando lo ve
(el raycast de la malla comprueba que no haya una pared en medio). Si lo pierde, vuelve a patrullar.
Terreno procedural con colisión
Script completo listo para copiar.
Varios materiales y efectos
Script completo listo para copiar.
Olas: cambiar la malla cada frame
Script completo listo para copiar.
La referencia completa del código está en CramionCore/include/CramionCore/scripting/Scripting.h.
¿Dudas? Pregunta en el Discord.