Usamos los siguientes sistemas para apoyar tanto los sistemas de juego básicos como cualquier objetivo de los requisitos principales de diseño.
UsarAdministrador
UseManager proporcionó una API simple para aplicar un objeto agarrado a algo, como un conjunto de ropa doblada en un maniquí. La función principal para esta API es UseManager.AddUse (etiquetas, objetos de dest
Podríamos eliminar el "usar" con UseManager.RemoveUse, que generalmente era útil cuando se terminaba una misión o un artículo específico se "utilizaba". Además, podríamos agregar o eliminar objetivos con AddUseTargets y RemoveUseTargets .
Destacados
Cu
Este LocalScript utiliza una nueva característica de motor Highlight que dibuja un contorno de un obj
HighlightItemsFunc se usa para comunicarse con otros sistemas client. Por ejemplo, EventManager usa con un comando Activar para habilitar o deshabilitar un
Lore y ThoughtBubbles
Lore and ThoughtBubbles are 2 similar systems. Lore uses a ScreenGui as an on-screen UI container with a child
La información se implementa en el LoreManger LocalScript . Cuando se hace clic o toca, se activa un raycast utilizando una función de ayudante utils.RaycastAlongPointingDir
Nota que usamos Camera.ViewportPointToRay o Camera.ScreenPointToRay para construir el rayo, dependiendo de si fue llamado desde un no toque o toque. Las coordenadas están en sistemas de coordenadas algo diferentes. Para el ratón, lo obtenemos de
Las burbujas de pensamiento son generalmente similares, utilizando un raycast para ver si un malla o sus padres tienen una etiqueta burbuja de pensamiento . También usa el atributo ThoughtText para texto, y una burbuja de pensamiento para apuntar a un objeto de posicionamiento de la interfaz de usuario en el mundo. Las burbujas de pensamiento que usan el mismo posicional de objeto pero tienen diferentes textos tienen diferentes cooldowns.
Cajas Especiales
La lore tiene algunos casos especiales, uno de los cuales es el sellado corrupto. Cu LoreManager también maneja un caso especial con mostrar una pequeña escena corta cuando se hace clic en puertas desactivadas que están bloqueadas hasta que el jugador recoge el sello de la habitación.
En el marcador
Queremos mostrar diferentes iconos en el centro de la pantalla cuando el jugador mira ciertos elementos de interés. El script del cliente OnItemindicator hace un raycast a lo largo de la cámara Class.CFrame.LookVector y analiza los resultados. Según los resultados, establece una imagen en el OnItemIndicator2 ScreenGui .
Cuando no se hacen clics en ningún artículo de interés, el icono predeterminado es un pequeño punto. Podríamos establecer cualquier icono agregando un atributo OnItemIndicator a una mallaespecífica, usando los nombres de onItemIndicatorImages , como Hand, Eye o DoorCurrentlyLocked. El atributo solo se necesita en casos raros, y la
Escriba algunos en un orden de prioridad. Después de que el OnItemIndicator invalidar/reemplazarpor la utils.CanGrabModel(model) o utils.GetTaggedObjectUpHierarchy("Drawer2", model) , comprobamos si es agarrable o un cajón para el icono de la "man
highlightItemsFunc:Invoke({"GetType", curInst})
Las etiquetas Lore y ThoughtBubble se verifican más tarde al verificar las etiquetas. Para las puertas, tenemos dos iconos diferentes: DoorCurrentlyClosed y DoorAlwaysLocked . 1> DoorManager1> establece un atributo de verd
Administrador de puertas
El Administrador de puertasLocalScript usa una etiqueta de puerta y 2>Class.CollectionService2> para administrar la apertura y cierre de puertas. La puerta tiene gatillos frontales y traseros que conectamos con toques y
Cada puerta tiene un sistema de estado simple, DoorState (Cerrado, Abierto, Abierto, Cerrado), con tweens usados para las transiciones. Podemos habilitar o deshabilitar la capacidad de una puerta para abrir o cerrar desde sistemas externos al llamar DoorManager.EnableDoor, que establece un atributo DoorEnabled.
Animador maestro
El Animador de maestrosLocalScript muestra imágenes animadas (atlas de textura
Un objeto con un animado SurfaceGui tendría un Animador ModuleScript
Animaciones de espacio local
Las Animaciones de espacio localLocalScript usa una etiqueta de animación de espacio local para rotar la mayoría de los objetos con una velocidad de rotación y retraso especificados al
Administrador de headlights
El HeadlampManagerLocalScript maneja cuando los usuarios seleccionan el on-screen ImageButton para alternar el foco en la parte superior
Administrador del asiento
No queremos que los jugadores se sienten automáticamente cuando se acercan a un objeto en el que pueden sentarse. En cambio, queremos que los
Gestor de cajas
El script DrawerManager usa una etiqueta Drawer2 y CollectionService para manejar el clic en los cajones para abrirlos o cerrarlos, y reproducir cualquier sonido, audiocorrespondiente. La acción de apertura y cierre se realiza al establecer la posición de objetivo para un 1> Class.PrismaticConstraint1> .
Volúmenes de matar
En algunas áreas de la zona de juego principal, como los rayos eléctricos y el agua cerca del comienzo de la carretera que conduce a la casa, un jugador puede tener su Humanoid.Health configurado como 0 cuando ingresa un volumen con la etiqueta
PlayerMissionRespawn
El script PlayerMissionRespawn usa una etiqueta RespawnVolume y CollectionService para tratar con volúmenes que hacen que los jugadores reaparezcan cuando se tocan. Colocamos estos volúmenes debajo de habitaciones corruptas, ya que muchas
Cuando se procesa GameEvents.PlayerRespawn , el script puede usar RespawnPositions , si la configuración de la misión lo proporciona. Si no, usa TeleportPositions</
Sistemas de Ayudantes Pequeños
Administrador del piano
El script PianoManager usa una etiqueta de Piano y CollectionService para agregar 1> Class.ClickDetector|ClickDetectors1> y reproducir uno de los sonidos del piano cuando se hace clic en el teclado.
Soporte de Ritual
El foyer donde los jugadores colocan sellos tiene un complicado traje que cambia con cada sello colocado en su ubicación definida. Por ejemplo, dependiendo del número de sellos colocados, se activan/desactivan luces y rayos, se cambia la transparencia de ciertos objetos, etc. El RitualSupport <
Administrador de restaurables
Algunos objetos agarrables son importantes para el juego, como los sellos, y no queríamos que se perdieran si un jugador las soltaba en alguna parte. Si un objeto tiene una etiqueta de Restauración, el script de RestauradorManager recuerda su transformación
Portales
En algunas misiones, teletransportamos a los jugadores a una distancia corta dentro de una misión, como respawning jugadores que caen de una plataforma giratoria. Para simplificar la configuración de este tipo de teletransportación, que se llama "Portals" en el script, una función de ayudante ProcessPortal en DemoUtilities
P1.Touched:Connect(function(otherPart) utils.ProcessPortal(otherPart, P2) end)
ProcessPortal maneja la verificación de que otra parte es un humano, teletransportando al jugador a través de un CFrame cambio de coordenada de cambio, y invocando una pequeña escena para ocultar la transición usando un evento Teleport_Jump en 0> 1> EventManager 1> 0>.
Guías de configuración
Tenemos varios scripts de configuración, definición de datos y común funcionalidad: DemoConfig . Definiciones de misiones. Numeraciones para estados del juego, eventos para comunicaciones del cliente-servidor. Configuración de demostración global . Desarrollamos en un lugar, pero lanzamos (y prueba de jugabilidad/ prueba de juego) en otros. El script comprueba el ID del lugar y habilita/deshabilita varias funciones de cheats y funciones de diagnóstico. DemoUtilities . Varias utilidades. Gestionar con transformaciones. Configurar visibilidad, anclar o otras propiedades. Verificar por un punto en una caja delimitadora. Encontrar objetos en la jerarquía por nombre "dotted" . Administrar TempStorage (que se puede usar para mover temporalmente los modelos "en algún lugar lejos" y traer de vuelta más tarde). Haga clic en ayudantes de detección. AudioUtilities . Un par de funciones para reproducir sonidos aleatorios pesados de un establecer. GrabUtil . Funciones de ayudante para agarrar.