Sesión y transiciones
Estos servicios nativos están disponibles en Play Mode y compilaciones de PS1. El ejemplo Last Exit los combina con behaviours Lua normales; el engine no contiene reglas específicas del demo.
Datos de la partida
Session.Read(key) devuelve un string o nil. Session.Write(key, value) y Session.Delete(key) devuelven booleanos. Hay 32 entradas, con claves de 1-31 bytes y valores de 0-63 bytes. Se rechazan NUL incrustados. Insertar una clave nueva en una tabla llena falla sin modificarla; actualizar una existente sigue funcionando. Delete también tiene éxito si la clave válida no existe.
Los datos sobreviven al reemplazo de escena y su VM Lua. Una nueva sesión de Play, salir de la aplicación o reiniciar la consola los elimina. No se escribe en Memory Card. Usa prefijos e IDs de ítems estables; los IDs de objetos de escena no son persistentes. Comprueba los resultados y usa SaveData para guardar permanentemente.
Para un flujo práctico, consulta cómo reutilizar una escena con su HUD y scripts y el ejemplo de progreso en el HUD.
Cambios de escena en cola
SceneManager.LoadScene acepta un nombre/ruta de escena y una tabla opcional con EntryPoint (nombre de hasta 63 bytes) y Presentation (Black o Default). Devuelve si se aceptó la solicitud, no si terminó la carga. Se rechazan destinos ausentes y solicitudes si ya existe otra pendiente. Incluye todos los destinos de PS1 en Build Settings. Sin opciones se conserva la presentación de carga normal.
SceneManager.GetEntryPoint devuelve el nombre solicitado antes de Start en el destino, o un string vacío al arrancar. Solo entrega el nombre; Lua decide qué jugador colocar y cómo encontrar el marcador.
La presentación Black oculta la UI normal de carga. Funde a negro antes de solicitarla y retira el negro desde Start en el destino. Las escenas se reemplazan secuencialmente. No se mantienen dos escenas residentes ni se ejecutan animaciones Lua durante la carga del disco. Ante un fallo nativo se retira el negro para mostrar los diagnósticos.
Fundidos de pantalla
ScreenFade.ToBlack(seconds) y ScreenFade.FromBlack(seconds) devuelven booleanos. La duración predeterminada es 0.2 s; se aceptan valores finitos entre 0 y 30. Cero aplica el cambio inmediatamente. Una duración inválida conserva el fundido actual. Una nueva solicitud empieza desde la opacidad actual. ScreenFade.IsPlaying indica si el fundido sigue avanzando.
Los fundidos usan tiempo sin escalar y sobreviven al reemplazo de escena. PS1 usa mezcla sustractiva de GPU durante el fundido y negro opaco al terminar; Play Mode usa una capa superpuesta. Cubre la UI del juego y deja visibles los diagnósticos de error.
UI modal con control
UI.SetSubmitButton(name) acepta un botón o acción y devuelve booleano. Una asignación desconocida se rechaza. Sin configurar, el comportamiento anterior acepta Cross o Circle. Last Exit asigna Confirm a Cross y procesa Circle para cancelar.
Canvas.SetModal(id) restringe navegación y confirmación nativas a un canvas habilitado; -1 libera la restricción. IDs inválidos o canvases deshabilitados devuelven false. No oculta otros canvases. UI.SetInputEnabled(false) bloquea input nativo de UI, no su dibujo. Ninguna función bloquea llamadas Input propias ni scripts del jugador; controla esas acciones desde Lua.
UI.SetSelectionColor(r, g, b) acepta enteros 0-255 para el relleno seleccionado. Conserva los bordes nativos de foco. Estas opciones se reinician al activar una escena; configúralas en Start. Usa Selectable.Select tras habilitar un panel. Los botones deshabilitados se omiten incluso si un enlace explícito los referencia.
Receta de puerta reutilizable
Mantén una raíz del mundo y una puerta de transición aislada y deshabilitada. Bloquea las acciones del jugador, funde a negro, oculta el mundo, muestra la puerta, coloca la cámara y reproduce una Animation normal. Usa tiempo sin escalar en Update para mover la cámara y activar sonidos. Funde a negro y solicita la siguiente escena una sola vez. El destino restaura el control y retira el negro.
La duración de la transición y las claves de animación deben coincidir. Si se rechaza la solicitud, restaura el mundo y la cámara anteriores. Mantén colliders en raíces lógicas de interacción y bisagras visuales en hijos. Rooms/Portals controlan visibilidad y no sustituyen esta secuencia de carga.