Referencia del entorno de ejecución de scripts
Polygon Engine ejecuta bytecode Lua precompilado en una máquina virtual sin parser en PS1. Liberar tiras de información de depuración; Depuración conserva la información de línea de origen. El editor refleja las tablas públicas y el comportamiento del ciclo de vida para una iteración rápida, mientras que la compilación valida el código fuente, el código de bytes, el uso de la API y los límites configurados.
Límites predeterminados de Project
| Configuración | Default de proyecto nuevo | Límite de tiempo de ejecución |
|---|---|---|
| Lua heap | 256 KB | Configurable desde 64 KB hasta el límite de 512 KB |
| Individual script | 64 KB | Máximo por script compilado |
| Lua Behaviours | 32 | Fijo máximo cargado en una escena |
| Instructions per callback | 50,000 | Guardia verificado por el gancho de instrucción de VM |
| Standard libraries | Restringido | El conjunto PS1 seguro siempre se aplica |
| Debug library | Off | Opción de creación de depuración-construir solamente |
Project Settings puede reducir los límites para reservar memoria o capturar scripts costosos antes. Aumentar un valor de proyecto no puede exceder el límite de tiempo de ejecución. Los informes de presupuesto incluyen código fuente/byte de Lua, heap, recuento de Lua Behaviour y uso de propiedad expuesta.
Patrón de script seguro
moveSpeed = 2.5
scoreTextName = "Score Text"
local scoreTextId = -1
local score = 0
local function refresh_score()
if scoreTextId >= 0 then
Text.SetText(scoreTextId, "SCORE " .. tostring(score))
end
end
function Start(gameObjectId)
scoreTextId = UI.Find(scoreTextName)
score = PlayerPrefs.GetInt("score", 0)
refresh_score()
end
function Update(gameObjectId, deltaTime)
local moveX, moveY = Input.GetAxis("Move")
CharacterController.Move(
gameObjectId,
moveX * moveSpeed * deltaTime,
0.0,
-moveY * moveSpeed * deltaTime
)
if Input.GetButtonDown("Interact") then
score = score + 10
refresh_score()
if not PlayerPrefs.SetInt("score", score) or not PlayerPrefs.Save() then
Log.Print("Save failed: " .. SaveData.GetLastError())
end
end
end
Esto almacena en caché la búsqueda de la interfaz de usuario, utiliza una acción semántica, evita la asignación de texto cuadro a cuadro cuando la puntuación no cambia, comprueba los fallos de persistencia y se mueve a través de la Character Controller.
Superficie Lua estándar
El tiempo de ejecución incluye las funciones de conversión de núcleo, iteración, llamada protegida, metatabla y acceso sin procesar, además de las porciones limitadas de string, math, table, coroutine y utf8. No expone archivos, sistema operativo, carga de paquetes, módulos nativos dinámicos o un entorno de depuración general en compilaciones de PS1.
Trate las definiciones de servidor de idioma generadas como el contrato de motor invocable, no como el permiso para usar las instalaciones de Lua de escritorio. Valida cualquier función de biblioteca estándar de la que dependa a través del espacio de trabajo administrado del proyecto y una compilación de PS1.
Lista de comprobación de rendimiento
- La caché
GameObject.Find,UI.FindyCanvas.Findda como resultadoStart. - Usa API de retorno escalar como
Physics.Raycasten rutas calientes. - Evita la concatenación de cadenas por cuadro, la construcción de tablas y los escaneos de nombres de escenas completas.
- Mantén cortas las llamadas de colisión, interfaz de usuario, línea de tiempo y finalización.
- Divide Lua Behaviours grande por responsabilidad cuando sus propiedades de ciclo de vida, estado o Inspector ya no formen un componente coherente.
- Validar rutas de falla para GameObjects, componentes, recursos, controladores y tarjetas de memoria que faltan.
- Mida la escena de lanzamiento más grande en hardware; los presupuestos de instrucciones y memoria no prueban el tiempo de cuadro.
Consulta Flujo de trabajo de programación y Límites de ejecución de PS1.
Límites de ejecución de Lua
Los proyectos nuevos permiten 256 KiB de memoria Lua compartida por todos los scripts, con un límite predeterminado de 50,000 instrucciones por llamada. Configura estos valores en Project Settings y mantén el límite de instrucciones por encima de cero. El límite es una comprobación de seguridad, no un objetivo de tasa de cuadros: mide el rendimiento del juego y mantén cortos los callbacks.
Si una callback excede un límite, inspecciona el Console y reduce su trabajo. Evita las tablas o cadenas grandes al inicio, las búsquedas de objetos en caché y distribuya el trabajo costoso entre las actualizaciones. Usa una compilación de depuración cuando necesites información de línea de origen en un error de script; usa Release para el juego final.
Consulta Panel PS1 Budget para obtener perfiles y Referencia de la API de Lua para obtener argumentos de función y valores de retorno.