Użyliśmy następujący systemy, aby wspierać zarówno podstawowe systemy gry, jak i wszystkie cele z głównych wymagań projektowych.
UżyjMenedżera
Użyj Managera zapewnił prosty interfejs API, aby zastosować chwytany obiekt na czymś, jak kawałek odzieży z kapturem na manekinie. Główną funkcją dla tego interfejsu jest
Możemy usunąć "użyj" za pomocą UseManager.RemoveUse, co zwykle było pomocne, gdy misja została zakończona lub określony przedmiot został "użyty". Ponadto możemy dodać lub usunąć cele z AddUseTargets i RemoveUseTargets .
Podkreślenia
Gdy
Ten LocalScript używa nowej funkcji silnika Highlight, która rysuje kontur obiektu i/
HighlightItemsFunc używany jest do komunikacji z innymi systemami klienta. Na przykład, EventManager używa go z komendą Włącz
Wiedza i ThoughtBubbles
Lore and ThoughtBubbles are 2 similar systems. Lore uses a ScreenGui as an on-screen UI container with a child
Wiedza jest implementowana w LoreManger LocalScript . Gdy jest kliknięta lub dotykana, wysyłuje promieniową cast używając funkcji pomocniczej utils.
Uwaga, że używamy Camera.ViewportPointToRay lub Camera.ScreenPointToRay , aby zbudować promień, w zależności od tego, czy został on wezwany z nie dotykowej lub dotykowej. Koordynaty są w nieco różnych system
Bąbelki myśli są ogólnie podobne, używając kastu promienia, aby sprawdzić, czy sieć lub jej rodzice mają tag Bąbelka myśli. Używa również atrybutu ThoughtText dla tekstu i tagu Bąbelka myśli do wskazania na obiekt placeholder, używany do pozycjonowania interfejsu w świecie. Bąbelki myśli, które używają tego same
Specjalne przypadki
Lore ma kilka specjalnych przypadków, jednym z nich jest uszkodzony LoreManager również zarządza specjalnym przypadkiem, pokazując małą scenę, gdy klikniesz wyłączone drzwi, które są zablokowane do momentu podjęcia przez gracza pieczątki pokoju.
Na ItemIndicator
Chcemy pokazać różne ikony w centrum ekranu, gdy gracz patrzy na niektóre przedmioty zainteresowania. Skrypt kliencki na ekranie w OnItemindicator wykonuje rajast promieniowania wokół kamery Class.CFrame.LookVector i analizuje wyniki. Na podstawie wyników ustawia obraz w OnItemIndicator2 ScreenGui.
Gdy nie trafiają żadne interesujące przedmioty, domyślnym ikona jest mały kropik. Możemy ustawić dowolną ikona poprzez dodanie do określonego siatki 属性 OnItemIndicator , takich jak ręka, oko lub DoorCurrentlyLocked. Attrybut jest tylko w rzadkich przypadkach, a większość czasu
Typuje sprawdzenia w pewnym porządku priorytetu. Po przekazaniu OnItemIndicator przez utils.CanGrabModel(model) lub utils.GetTaggedObjectUpHierarchy("Drawer2", model) sprawdza się, czy jest chwytalny lub szuflada dla
highlightItemsFunc:Invoke({"GetType", curInst})
Tagi Lore i ThoughtBubble są sprawdzane później poprzez sprawdzanie tagów. Dla drzwi mamy 2 różne ikony: DoorCurrentlyClosed i DoorAlwaysLocked. 1> DoorManager1> ustawia prawdziwy lub fał
Zarządzacz drzwiami
DoorManager używa etykiety LocalScript i Class.LocalScript do zarządzania otwarciem i zamknięciem drzwi. Drzwi mają trygry z przodu i z tyłu, do których łączymy się za pomocą dotyku
Każde drzwi ma prosty system stanu, DoorState (Zamknięty, otwarte, otwarte, zamknięte), z użyciem tłumienień dla przejść. Możemy włączyć lub wyłączyć zdolność otwierania lub zamykania drzwi z zewnętrznymi systemami, poprzez wezwanie DoorManager.EnableDoor, co ustawia atrybut DoorEnabled
MistrzAnimator
Animator mistrzowski Class.LocalScript a animuje animacje (tęczę atlasu), które uży
Obiekt z animowanym SurfaceGui miałby Animator ModuleScript, z główn
Lokalne animacje animacji
The Lokalne Animacje Przestrzeni Roboczej LocalScript używa tagu Lokalna Przestrzeń Przestrzeni Roboczej do obrotu większości "
Zarządzacz lampami głównymi
HeadlampManagerLocalScript ułatwia użytkownikom selekcję ImageButton na ekranie, aby włączyć świat
Zarządzacz Siedzeniami
Nie chcemy, aby gracze automatycznie siedzieli, gdy blisko obiektu, na którym mogą teleportować się
Menedżer Drawerów
Skrypt DrawerManager używa tagu Drawer2 i CollectionService, aby zarządzać klikaniem na szuflady, aby je otworzyć lub zamknąć, i odtwarzać odpowiednią ilość dźwięk. Akcja otwierania i zamykania jest wykonana ustawiając 1>Pozycję celu1> dla 4>Class.PrismaticConstraint4>.
Zabijgromy
W kilku obszarach głównej gry w obszarze gameplay, takich jak elektryczne migoczenia i woda w pobliżu początku drogi prowadzącej do domu, gracz może mieć swoje Humanoid.Health ustawione na 0
PlayerMissionRespawn
Skrypt PlayerMissionRespawn używa tagu RespawnVolume i CollectionService, aby poradzić sobie z wolumenami, które sprawiają, że gracze respawnują po dotknięciu. Umieściliśmy te wolumeny pod sk
Podczas przetwarzania GameEvents.PlayerRespawn , skrypt może użyć RespawnPositions, jeśli konfiguracja misji to umożliwia. Jeśli nie, to używa
Małe systemy pomocnicze
Menedżer Klawiatury
Skrypt PianoManager używa tagu Piano i CollectionService, aby dodać 1> Class.ClickDetector|KlikDetectors1> i odtwarzyć jeden z dźwięków fortepianu przy kliknięciu klawiatury.
Ritualne Wsparcie
Foyer, w którym gracze stawiają pieczątki, ma złożoną konstrukcję, która podlega zmianom, gdy każda pieczątka jest umieszczona w jej zdefiniowanej lokalizacji. Na przykład, w zależności od liczby umieszczonych piecząatek
Zarządzacz Zgubionych
Niektóre chwytne obiekty są ważne dla rozgrywka, takie jak uszczelki, i nie chcieliśmy, aby zostały one tracone, jeśli gracz je upuści gdzieś. Jeśli obiekt ma tag RestorableManager, Restorable
Portale
W kilku misjach teleportujemy graczy niewielką odległość w ramach misji, taką jak respawning graczy, którzy spadają z kręcącej się platforma. Aby uproszczyć ustawienie tego typu teleportacji, które nazyamy "Portals" w skrypcie, funkcję pomocniczą Process
P1.Touched:Connect(function(otherPart) utils.ProcessPortal(otherPart, P2) end)
ProcessPortal ręczy czekającej, czy inna część jest człowiekiem, teleportującego gracza poprzez zmianę koordynatową CFrame i wzywania małego cutscene'u, aby ukryć przejście używając małego wydarzenia Teleport_Jump w 0>EventManager0> .
Skrypty Konfiguracyjne
Mamy kilka konfiguracji, definicji danych i wspólnych skryptów funkcjonalności: DemoConfig . Definicje misji. Numeracje dla stanów gry, wydarzenia dla komunikacji klienta-serwera. DemoGlobalSettings . Rozwijamy się w jednym miejsce, ale uwalniajemy (i testujemy) w innych. Skrypt sprawdza placeID i włącza/włącza różne cheaty i funkcje debugowania. DemoUtilities . Różne funkcje utilitarnych. Poradzenie się z transformacjami. Ustawianie widoczności, przyczepianie lub inne właściwości. Czekanie na punkt w kutce. Finding objects in hierarchy by "dotted" name. Managing TempStorage (that can be used to temporarily move models "somewhere far" and bring back later). Kliknięcia pomocników. Grabbing support. AudioUtilities . Kilka funkcji do odtwarzania dźwiękowych losowych dźwięków z ustawiać. GrabUtil . Funkcje pomocnicze do grabienia.