Saltar al contenido principal

Descripción general de la programación en Lua

Polygon Engine usa Lua Behaviours para la lógica del proyecto. Cada Lua Behaviour se asigna a un GameObject y recibe su ID numérico estable. Play Mode del editor y el entorno de ejecución de PlayStation exponen la misma API pública, con distinción entre mayúsculas y minúsculas.

Ciclo de vida​

Define solo las callbacks que necesita el script:

function Awake(gameObjectId) end
function OnEnable(gameObjectId) end
function Start(gameObjectId) end
function FixedUpdate(gameObjectId, fixedDeltaTime) end
function Update(gameObjectId, deltaTime) end
function LateUpdate(gameObjectId, deltaTime) end

function OnCollisionEnter(gameObjectId, otherGameObjectId) end
function OnCollisionStay(gameObjectId, otherGameObjectId) end
function OnCollisionExit(gameObjectId, otherGameObjectId) end
function OnTriggerEnter(gameObjectId, otherGameObjectId) end
function OnTriggerStay(gameObjectId, otherGameObjectId) end
function OnTriggerExit(gameObjectId, otherGameObjectId) end

function OnDisable(gameObjectId) end
function OnDestroy(gameObjectId) end

Awake se ejecuta una vez después de las cargas de Lua Behaviour. OnEnable se ejecuta cada vez que se activa, y Start se ejecuta antes de su primer Update. FixedUpdate utiliza el paso de simulación de 30 Hz limitado. Las callbacks de colisión y activación requieren la configuración Collider correspondiente. OnDestroy se ejecuta antes de que se libere el entorno de script durante el desmontaje o una transición de escena.

Propiedades expuestas​

Declaraciones escalares de nivel superior antes de que la primera función se convierta en campos Inspector:

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

El editor conserva los valores sobrescritos de cada GameObject. Usa propiedades expuestas para las referencias de escena y los ajustes, en lugar de escribir ID directamente en distintas partes del script.

Guión mínimo​

rotationSpeed = 30.0

function Update(gameObjectId, deltaTime)
Transform.RotateY(gameObjectId, rotationSpeed * deltaTime)
end

Input y Ejemplo de Colisión​

moveSpeed = 2.0

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

function Update(gameObjectId, deltaTime)
if Input.GetButton(Input.RIGHT) then
Transform.Translate(gameObjectId, moveSpeed * deltaTime, 0.0, 0.0)
end
end

function OnCollisionEnter(gameObjectId, otherGameObjectId)
Log.Print("Touched " .. GameObject.GetName(otherGameObjectId))
end

Familias API​

ZonaMesas públicas
NúcleoGameObject, Transform, Time, Log, Engine
Input y comentariosInput, PlayerInput, Rumble
Physics y movimientoCollider, Physics, CharacterController
Presentación de escenaCamera, Light, AudioSource, Music, ParticleSystem
AnimationTransformAnimator, Animator, Animation, Timeline
MundoSceneManager, NavMesh, NavMeshAgent, Portal, Interactable
UIUI, Canvas, Text, Image, Button, RectTransform, Graphic, Selectable, ProgressBar
PersistenciaPlayerPrefs, SaveData

Consulta Resumen de la API para cada método y constante, luego usa las páginas de tema para obtener ejemplos y requisitos de componentes.

Reglas de tiempo de ejecución​

  • La caché GameObject y los ID de UI en lugar de realizar búsquedas de nombres en cada cuadro.
  • Trate a false, nil y -1 como resultados normales de fallas y valida el componente requerido antes de usar su API.
  • Prefiere las acciones semánticas de Input como "Move" y "Interact" a los botones físicos para un juego reemparejable.
  • Limita el trabajo de los callbacks del ciclo de vida y evita crear cadenas y tablas temporales en cada cuadro.
  • Ejecuta Validate Project, Show PS1 Budget y Build > Tools & Diagnostics > Build with Readiness Checks, luego prueba el CUE de Release en la ruta de hardware de destino.

Consulta Flujo de trabajo de programación, Referencia del entorno de ejecución de scripts y Límites de ejecución de PS1.