Saltar al contenido principal

Flujo de trabajo de programación en Lua

Polygon Engine expone el mismo contrato de Lua, con distinción entre mayúsculas y minúsculas, en Play Mode del editor y en PlayStation 1. Los scripts usan tablas y métodos del engine en PascalCase, además de callbacks del ciclo de vida en PascalCase. El mismo contrato declarado que valida un script en el editor se comprueba durante una compilación de PS1.

Configurar el espacio de trabajo​

Abre Project Settings > Scripting, selecciona tu editor externo y usa Configura Lua Workspace. Polygon Engine crea los archivos administrados en .polygon/lua/, combina la configuración del espacio de trabajo de Lua sin sobrescribir otras claves del usuario y configura los diagnósticos para la carpeta Assets/Scripts del proyecto.

Los archivos generados incluyen:

  • definiciones para el servidor de lenguaje de cada tabla pública, constante, método, tipo de retorno y callback del ciclo de vida;
  • POLYGON_LUA_API.md, generado a partir de la misma declaración utilizada por las pruebas de paridad en tiempo de ejecución;
  • una tarea del editor que valida el proceso de compilación de scripts para PS1.

Estos archivos se generan a partir de otras fuentes. No los edites manualmente; vuelve a generar el espacio de trabajo después de instalar una actualización del engine.

Crear un Lua Behaviour​

  1. Selecciona un GameObject.
  2. Elige Add Component > Lua Behaviour.
  3. Selecciona Create Script..., elige una plantilla y guarda el archivo en Assets/Scripts.
  4. Selecciona Open Script para abrir el editor configurado en ese archivo.

El Inspector analiza los valores de nivel superior declarados antes de la primera función y expone los valores admitidos como Script Properties. Usa nombres descriptivos y el sufijo gameObjectId para las referencias:

moveSpeed = 2.5
doorGameObjectId = -1
promptTextName = "Prompt Text"

function Start(gameObjectId)
Log.Print(GameObject.GetName(gameObjectId) .. " ready")
end

Cada valor sobrescrito en el Inspector pertenece a esa instancia de Lua Behaviour. Restablecer la propiedad recupera el valor predeterminado declarado en el script. Prefab Sync conserva los valores sobrescritos de Lua expuestos en la raíz de la instancia.

Diagnóstico y Hot Reload​

El Inspector valida la sintaxis sin ejecutar el script. Los mensajes de Problems y Console incluyen la ruta y la línea del script cuando están disponibles; al activarlos, se abre el editor configurado en esa ubicación. Durante Play Mode, guardar un archivo Lua recarga su Lua Behaviour para permitir iteraciones breves de jugabilidad sin una compilación completa de PS1.

La recarga en caliente facilita el desarrollo. Reinicia siempre Play Mode después de cambiar el orden de inicialización, las propiedades expuestas o el estado persistente, y valida el CUE empaquetado antes de dar por terminado el comportamiento.

Reglas de nomenclatura exactas​

Los nombres del engine distinguen entre mayúsculas y minúsculas. Por ejemplo:

function Update(gameObjectId, deltaTime)
if Input.GetButtonDown("Interact") then
AudioSource.Play(gameObjectId)
end
end

Update, Input.GetButtonDown y AudioSource.Play son válidos. Los nombres del ciclo de vida en minúsculas y las tablas globales no declaradas no se registran. Las funciones personalizadas invocadas por un Button, Interactable, Timeline o GameObject.Invoke pueden usar cualquier identificador válido de Lua, pero el nombre configurado de la función debe coincidir exactamente.

Qué se ejecuta en PS1​

El código fuente de Lua no se traduce a C. Durante una compilación de PS1, Polygon Engine compila cada script a bytecode para una máquina virtual de Lua con límites definidos y sin analizador de código fuente, integrada en el entorno de ejecución nativo de PS1. Release elimina la información de depuración; Debug conserva la información de las líneas de origen para los diagnósticos. Ambas variantes de PS1 cargan bytecode binario, no código fuente de Lua. La validación de compilación comprueba el uso de la API, la cantidad y el tamaño de los scripts, y la configuración; la máquina virtual aplica los presupuestos de heap e instrucciones durante la ejecución del juego. Una compilación estática no demuestra que todos los callbacks se ajusten a su presupuesto de ejecución.

Programa la jugabilidad teniendo en cuenta el hardware:

  • almacena los ID de GameObject y UI en caché para evitar búsquedas repetidas por nombre;
  • prefiere Input Actions semánticas para que sus asignaciones se preprocesen en registros de tamaño fijo;
  • evita crear tablas o cadenas en cada cuadro;
  • usa FixedUpdate para el paso de simulación limitado a 30 Hz y Update para la presentación o la entrada que se procesa en cada cuadro;
  • usa Physics.Raycast, GameObject.CompareTag y las API de componentes con tipos definidos para realizar consultas sin asignar memoria durante la ejecución;
  • maneja los resultados false y nil en lugar de dar por hecho que existe un componente o recurso.

La validación automatizada comprueba el cumplimiento de la API y los presupuestos, pero no demuestra el rendimiento por cuadro en hardware real. Mide el rendimiento de la escena más grande y ejecuta el CUE de Release en DuckStation y en una consola real u ODE antes de publicar.

Continuar​