Last Exit: ejemplo en primera persona
Last Exit es el proyecto de terror en primera persona incluido en el engine. Un recorrido corto muestra interacciones, diálogo, almacenamiento, inventario y cambios de escena animados. Las reglas son Lua; modelos, UI, audio y animaciones son assets normales.
Crea una copia editable desde Project Hub. La plantilla instalada es de solo lectura. Abre Scenes/main_menu.json y selecciona PLAY en Play Mode.
Flujo del proyecto
| Escena | Experiencia |
|---|---|
| main_menu.json | Imagen de portada, Play, Controls |
| shelter.json | Cuarto de 3 x 3 m y primera puerta |
| corridor.json | Pasillo de 2 m de ancho y puerta de la bodega |
| warehouse.json | Hombre del camión, entrada bloqueada, oficina, baúl y llave |
| ending.json | Pantalla de escape, reiniciar y menú |
Apunta a objetos cercanos para ver la ayuda de interacción. El hombre del camión se niega a salir. La entrada queda atascada; encuentra la llave junto a la puerta de la oficina y úsala en la salida al patio. La tela y la batería del baúl son ejemplos opcionales de inventario.
Controles
| Input | Acción |
|---|---|
| Stick izquierdo / D-Pad | Caminar / navegar por la UI |
| Stick derecho | Mirar |
| L1 / R1 | Girar con control digital |
| L2 / R2 | Mirar abajo / arriba |
| Cross | Interactuar, confirmar, avanzar diálogo, transferir objeto |
| Circle | Cancelar / cerrar |
| Square | Correr |
| Triangle | Inventario |
| Start | Pausar / continuar |
Las acciones son consistentes en la UI. El movimiento y la cámara se detienen
durante paneles y transiciones. La fuente bitmap incluye símbolos del control
en las posiciones ASCII {, |, }, ~; no requiere compatibilidad con Unicode.
Lua y servicios nativos
Los seis behaviours de Assets/Scripts/LastExit son player.lua, interactable.lua, flow.lua, inventory.lua, menu.lua y dialogue.lua. Los archivos README y LEARNING_PATH.md del proyecto documentan propiedades, callbacks, slots y pivotes.
Physics.Raycast incluye paredes y triggers; el impacto más cercano debe tener el tag Interactable. Esto impide usar una llave o puerta a través de una pared. Los canvases modales restringen el foco de botones nativos, mientras Lua bloquea las acciones del mundo por separado.
Session almacena hasta 32 entradas, con claves de 31 bytes y valores de 63 bytes. El inventario sobrevive a los cambios de escena, pero no se guarda en Memory Card. New Game reinicia el espacio de claves del demo. Un baúl de seis slots y una mochila de seis slots muestran capacidad, transferencia bidireccional, reversión ante errores y recogida única.
SceneManager.LoadScene acepta las opciones EntryPoint y Presentation. La presentación Black oculta la UI de carga; Start en el destino encuentra el marcador solicitado y retira el negro. ScreenFade usa tiempo sin escalar y sobrevive al cambio de escena. La puerta, la manija y la cámara se animan antes de cargar la siguiente escena. La puerta de la oficina y el baúl se animan físicamente dentro de la bodega. Rooms/Portals controlan visibilidad; no cargan escenas.
Consulta las firmas en Referencia de Lua y los contratos reutilizables en Sesión y transiciones.
Sustituir assets
Authoring/LastExit.blend contiene las habitaciones armadas y los modelos editables de Blender. Assets/Models/LastExit contiene sus exportaciones OBJ: recintos, camión, cajas, puertas, llave, muebles, baúl hueco y luces. Cuatro atlas indexados separan arquitectura, superficies de inspección, props y detalles industriales secundarios. Los UV y la densidad de texeles se crean en Blender; usa la importación normal de modelos y texturas al sustituirlos. Consulta Importación de modelos e Importación de texturas.
Consulta Authoring/README.md para exportación, pivotes y scripts de reproducción. Conserva tamaños de collider, destinos de animación, bisagras y nombres de scripts al sustituir arte. Conserva los metadatos GUID o actualiza todas sus referencias. Las puertas estáticas agrupan la decoración en su objeto de interacción; las piezas animadas permanecen separadas.
El demo incluye una portada, imágenes de UI y texturas originales. El alfabeto bitmap es procedural. Los efectos, las señales de UI, los golpes del camión y la música proceden de librerías seleccionadas por el usuario, registradas en Authoring/audio_sources.json. Conservan las licencias de sus colecciones. No se distribuyen assets de Resident Evil. El antiguo generador de blockout no debe sobrescribir este arte.
La plantilla contiene cinco escenas de Last Exit y sus dependencias, además de las fuentes de Blender. Los modelos usan metros: puertas de 1,10 x 2,20 m, camión de 5,22 m de largo y llave de 11,74 cm de alto. Usa Advanced Feature Lab para Timeline, animación esquelética y portales.
Audio
Cuatro variantes de pasos sobre concreto siguen el desplazamiento real; girar o empujar contra una pared no produce pasos. player.lua controla la cadencia al caminar y correr independientemente del tono del audio. Las puertas y el baúl tienen sonidos separados de apertura y cierre; los chirridos solo suenan durante la apertura. La interacción con el camión reproduce tres golpes espaciados.
La navegación del inventario, la selección de objetos, la navegación de otros menús y la apertura de un diálogo usan señales distintas. Cambiar de página no repite el sonido de apertura del diálogo. Son reglas de eventos en Lua, no sonidos automáticos de todos los elementos Button o Canvas del engine.
La bodega usa 15 efectos residentes, aproximadamente 80 KiB de muestras en SPU, con Audio Sources en objetos existentes. Los niveles y el menú/final usan bucles estéreo distintos mediante CD-XA. Las pistas largas usan Music, nunca AudioSources residentes. AUDIO_GUIDE.md y UI_ASSET_GUIDE.md explican nombres, importación y eventos. Consulta AudioSource para distinguir reproducción detenible de sonidos independientes de una sola reproducción.
UI y diálogos
El baúl muestra seis filas de almacenamiento junto a seis slots de la mochila. El inventario personal usa la izquierda para inspeccionar la imagen del objeto seleccionado. Esa vista empieza deshabilitada y permanece oculta en el baúl; conserva esta regla al agregar objetos. Las descripciones y controles tienen fondos de contraste propios. La mira es una pequeña imagen transparente.
El diálogo tiene fases de entrada, escritura, cambio de página y salida. Cross primero revela toda la línea; una pulsación posterior avanza o confirma. En Controls, Square alterna entre texto progresivo e instantáneo. El diálogo usa tiempo sin escalar para continuar mientras el juego está pausado. Consulta UI y Canvas y Animaciones independientes para reutilizar estas herramientas.
Las pantallas normales de carga reutilizan la portada y muestran el progreso de la lectura de disco actual. Las transiciones de puerta usan deliberadamente carga en negro después de la animación. Configura tu presentación con Administración de escenas.
Las fuentes editables usan snake_case descriptivo en inglés, por ejemplo ui_inventory_navigate.wav y warehouse_key_icon.png. Los nombres describen su uso; los archivos con GUID en Library son cachés generadas y no deben renombrarse.
Mantener actualizada una copia editable
Actualizar el engine actualiza su plantilla, no un demo editable existente. Abre el diálogo de copia del ejemplo y selecciona la misma carpeta padre. Si la copia de Last Exit tiene una versión anterior reconocida, Update Copy and Open la sustituye por la plantilla actual y conserva la carpeta anterior completa como respaldo junto a ella. Es una sustitución, no una fusión de cambios locales. Usa otra carpeta padre para comparar una copia nueva con tu proyecto modificado. Guarda y cierra la copia anterior antes de actualizar y vuelve a compilar su disco.
Validación
Compila y revisa los informes posteriores al bake en Build/ps1/logs después de sustituir arte. El proyecto reserva 104 KiB para Lua y usa una UI de 320 x 240. La aceptación de presupuestos estáticos de PS1 no demuestra el rendimiento en emulador ni la compatibilidad en consola física. Prueba todo el recorrido, cancelación de UI, transferencias, ambos diálogos del camión, llave, pausa y reinicio con control digital y DualShock.