Kamery mają bardzo ważne znaczenie dla ogólnego wyglądu i wrażeń z rozgrywki. Kamery z perspektywy trzeciej osoby mogą dać graczom większe poczucie przestrzeni, podczas gdy kamery z perspektywy pierwszej osoby dają graczom bliższy wgląd w świat gry. Przełączanie między kamerami podczas rozgrywki może wywoływać różne odczucia, a przechodzenie między wieloma kamerami może znacznie urozmaicić rozgrywkę. Możesz na przykład stworzyć zabawną platformówkę, wykorzystując stałą kamerę do stworzenia sekcji z przewijaniem bocznym.
W UEFN możesz użyć Verse do obsługi zmian kamery. Używając urządzeń do nasłuchiwania zdarzeń, możesz dodać do gracza kamerę, której widok zmieni się po wyzwoleniu zdarzenia. W tym przykładzie dodamy do gracza urządzenie kamery okrążającej na końcu filmiku. Ustawienia kamery okrążającej możesz zmodyfikować tak, by symulowała widok z perspektywy pierwszej osoby, a dodając kamerę na końcu filmiku możesz stworzyć płynne przejście z widoku z perspektywy trzeciej do pierwszej osoby. Dla urozmaicenia rozgrywki w tym przykładzie gracz chwyta broń i wymachuje nią w kierunku drzwi, aby uruchomić filmik. Przykład ten można dostosować do własnych potrzeb, np. gracz może użyć klucza, aby naprawić uszkodzone drzwi, lub młotka, aby rozbić głaz i odkryć sekretny obszar. Koncepcje te można również zastosować w szerszym zakresie, aby stworzyć atrakcyjne momenty rozgrywki, takie jak szerokie ujęcie po wejściu do nowej strefy, przełączenie na widok z góry, gdy gracz musi rozwiązać zagadkę, lub widok pierwszoosobowy w upiornym horrorze.
Poniższy samouczek zawiera informacje na temat tworzenia urządzenia Verse, które przenosi gracza z perspektywy trzecioosobowej do pierwszoosobowej za pomocą sekwencji filmowej po otwarciu drzwi.
W tym przykładzie wykorzystano następujące funkcje języka:
-
Klasa: Ten przykład tworzy klasę Verse, która aktywuje filmik, gdy gracz otworzy drzwi.
-
Opcja: Zdarzenia z możliwością subskrybowania można przechowywać w zmiennych opcji, a następnie anulować subskrypcje tych zdarzeń.
W tym przykładzie wykorzystano następujące API:
- Zdarzenia, które można subskrybować: Będziesz subskrybować zdarzenia, aby wiedzieć, kiedy gracz wejdzie do przestrzeni obok drzwi, i przyznawać graczom przedmioty, gdy wejdą w interakcję z przyciskiem.
Ustawianie poziomu
W tym przykładzie wykorzystano następujące urządzenia:
-
1 x urządzenie przycisku: Gdy gracz użyje przycisku, otrzyma miecz z przyznawacza przedmiotów.
-
1 x urządzenie przyznawacza przedmiotów: Przyznawacz przedmiotów daje graczowi miecz potrzebny do przejścia przez drzwi.
-
1 x urządzenie przycisku warunkowego: Wymagana broń jest ustawiona jako przedmiot kluczowy przycisku warunkowego, a więc gracz nie może przejść przez drzwi, jeśli nie posiada wymaganego miecza.
-
1 x urządzenie aktywatora sterowania: Gdy gracz atakuje, urządzenie otwiera drzwi, nasłuchując akcji wejściowej ognia. Dzieje się tak tylko wtedy, gdy gracz znajduje się wewnątrz urządzenia przestrzeni, jeśli gracz ma miecz, a drzwi nie są jeszcze otwarte.
-
1 x urządzenie przestrzeni: Ponieważ nie chodzi o to, aby jakikolwiek atak mieczem otworzył drzwi, urządzenie przestrzeni upewnia się, że gracz znajduje się tuż obok drzwi, aby je otworzyć.
-
1 x urządzenie sekwencji filmowej: Aby stworzyć płynne przejście z perspektywy trzecioosobowej do pierwszoosobowej, zostanie odtworzony filmik pokazujący otwieranie drzwi, a następnie kamera zostanie przesunięta tak, aby zrównać się z punktem widzenia gracza w perspektywie pierwszoosobowej.
-
1 x urządzenie kamery okrążającej: Aby utworzyć widok z perspektywy pierwszej osoby dla gracza, użyjesz kamery okrążającej umieszczonej wewnątrz klatki piersiowej postaci, aby naśladować widok z perspektywy pierwszej osoby. Zmiana widoku następuje dopiero po tym, jak gracz otworzy drzwi.
-
1 x urządzenie kłódki: Dzięki temu drzwi pozostają zablokowane, aby uniemożliwić graczowi ich otwarcie przed zdobyciem wymaganej broni.
-
1 x urządzenie znacznika na mapie: Wyświetla lokalizację drzwi na minimapie, gdy gracz podnosi broń.
Postępuj zgodnie z poniższą instrukcją, aby skonfigurować poziom:
Przyznawacz przedmiotów i przycisk
Aby przyznać graczowi broń potrzebną do otwarcia drzwi, użyj urządzenia przyznawacza przedmiotów i przycisku. Gdy gracz wejdzie w interakcję z przyciskiem, przyznawacz przedmiotów przyzna mu broń. Postępuj zgodnie z poniższą instrukcją, aby dodać te elementy:
-
Dodaj jedno urządzenie przyznawacza przedmiotów do poziomu.
-
Wybierz przyznawacz przedmiotów w Outlinerze. W panelu Szczegóły w sekcji Opcje użytkownika ustaw następujące wartości:
Opcja Wartość Wyjaśnienie Definicja przedmiotu Miecz To broń, za pomocą której gracz otwiera drzwi. Wyposaż przyznany przedmiot True W tym przykładzie gracz podnosi broń i natychmiast się w nią wyposaża. Kliknij obraz, aby go powiększyć.
-
Dodaj jedno urządzenie przycisku do poziomu.
-
Wybierz przycisk w Outlinerze. W panelu Szczegóły w sekcji Opcje użytkownika ustaw następujące wartości:
Opcja Wartość Wyjaśnienie Tekst interakcji "Podnieś" Jest to tekst, który nakłania gracza do interakcji z przyciskiem. Liczba aktywacji 1 W tym przykładzie gracz może podnieść broń tylko raz. Kliknij obraz, aby go powiększyć.
Aktywator sterowania
Aby wiedzieć, kiedy gracz wykona zamach bronią, można użyć aktywatora sterowania, który nasłuchuje określonego działania. Gdy gracz wykona zamach bronią, aktywuje się urządzenie aktywatora sterowania. Postępuj zgodnie z poniższą instrukcją, aby dodać aktywator sterowania:
-
Dodaj jedno urządzenie aktywatora sterowania do poziomu.
-
Wybierz urządzenie aktywatora sterowania w Outlinerze. W panelu Szczegóły w sekcji Opcje użytkownika ustaw następujące wartości:
Opcja Wartość Wyjaśnienie Typ sterowania Akcja standardowa Ogień jest akcją standardową, która jest tym, czego aktywator sterowania musi nasłuchiwać, aby wiedzieć, kiedy gracz wykona zamach bronią. Sterowanie standardowe Ogień Ogień jest akcją, której aktywator sterowania musi nasłuchiwać, aby wiedzieć, kiedy gracz wykona zamach bronią. Pokaż w interfejsie False Nie musisz pokazywać tej akcji w interfejsie. Kliknij obraz, aby go powiększyć.
Przestrzeń
Aby upewnić się, że gracz musi znajdować się obok drzwi, aby je otworzyć, możesz użyć urządzenia przestrzeni w pobliżu drzwi, aby sprawdzić, czy gracz jest wewnątrz. Postępuj zgodnie z poniższą instrukcją, aby dodać urządzenie przestrzeni.
-
Dodaj drzwi gdzieś w swoim poziomie. Są to drzwi, które gracz ma otworzyć za pomocą broni.
-
Dodaj jedno urządzenie przestrzeni do poziomu. To urządzenie musi zachodzić na niewielki obszar przed drzwiami lub obszar, który gracz ma zaatakować.
-
Zmień rozmiar urządzenia przestrzeni, modyfikując jego przekształcenie, aby dopasować obszar, w którym gracz ma się znajdować podczas ataku. Aktywator sterowania będzie nasłuchiwać zdarzenia ognia tylko wtedy, gdy gracz znajduje się w tej przestrzeni, więc upewnij się, że odpowiada to potrzebom rozgrywki.
Kliknij obraz, aby go powiększyć.
Kłódka
Aby upewnić się, że gracz nie może otworzyć drzwi przed zdobyciem broni, można zablokować drzwi za pomocą urządzenia kłódki. Postępuj zgodnie z poniższą instrukcją, aby dodać urządzenie kłódki:
-
Dodaj urządzenie kłódki przymocowane do drzwi.
-
Wybierz kłódkę w Outlinerze. W panelu Szczegóły w sekcji Opcje użytkownika ustaw opcję Widoczność w grze na wartość false.
Kliknij obraz, aby go powiększyć.
Znacznik na mapie
Gdy miejsce, do którego gracz musi dotrzeć, znajduje się daleko od miejsca, w którym zdobywa broń, warto pokazać graczom, gdzie mają się udać, za pomocą znacznika na mapie. Wyświetla on obraz na mapie i minimapie oraz może aktywować impuls celu, który kieruje graczy bezpośrednio do drzwi. Postępuj zgodnie z poniższą instrukcją, aby dodać znacznik na mapie:
-
Do poziomu dodaj urządzenie znacznika na mapie, ukryte pod drzwiami.
-
Wybierz znacznik na mapie w Outlinerze. W panelu Szczegóły w sekcji Opcje użytkownika:
Opcja Wartość Wyjaśnienie Włączono na początku gry false Znacznik na mapie jest włączany dopiero po podniesieniu broni przez gracza. Mała ikona Wybierz ikonę Wybierz ikonę, która ma być wyświetlana na minimapie. Duża ikona Wybierz ikonę Wybierz ikonę, która ma być wyświetlana na mapie. Kliknij obraz, aby go powiększyć.
Warunkowy przycisk przedmiotu
Aby upewnić się, że gracz używa właściwej broni do otwarcia drzwi, możesz użyć warunkowego przycisku przedmiotu, aby sprawdzić broń, którą trzyma podczas wykonywania zamachu. Postępuj zgodnie z poniższą instrukcją, aby dodać warunkowy przycisk przedmiotu:
-
Dodaj jedno urządzenie warunkowego przycisku przedmiotu do poziomu.
-
Wybierz warunkowy przycisk przedmiotu w Outlinerze. W panelu Szczegóły w sekcji Opcje użytkownika ustaw następujące wartości:
Opcja Wartość Wyjaśnienie Zużywaj przedmioty kluczowe False Nie chcemy, aby broń gracza została zużyta po otwarciu drzwi. Definicja przedmiotu kluczowego 1 Broń To broń, której gracz potrzebuje do otwarcia drzwi. Kliknij obraz, aby go powiększyć.
Kamera okrążająca
Aby zasymulować widok z perspektywy pierwszej osoby, można użyć kamery okrążającej do zmiany perspektywy gracza. Postępuj zgodnie z poniższą instrukcją, aby dodać kamerę okrążającą:
-
Dodaj jedno urządzenie kamery okrążającej do poziomu.
-
Wybierz przycisk kamery okrążającej w Outlinerze. W panelu Szczegóły w sekcji Kamera ustaw następujące wartości:
Opcja Wartość Wyjaśnienie Odległość 0.0 cm Parametry wymagane dla widoku z perspektywy pierwszej osoby Przesunięcie X 27.0 cm Parametry wymagane dla widoku z perspektywy pierwszej osoby Przesunięcie Y 0.0 cm Parametry wymagane dla widoku z perspektywy pierwszej osoby Przesunięcie Z 76.0 cm Parametry wymagane dla widoku z perspektywy pierwszej osoby Szybkość w poziomie 0.0 cm/s Parametry wymagane dla widoku z perspektywy pierwszej osoby -
W panelu Szczegóły w sekcji Przejście ustaw następujące wartości:
Opcja Wartość Wyjaśnienie Czas przejścia do kamery 0.0 s Parametry wymagane dla widoku z perspektywy pierwszej osoby Czas przejścia z kamery 0.1 s Parametry wymagane dla widoku z perspektywy pierwszej osoby Typ przejścia z kamery Wolniej na końcu Parametry wymagane dla widoku z perspektywy pierwszej osoby Kliknij obraz, aby go powiększyć.
Sekwencja filmowa
Aby uruchomić sekwencję filmową podczas otwierania drzwi, potrzebne jest urządzenie sekwencji filmowej, aby ją odtworzyć. Postępuj zgodnie z poniższą instrukcją, aby dodać sekwencję filmową:
-
Dodaj urządzenie sekwencji filmowej do poziomu.
-
W Przeglądarce zawartości utwórz sekwencję filmową, której chcesz użyć w swoim poziomie. Sekwencja filmowa wykorzystuje ustawioną wcześniej kamerę okrążającą i powinna pokazywać otwierające się drzwi podczas przechodzenia kamery z kąta początkowego do widoku pierwszoosobowego. Więcej informacji na temat tworzenia własnych sekwencji filmowych można znaleźć w artykule Tworzenie filmików i przerywników filmowych.
-
Wybierz urządzenie sekwencję filmową w Outlinerze. Następnie w panelu Szczegóły w sekcji Opcje użytkownika przypisz sekwencję do swojej sekwencji filmowej.
Kliknij obraz, aby go powiększyć.
Filmik z otwieraniem drzwi przy użyciu Verse
Aby obsługiwać logikę odtwarzania filmiku i otwierania drzwi, użyjesz urządzenia Verse. Urządzenie nasłuchuje, czy gracz wykonuje zamach bronią wewnątrz urządzenia przestrzeni, a następnie odtwarza sekwencję filmową, otwiera drzwi i przenosi gracza do widoku pierwszoosobowego.
Ustawianie pól
Aby utworzyć urządzenie Verse:
-
Utwórz nowe urządzenie Verse za pomocą eksploratora Verse i nadaj mu nazwę
door_open_cinematic_manager
. -
Nad definicją klasy
door_open_cinematic_manager
dodaj kanał dziennika, aby zapisywać komunikaty charakterystyczne dla tego urządzenia. Następnie do definicji klasy dodaj rejestrator, który będzie używany z kanałem dziennika.door_open_channel := class(log_channel){} # Urządzenie trybu kreatywnego utworzone w Verse, które można umieścić w poziomie door_open_cinematic_manager := class(creative_device): Logger:log = log{Channel := door_open_channel}
-
Dodaj następujące pola do definicji klasy
door_open_cinematic_manager
:-
Edytowalne urządzenie przestrzeni o nazwie
DoorVolume
. Jest to przestrzeń, wewnątrz której musi znajdować się gracz, aby otworzyć drzwi.# Przestrzeń, wewnątrz której musi znajdować się gracz, aby otworzyć drzwi. @editable DoorVolume:volume_device = volume_device{}
-
Edytowalne urządzenie aktywatora sterowania o nazwie
FireTrigger
. Nasłuchuje ono gracza używającego broni wewnątrzDoorVolume
.# Aktywator sterowania, który nasłuchuje gracza machającego bronią # wewnątrz DoorVolume. @editable FireTrigger:input_trigger_device = input_trigger_device{}
-
Edytowalne urządzenie przycisku warunkowego o nazwie
ConditionalButton
. Sprawdza, czy gracz posiada odpowiednią broń, gdy znajduje się wewnątrz urządzenia przestrzeni.# Warunkowy przycisk przedmiotu, który sprawdza, czy gracz posiada odpowiednią broń. @editable ConditionalButton:conditional_button_device = conditional_button_device{}
-
Edytowalne urządzenie kłódki o nazwie
DoorLock
. Powoduje, że drzwi są zablokowane, jeśli gracz nie ma odpowiedniej broni.# Urządzenie kłódki, które zapobiega otwarciu drzwi. @editable Door:lock_device = lock_device{}
-
Edytowalne urządzenie sekwencji filmowej o nazwie
CinematicSequence
. Odtwarza filmik prowadzący do przejścia kamery podczas otwierania drzwi.# Urządzenie sekwencji filmowej, które odtwarza filmik podczas otwierania drzwi. @editable CinematicSequence:cinematic_sequence_device = cinematic_sequence_device{}
-
Edytowalne urządzenie znacznika na mapie o nazwie
ObjectiveMarker
. Pokazuje lokalizację drzwi na minimapie po tym, jak gracz podniesie broń.# Urządzenie znacznika na mapie wskazujące lokalizację drzwi na mapie. @editable ObjectiveMarker:map_indicator_device = map_indicator_device{}
-
Edytowalne urządzenie przyznawacza przedmiotów o nazwie
ItemGranter
. Przyznaje graczowi broń potrzebną do przejścia dalej.# Urządzenie przyznawacza przedmiotów, które przyznaje graczowi potrzebną broń. @editable ItemGranter:item_granter_device = item_granter_device{}
-
Edytowalne urządzenie przycisku o nazwie
ItemGrantButton
. Aktywuje urządzenieItemGranter
, które przyznaje graczowi potrzebną broń.# Przycisk aktywujący przyznawacz ItemGranter. @editable ItemGrantButton:button_device = button_device{}
-
Edytowalne urządzenie kamery okrążającej o nazwie
FPSCamera
. Symuluje widok z perspektywy pierwszej osoby i jest dodawane do gracza po zakończeniu filmiku.# Kamera okrążająca symuluje widok z perspektywy pierwszej osoby. @editable FPSCamera:gameplay_camera_orbit_device = gameplay_camera_orbit_device{}
-
Zmienna
logic
o nazwieIsDoorOpen
. To pole śledzi, czy drzwi są już otwarte, tak aby sekwencja nie była odtwarzana, jeśli są otwarte.# Zmienna, która śledzi, czy drzwi są już otwarte. var IsDoorOpen:logic = false
-
Zmienna
option
cancelable
o nazwieFireSubscription
. Przechowuje subskrypcję doFireTrigger
PressedEvent
. Sekwencja filmowa powinna uruchamiać się tylko wtedy, gdy gracz znajduje się tuż obok drzwi. Ta subskrypcja, którą można anulować, zapewnia wyrejestrowanie (Unregister
) gracza zFireTrigger
, jeśli zbytnio się oddali.# Subskrypcja urządzenia FireTrigger, którą można anulować. var FireSubscription:?cancelable = false
-
Odtwarzanie filmiku
Kiedy drzwi się otwierają, pojawia się filmik, który pokazuje otwarcie drzwi i przejście z perspektywy trzeciej do pierwszej osoby. Postępuj zgodnie z poniższą instrukcją, aby aktywować filmik po otwarciu drzwi przez gracza.
-
Dodaj nową metodę
PlayCinematic()
do definicji klasydoor_open_cinematic_manager
. Dodaj nową metodęPlayCinematic()
do definicji klasydoor_open_cinematic_manager
. Ta funkcja pobiera gracza, który otwiera drzwi. Następnie odtwarza filmik i otwiera drzwi za pomocą urządzenia kłódki.# Odtwarza filmik i odblokowuje drzwi. PlayCinematic(Agent:agent):void=
-
W metodzie
PlayCinematic()
najpierw odtwórz sekwencję filmowąCinematicSequence
, następnie odblokuj i otwórz drzwi przy użyciu kolejnoUnlock()
iOpen()
.# Odtwarza filmik i odblokowuje drzwi. PlayCinematic(Agent:agent)<suspends>:void= Logger.Print("Gracz trzyma przedmiot, odtwarzam filmik...") CinematicSequence.Play() # Odblokuj i otwórz drzwi. Door.Unlock(Agent) Door.Open(Agent) set IsDoorOpen = true
-
Na koniec zmień widok gracza z trzecioosobowego na pierwszoosobowy, dodając do niego kamerę okrążającą za pomocą funkcji
AddTo()
, a następnie wyłącz znacznik celu. Gotowa funkcjaPlayCinematic()
powinna wyglądać następująco:# Odtwarza filmik i odblokowuje drzwi. PlayCinematic(Agent:agent)<suspends>:void= Logger.Print("Gracz trzyma przedmiot, odtwarzam filmik...") CinematicSequence.Play() # Odblokuj i otwórz drzwi. Door.Unlock(Agent) Door.Open(Agent) set IsDoorOpen = true # Dodaj kamerę pierwszoosobową do agenta. Po zakończeniu filmiku # agent będzie w widoku pierwszoosobowym. FPSCamera.AddTo(Agent) Logger.Print("Zmieniono kamerę") # Wyłącz znacznik celu ObjectiveMarker.Disable()
-
Filmik powinien być odtwarzany tylko wtedy, gdy gracz trzyma wymagany przedmiot, i nie powinien być odtwarzany ponownie po otwarciu drzwi. Aby obsłużyć tę logikę, dodaj nową metodę
CheckCinematic()
do definicji klasydoor_open_cinematic_manager
. Ta funkcja pobiera gracza wewnątrzDoorVolume
i sprawdza, czy posiada on wymagane przedmioty.# Sprawdź, czy gracz ma wymagany przedmiot i czy drzwi nie są już otwarte. CheckCinematic(Agent:agent):void=
-
W
CheckCinematic()
sprawdź, czy gracz trzyma przedmiot zarejestrowany wConditionalButton
przy użyciuIsHoldingItem[]
, i sprawdź, czyIsDoorOpen
ma wartość false, aby upewnić się, że drzwi nie są już odblokowane. Jeśli tak, wykonajspawn{}
funkcjiPlayCinematic()
, przekazując gracza otwierającego drzwi. Gotowa funkcjaCheckCinematic()
powinna wyglądać następująco:# Sprawdź, czy gracz ma wymagany przedmiot i czy drzwi nie są już otwarte. CheckCinematic(Agent:agent):void= if: ConditionalButton.IsHoldingItem[Agent] and not IsDoorOpen? then: spawn{PlayCinematic(Agent)}
Śledzenie gracza i przyznawanie przedmiotów
Ponieważ gracz musi wykonać zamach bronią wewnątrz DoorVolume
, aby otworzyć drzwi, urządzenie aktywatora sterowania musi nasłuchiwać tego zdarzenia. Postępuj zgodnie z poniższą instrukcją, aby aktywator sterowania nasłuchiwał, kiedy gracz wymachuje bronią.
-
Dodaj nową metodę
OnPlayerEntersVolume()
do definicji klasydoor_open_cinematic_manager
. Ta funkcja pobiera agenta i rejestruje go wFireTrigger
, gdy wejdzie on doDoorVolume
.# Rejestruje agenta w FireTrigger, gdy wejdzie on do DoorVolume. OnPlayerEntersVolume(Agent:agent):void= Logger.Print("Agent wszedł do DoorVolume")
-
W
OnPlayerEntersVolume()
zarejestruj agenta za pomocąFireTrigger
, wywołującRegister()
. Następnie ustawFireSubscription
na rezultat subskrypcjiFireTrigger.PressedEvent
doPlayCinematic()
. Gotowa funkcjaOnPlayerEntersVolume()
powinna wyglądać następująco:# Rejestruje agenta w FireTrigger, gdy wejdzie on do DoorVolume. OnPlayerEntersVolume(Agent:agent):void= Logger.Print("Agent wszedł do DoorVolume") FireTrigger.Register(Agent) # Subskrybuj PressedEvent do PlayCinematic i zapisz tę subskrypcję w FireSubscrition. set FireSubscription = option{(FireTrigger.PressedEvent.Subscribe(PlayCinematic))}
-
Gdy gracz opuszcza
DoorVolume
, musisz przestać śledzić subskrypcję dlaFireTrigger.PressedEvent
, ponieważ gracz powinien być w stanie aktywować filmik tylko wtedy, gdy nie znajduje się wewnątrz przestrzeni. Aby to obsłużyć, dodaj nową metodęOnPlayerExitsVolume()
do definicji klasydoor_open_cinematic_manager
.# Wyrejestruj agenta z FireTrigger, gdy opuści on DoorVolume. OnPlayerExitsVolume(Agent:agent):void=
-
W
OnPlayerExitsVolume()
najpierw wyrejestruj (Unregister()
) agenta za pomocąFireTrigger
. Następnie pobierz subskrypcję wewnątrzFireSubscription
i anuluj ją. Gotowa metodaOnPlayerExitsVolume()
powinna wyglądać następująco:# Wyrejestruj agenta z FireTrigger, gdy opuści on DoorVolume. OnPlayerExitsVolume(Agent:agent):void= Logger.Print("Agent opuścił DoorVolume") FireTrigger.Unregister(Agent) # Anuluj subskrypcję do FireSubscription. if (SubscriptionToCancel := FireSubscription?): SubscriptionToCancel.Cancel()
-
Gdy gracz wejdzie w interakcję z przyciskiem
ItemButton
, otrzyma broń, której potrzebuje, aby przejść dalej. Na minimapie pojawia się również znacznik celu, który wskazuje drogę do drzwi, jeśli jeszcze ich nie znalazł. Aby to obsłużyć, dodaj nową metodęGrantItem()
, która przyjmujeagent
do definicji klasydoor_open_cinematic_manager
. WewnątrzGrantItem()
wywołajGrantItem
na agencie, który został przekazany, i włącz znacznik celu. Gotowa metodaGrantItem()
powinna wyglądać następująco:# Przyznaje agentowi przedmiot, gdy wejdzie w interakcję z przyciskiem ItemGrantButton # i włącza ObjectiveMarker. GrantItem(Agent:agent):void= ItemGranter.GrantItem(Agent) ObjectiveMarker.Enable()
Łączenie wszystkiego razem
Możesz teraz zasubskrybować każde zdarzenie do powiązanej z nim funkcji i przetestować swój kod w grze.
-
W
OnBegin()
zasubskrybujItemGrantButton.InteractedWithEvent
do funkcjiGrantItem()
. Następnie zasubskrybujDoorVolume.AgentEntersEvent
iDoorVolume.AgentExitsEvent
do ich odpowiednich funkcji. Otrzymana funkcjaOnBegin()
powinna wyglądać następująco:# Działa po uruchomieniu urządzenia w aktywnej grze OnBegin<override>()<suspends>:void= # Subskrybuj każde zdarzenie do powiązanej z nim funkcji. ItemGrantButton.InteractedWithEvent.Subscribe(GrantItem) DoorVolume.AgentEntersEvent.Subscribe(OnPlayerEntersVolume) DoorVolume.AgentExitsEvent.Subscribe(OnPlayerExitsVolume)
-
Zapisz kod i skompiluj go.
-
W UEFN wybierz urządzenie DoorOpenCinematicManager w swoim poziomie. W Outlinerze przypisz każde edytowalne odwołanie do urządzenia w poziomie.
Kliknij obraz, aby go powiększyć.
-
Na pasku narzędzi UEFN kliknij Uruchom sesję, aby przetestować poziom w grze. Podczas testu poziomu gracz po wejściu w interakcję z przyciskiem przedmiotu powinien otrzymać potrzebną broń, a do minimapy gracza powinien zostać dodany znacznik celu. Gdy gracz użyje broni wewnątrz przestrzeni drzwi, powinien zostać odtworzony filmik, drzwi powinny się otworzyć, a widok powinien zmienić się na pierwszoosobowy.
Kompletny kod
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Odwiedź stronę: https://dev.epicgames.com/documentation/pl-pl/uefn/create-your-own-device-in-verse, aby dowiedzieć się, jak utworzyć urządzenie Verse.
door_open_log := class(log_channel){}
door_open_cinematic_manager := class(creative_device):
Logger:log = log{Channel := door_open_log}
# Aktywator sterowania, który nasłuchuje gracza machającego bronią
# wewnątrz DoorVolume.
@editable
FireTrigger:input_trigger_device = input_trigger_device{}
# Urządzenie sekwencji filmowej, które odtwarza filmik podczas otwierania drzwi.
@editable
CinematicSequence:cinematic_sequence_device = cinematic_sequence_device{}
# Warunkowy przycisk przedmiotu, który sprawdza, czy gracz posiada odpowiednią broń.
@editable
ConditionalButton:conditional_button_device = conditional_button_device{}
# Urządzenie kłódki, które zapobiega otwarciu drzwi.
@editable
Door:lock_device = lock_device{}
# Przestrzeń, wewnątrz której musi znajdować się gracz, aby otworzyć drzwi.
@editable
DoorVolume:volume_device = volume_device{}
# Kamera okrążająca symuluje widok z perspektywy pierwszej osoby.
@editable
FPSCamera:gameplay_camera_orbit_device = gameplay_camera_orbit_device{}
# Urządzenie przyznawacza przedmiotów, które przyznaje graczowi potrzebną broń.
@editable
ItemGranter:item_granter_device = item_granter_device{}
# Przycisk aktywujący ItemGranter.
@editable
ItemGrantButton:button_device = button_device{}
# Urządzenie znacznika na mapie wskazujące lokalizację drzwi na mapie.
@editable
ObjectiveMarker:map_indicator_device = map_indicator_device{}
# Zmienna, która śledzi, czy drzwi są już otwarte.
var IsDoorOpen:logic = false
# Subskrypcja urządzenia FireTrigger, którą można anulować.
var FireSubscription:?cancelable = false
# Działa po uruchomieniu urządzenia w aktywnej grze
OnBegin<override>()<suspends>:void=
# Subskrybuj każde zdarzenie do powiązanej z nim funkcji.
ItemGrantButton.InteractedWithEvent.Subscribe(GrantItem)
DoorVolume.AgentEntersEvent.Subscribe(OnPlayerEntersVolume)
DoorVolume.AgentExitsEvent.Subscribe(OnPlayerExitsVolume)
# Rejestruje agenta w FireTrigger, gdy wejdzie on do DoorVolume.
OnPlayerEntersVolume(Agent:agent):void=
Logger.Print("Agent wszedł do DoorVolume")
FireTrigger.Register(Agent)
# Subskrybuj PressedEvent do PlayCinematic i zapisz tę subskrypcję w FireSubscrition.
set FireSubscription = option{(FireTrigger.PressedEvent.Subscribe(CheckCinematic))}
# Wyrejestruj agenta z FireTrigger, gdy opuści on DoorVolume.
OnPlayerExitsVolume(Agent:agent):void=
Logger.Print("Agent opuścił DoorVolume")
FireTrigger.Unregister(Agent)
# Anuluj subskrypcję do FireSubscription.
if (SubscriptionToCancel := FireSubscription?):
SubscriptionToCancel.Cancel()
# Przyznaje agentowi przedmiot, gdy wejdzie w interakcję z przyciskiem ItemGrantButton
# i włącza ObjectiveMarker.
GrantItem(Agent:agent):void=
ItemGranter.GrantItem(Agent)
ObjectiveMarker.Enable()
# Sprawdź, czy gracz ma wymagany przedmiot i czy drzwi nie są już otwarte.
CheckCinematic(Agent:agent):void=
if:
ConditionalButton.IsHoldingItem[Agent] and not IsDoorOpen?
then:
spawn{PlayCinematic(Agent)}
# Odtwarza filmik i odblokowuje drzwi.
PlayCinematic(Agent:agent)<suspends>:void=
Logger.Print("Gracz trzyma przedmiot, odtwarzam filmik...")
CinematicSequence.Play()
# Odblokuj i otwórz drzwi.
Door.Unlock(Agent)
Door.Open(Agent)
set IsDoorOpen = true
# Dodaj kamerę pierwszoosobową do agenta. Po zakończeniu filmiku
# agent będzie w widoku pierwszoosobowym.
FPSCamera.AddTo(Agent)
Logger.Print("Zmieniono kamerę")
# Wyłącz znacznik celu
ObjectiveMarker.Disable()
We własnym zakresie
Po ukończeniu tego przewodnika wiesz już, jak używać Verse do odtwarzania filmiku, gdy gracz otwiera drzwi, oraz jak przejść z kamery trzecioosobowej do pierwszoosobowej.
Wykorzystując zdobytą wiedzę, spróbuj wykonać następujące czynności:
-
Czy potrafisz wykonać inne rodzaje przejść kamery, takie jak przejście do widoku z przewijaniem bocznym?
-
A co ze specjalnym przyciskiem do zmiany kąta kamery lub zaprojektowaniem poziomu, który wymaga wielu kątów kamery, aby móc przejść dalej?
-
Czy potrafisz użyć aktywatorów sterowania do nakładania negatywnych kar, takich jak wyzwanie dla graczy polegające na przejściu sekcji bez skakania i odtworzenie filmiku, jeśli im się nie uda?