W tej sekcji zaprezentowano, jak dodać niestandardowy efekt VFX (efekt wizualny) bicia serca do rozgrywki, który zdradza lokalizację nieporuszającego się rekwizytu.
Gdy gracze z drużyny rekwizytów są zbyt długo bezczynni, odtwarzany jest efekt wizualny bicia serca, powiadamiający drużynę łowców. Ten efekt wizualny jest rejestrowany dla każdego gracza z drużyny rekwizytów, gdy spawnują się w grze.
Do implementacji funkcji bicia serca będą używane urządzenia generatora efektów wizualnych wraz z Verse. Obejmuje to:
-
Aktywację efektów wizualnych.
-
Teleportowanie generatora efektów wizualnych do graczy.
-
Stworzenie interfejsu użytkownika pokazującego członkom drużyny rekwizytów, ile czasu pozostało im na wykonanie ruchu, zanim włączy się bicie serca.
Ten samouczek zawiera fragmenty Verse, które pokazują, jak wykonać mechanikę rozgrywki wymaganą w tej grze. Wykonaj poniższe instrukcje i skopiuj pełny skrypt w kroku 6 tego samouczka.
Zanim zaczniesz

Dobrą praktyką jest przechowywanie zasobów i urządzeń w folderach, aby ułatwić ich lokalizację. Urządzenia można grupować według przeznaczenia, lokalizacji, typu lub w dowolny inny sposób.
Umieszczone zasoby można przenosić do utworzonych folderów i aktorów.
Na obrazie gif powyżej urządzenie generatora efektów wizualnych jest przeciągane do folderu HeartBeatVFX drużyny rekwizytów w celu organizacji. Możesz także kliknąć prawym przyciskiem myszy i wybrać Przenieś do, aby wybrać folder, do którego chcesz przenieść zasób.
Używane urządzenia:
- ~ 16 x generator efektów wizualnych
Urządzenie generatora efektów wizualnych

Utwórz generator efektów wizualnych dla każdego gracza. Gdy gracz potrzebuje tego urządzenia, zostanie ono teleportowane do lokalizacji gracza. Kiedy nie będzie już potrzebne, zostanie ukryte, dopóki nie będzie znów potrzebne.
Generatory efektów wizualnych w tym szablonie używają efektów wizualnych Niagara do tworzenia niestandardowych zasobów wyświetlanych podczas rozgrywki. Zasoby efektów wizualnych użyte w tym samouczku są ustawione na wyświetlanie bicia serca, aby ujawnić nieporuszających się graczy w drużynie rekwizytów. Ten efekt wizualny pojawi się nad rekwizytami, które były statyczne przez co najmniej 15 sekund.
Możesz odwiedzić sekcję efekty wizualne naszej dokumentacji, aby zapoznać się z wieloma samouczkami dotyczącymi tworzenia efektów wizualnych bicia serca. Następnie możesz użyć niestandardowego bicia serca utworzonego za pomocą generatora efektów wizualnych.
Efekt można wypróbować po umieszczeniu narzędzia generatora efektów wizualnych. W panelu Szczegóły wybierz niestandardowy efekt z menu rozwijanego Własny efekt wizualny. Upewnij się, że włączona jest opcja Zastąpienie niestandardowym efektem wizualnym, aby wybrane efekty wizualne pojawiały się w oknie wizualizacji.

Z tego miejsca można dalej dostosowywać efekt w Panelu szczegółów, dodając kolor i decydując, kiedy efekt wizualny będzie odtwarzany i przez kogo będzie widoczny.
Umieść urządzenie w miejscu niewidocznym dla graczy i skonfiguruj Opcje użytkownika zgodnie z poniższą tabelą. Następnie skopiuj i wklej to urządzenie w takiej ilości, aby dopasować ją do liczby graczy, na jaką pozwala twoja rozgrywka.

Opcja | Wartość | Wyjaśnienie |
---|---|---|
Niestandardowy efekt wizualny | HeartBeatVFX | Określa własny efekt cząsteczkowy zamiast efektu z listy gotowych. |
Zastąpienie niestandardowym efektem wizualnym | True | Określa, czy używać efektów dla twórców. |
Włączone w fazie | Tylko podczas gry | Określa fazy gry, podczas których urządzenie będzie włączone. Włączony generator efektów graficznych będzie wyświetlać zdefiniowany efekt cząsteczkowy. |
Odtwarzaj efekt bicia serca w lokalizacji
Wykonaj poniższe kroki, aby przemieścić urządzenie generatora efektów wizualnych w Verse w celu odtworzenia i zatrzymania efektu bicia serca u graczy z drużyny rekwizytów.
-
Utwórz nowy plik Verse w swoim projekcie pod nazwą heartbeat.verse. Nie będzie to urządzenie Verse, więc można je utworzyć jako pusty plik Verse.
-
Zacznij od dwukrotnego kliknięcia utworzonego pliku Verse, aby dodać następujące ścieżki Verse do zaimportowania.
using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath } using { /UnrealEngine.com/Temporary/Diagnostics } using { /UnrealEngine.com/Temporary/UI } using { /Verse.org/Colors } using { /Verse.org/Simulation }
-
Ten kod tworzy klasę o nazwie
heartbeat_vfx
w heartbeat.verse. Klasaheartbeat_vfx
zawiera strukturę danych do śledzenia obiektówvfx_spawner_device
dla każdego gracza, a także funkcje w celu ustawienia na określonej pozycji lub zresetowania efektu wizualnego.log_heart_beat := class(log_channel){} # Komunikaty te są używane do powiadamiania agenta rekwizytów za pomocą komunikatu (lub ukrywania go), gdy musi się on poruszyć, aby jego bicie serca nie stało się widoczne. HeartBeatWarningMessage<localizes>(Time:int):message = "Bicie serca za {Time} sek. Rusz się!" HeartBeatWarningClear<localizes>:message = "" # Ta klasa uwidacznia edytowalne właściwości bicia serca dla urządzenia Verse prop_hunt. heart_beat := class<concrete>(): Logger:log = log{Channel:=log_heart_beat} @editable # Liczba sekund, w ciągu których agent rekwizytów musi się poruszyć, zanim bicie serca ujawni jego położenie. MoveTime:float = 15.0 @editable # Liczba sekund pozostałych do wyświetlenia ostrzeżenia o biciu serca. Nie powinno to być > niż HeartBeatTimer. WarningTime:float = 5.0 @editable # Tablica urządzeń efektów wizualnych bicia serca. Na każdego gracza przypada jedno. AgentVFX:[]heartbeat_vfx = array{} @editable # Urządzenie radia służy do odtwarzania efektów dźwiękowych (SFX) bicia serca. SFXPlayer:radio_device = radio_device{} # Ta mapa kojarzy UI do wyświetlania ostrzeżenia o biciu serca z każdym agentem rekwizytów. var WarningUI:[agent]heartbeat_warning_ui = map{} # Śledzi, ilu graczy ma aktywne bicie serca, dzięki czemu możemy zarządzać urządzeniem efektów dźwiękowych. var NumberOfHeartBeats:int = 0 # Konfiguruje UI bicia serca dla agenta. SetUpUI(PropAgent:agent):void = if: not WarningUI[PropAgent] AsPlayer := player[PropAgent] PlayerUI := GetPlayerUI[AsPlayer] then: UIData:heartbeat_warning_ui = heartbeat_warning_ui{} UIData.CreateCanvas() PlayerUI.AddWidget(UIData.Canvas, player_ui_slot{ZOrder := 1}) if (set WarningUI[PropAgent] = UIData) {} # Aktywuje efekty wizualne i dźwiękowe bicia serca dla określonego gracza. Enable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = if: # Pobierz postać, która jest używana do znalezienia położenia agenta rekwizytów w scenie. Character := PropAgent.GetFortCharacter[] then: # Ustaw położenie efektu wizualnego bicia serca na położenie agenta rekwizytów. HeartBeatVFXData.Activate(Character.GetTransform()) # Zwiększ liczbę uderzeń serca, a jeśli jest to pierwsze odtwarzane bicia serca, musimy odtworzyć dźwięk, aby je rozpocząć. set NumberOfHeartBeats += 1 if (NumberOfHeartBeats = 1) then SFXPlayer.Play() # Zarejestruj agenta rekwizytów na urządzeniu odtwarzacza dźwięku, aby dźwięk bicia serca był odtwarzany z tej pozycji. SFXPlayer.Register(PropAgent) else: Logger.Print("Postać, Indeks lub HeartBeatVFXData nie zostały znalezione. Nie można uruchomić bicia serca") # Czyści efekty wizualne i dźwiękowe bicia serca dla określonego agenta rekwizytów. Disable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = Logger.Print("Wyłączanie bicia serca.") # Dezaktywuj efekty wizualne. HeartBeatVFXData.Deactivate() # Wyrejestruj agenta rekwizytów z urządzenia odtwarzacza dźwięków, co spowoduje zatrzymanie dźwięku bicia serca. SFXPlayer.Unregister(PropAgent) # Zmniejsz licznik bicia serca. Licznik nigdy nie powinien zejść poniżej 0. set NumberOfHeartBeats -= 1 if (NumberOfHeartBeats < 0) then set NumberOfHeartBeats = 0 # Czyści wszystkie efekty wizualne i dźwiękowe dla wszystkich agentów rekwizytów. DisableAll():void = Logger.Print("Wyłączenie wszystkich bić serca.") # Iteruj przez wszystkie efekty wizualne i przenieś je do 0,0,0. for (HeartBeatVFXDevice : AgentVFX): HeartBeatVFXDevice.Deactivate() # Wyrejestruj wszystkich graczy z dźwięku bicia serca. SFXPlayer.UnregisterAll() # Ponownie zainicjuj licznik bicia serca do 0 set NumberOfHeartBeats = 0 # Klasa heartbeat_warning_ui zawiera strukturę danych do śledzenia kanwy UI i text_block dla każdego gracza, a także funkcję do tworzenia nowej kanwy UI z ostrzeżeniem o biciu serca. heartbeat_warning_ui := class: var Canvas:canvas = canvas{} var Text:text_block = text_block{} # Tworzy kanwę UI dla komunikatu ostrzegawczego. CreateCanvas():void = set Text = text_block{DefaultTextColor := NamedColors.White, DefaultShadowColor := NamedColors.Black} set Canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.5, Y := 0.75}, Maximum := vector2{X := 0.5, Y := 0.75}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 1.0} SizeToContent := true Widget := Text
-
Ten kod tworzy metodę
Activate()
w klasieheartbeat_vfx
, która przyjmuje argument transform i przenosi urządzenie generatora efektów wizualnych do tegotransform
.# Klasa heartbeat_vfx zawiera strukturę danych do śledzenia obiektów głównych efektów wizualnych i vfx_spawner_device dla każdego gracza, a także funkcje do ustawiania efektów wizualnych na określonej pozycji lub resetowania ich. heartbeat_vfx := class<concrete>: @editable # Urządzenie efektów wizualnych dla każdego bicia serca. VFXDevice:vfx_spawner_device = vfx_spawner_device{} # Przesunięcie to jest używane do umieszczenia bicia serca nad głową agenta rekwizytów. HeartBeatVFXOffset:vector3 = vector3{X := 0.0, Y := 0.0, Z := 110.0} # Ustawia położenie efektu wizualnego bicia serca, a następnie włącza efekt wizualny. Activate(Transform:transform):void = VFXPosition := Transform.Translation + HeartBeatVFXOffset if (VFXDevice.TeleportTo[VFXPosition, Transform.Rotation]): VFXDevice.Enable()
-
Ten kod tworzy metodę
Deactivate()
w klasieheartbeat_vfx
, która wyłącza urządzenie generatora efektów wizualnych i tym samym ukrywa wizualizacje bicia serca.# Klasa heartbeat_vfx zawiera strukturę danych do śledzenia obiektów głównych efektów wizualnych i vfx_spawner_device dla każdego gracza, a także funkcje do ustawiania efektów wizualnych na określonej pozycji lub resetowania ich. heartbeat_vfx := class<concrete>: @editable # Urządzenie efektów wizualnych dla każdego bicia serca. VFXDevice:vfx_spawner_device = vfx_spawner_device{} # Przesunięcie to jest używane do umieszczenia bicia serca nad głową agenta rekwizytów. HeartBeatVFXOffset:vector3 = vector3{X := 0.0, Y := 0.0, Z := 110.0} # Ustawia położenie efektu wizualnego bicia serca, a następnie włącza efekt wizualny. Activate(Transform:transform):void = VFXPosition := Transform.Translation + HeartBeatVFXOffset if (VFXDevice.TeleportTo[VFXPosition, Transform.Rotation]): VFXDevice.Enable() # Wyłącza efekty wizualne, ukrywając wizualizacje bicia serca. Deactivate():void = VFXDevice.Disable()
Wyświetlanie ostrzeżenia o biciu serca dla gracza
Wykonaj poniższe kroki, aby skonfigurować niestandardowy UI z blokiem tekstu, który będzie wyświetlał komunikat ostrzegawczy o biciu serca. Zobacz Interfejsy użytkownika w grze, aby dowiedzieć się więcej o tworzeniu niestandardowego UI i innych komponentów interfejsu Verse.
-
Dwie poniższe stałe kontrolują tekst, który będzie wyświetlany graczom z drużyny rekwizytów w różnych momentach gry.
-
Stała
HeartBeatWarningMessage
jest funkcją, która przyjmujeint
i zwraca typmessage
. Ten typ jest używany w elementach UI, ponieważ można go zlokalizować. Jest to tekst, który gracze zobaczą, gdy będą musieli się poruszyć, aby uniknąć efektu bicia serca ujawniającego ich położenie. -
Stała
HeartBeatWarningClear
to pusty typmessage
, który zostanie wyświetlony, aby gracze nie widzieli już komunikatu ostrzegawczego.
# Komunikaty te są używane do powiadamiania agenta rekwizytów za pomocą komunikatu (lub ukrywania go), gdy musi się on poruszyć, aby jego bicie serca nie stało się widoczne. HeartBeatWarningMessage<localizes>(Time:int):message = "Bicie serca za {Time} sek. Rusz się!" HeartBeatWarningClear<localizes>:message = ""
-
-
Utwórz klasę o nazwie
heartbeat_warning_ui
w heartbeat.verse. Klasa heartbeat_warning_ui zawiera strukturę danych do śledzenia kanwy UI i text_block dla każdego gracza, a także funkcję do tworzenia nowej kanwy UI z ostrzeżeniem o biciu serca.# Klasa heartbeat_warning_ui zawiera strukturę danych do śledzenia kanwy UI i text_block dla każdego gracza, a także funkcję do tworzenia nowej kanwy UI z ostrzeżeniem o biciu serca. heartbeat_warning_ui := class: var Canvas:canvas = canvas{} var Text:text_block = text_block{} # Tworzy kanwę UI dla komunikatu ostrzegawczego. CreateCanvas():void = set Text = text_block{DefaultTextColor := NamedColors.White, DefaultShadowColor := NamedColors.Black} set Canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.5, Y := 0.75}, Maximum := vector2{X := 0.5, Y := 0.75}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 1.0} SizeToContent := true Widget := Text
Zarządzanie efektami bicia serca
Aby utworzyć menadżer bicia serca, wykonaj następujące instrukcje.
-
Kod poniżej tworzy klasę o nazwie
heart_beat
w heartbeat.verse. Klasa ta uwidacznia edytowalne właściwości bicia serca dla urządzenia prop_hunt i zarządza efektami bicia serca.log_heart_beat := class(log_channel){} # Ta klasa uwidacznia edytowalne właściwości bicia serca dla urządzenia prop_hunt. heart_beat := class<concrete>(): Logger:log = log{Channel:=log_heart_beat} @editable MoveTime:float = 15.0
- Ten kod dodaje następujące edytowalne właściwości do klasy
heart_beat
.-
Ten kod kontroluje sekundy, w których agent rekwizytów musi się poruszyć, zanim efekt bicia serca ujawni jego położenie.
@editable MoveTime:float = 15.0
-
Ten kod kontroluje sekundy pozostałe do pojawienia się słów na ekranie, aby ostrzec członka drużyny rekwizytów i poinformować go, aby ruszył się, zanim bicie serca się włączy.
@editable WarningTime:float = 5.0
-
Ten kod to tablica urządzeń efektów wizualnych bicia serca. Na każdego gracza przypada jedno.
@editable AgentVFX:[]heartbeat_vfx = array{}
-
W tym kodzie urządzenie radia jest używane do odtwarzania efektów dźwiękowych (SFX) bicia serca.
@editable SFXPlayer:radio_device = radio_device{}
-
-
-
Ten kod mapuje UI do wyświetlania ostrzeżenia o biciu serca dla każdego agenta rekwizytów.
# Ta mapa kojarzy UI do wyświetlania ostrzeżenia o biciu serca z każdym agentem rekwizytów. var WarningUI:[agent]heartbeat_warning_ui = map{}
-
Ten kod śledzi, ilu graczy ma aktywne bicie serca, dzięki czemu możemy zarządzać urządzeniem efektów dźwiękowych.
# Śledzi, ilu graczy ma aktywne bicie serca, dzięki czemu możemy zarządzać urządzeniem efektów dźwiękowych. var NumberOfHeartBeats:int = 0
-
Ten kod wyświetla UI z ostrzeżeniem dla graczy.
# Konfiguruje UI bicia serca dla agenta. SetUpUI(PropAgent:agent):void = if: not WarningUI[PropAgent] AsPlayer := player[PropAgent] PlayerUI := GetPlayerUI[AsPlayer] then: UIData:heartbeat_warning_ui = heartbeat_warning_ui{} UIData.CreateCanvas() PlayerUI.AddWidget(UIData.Canvas, player_ui_slot{ZOrder := 1}) if (set WarningUI[PropAgent] = UIData) {}
-
Ten kod aktywuje efekty wizualne (VFX) i dźwiękowe (SFX) dla określonego gracza.
# Aktywuje efekty wizualne i dźwiękowe bicia serca dla określonego gracza. Enable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = if: # Pobierz postać, która jest używana do znalezienia położenia agenta rekwizytów w scenie. Character := PropAgent.GetFortCharacter[] then: # Ustaw położenie efektu wizualnego bicia serca na położenie agenta rekwizytów. HeartBeatVFXData.Activate(Character.GetTransform()) # Zwiększ liczbę uderzeń serca, a jeśli jest to pierwsze odtwarzane bicia serca, musimy odtworzyć dźwięk, aby je rozpocząć. set NumberOfHeartBeats += 1 if (NumberOfHeartBeats = 1) then SFXPlayer.Play() # Zarejestruj agenta rekwizytów na urządzeniu odtwarzacza dźwięku, aby dźwięk bicia serca był odtwarzany z tej pozycji. SFXPlayer.Register(PropAgent) else: Logger.Print("Postać, Indeks lub HeartBeatVFXData nie zostały znalezione. Nie można uruchomić bicia serca")
-
Ten kod tworzy metodę wyłączającą efekty wizualne i dźwiękowe dla jednego gracza, a drugą wyłączającą je dla wszystkich graczy.
# Czyści efekty wizualne i dźwiękowe bicia serca dla określonego agenta rekwizytów. Disable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = Logger.Print("Wyłączanie bicia serca.") # Dezaktywuj efekty wizualne. HeartBeatVFXData.Deactivate() # Wyrejestruj agenta rekwizytów z urządzenia odtwarzacza dźwięków, co spowoduje zatrzymanie dźwięku bicia serca. SFXPlayer.Unregister(PropAgent) # Zmniejsz licznik bicia serca. Licznik nigdy nie powinien zejść poniżej 0. set NumberOfHeartBeats -= 1 if (NumberOfHeartBeats < 0) then set NumberOfHeartBeats = 0 # Czyści wszystkie efekty wizualne i dźwiękowe dla wszystkich agentów rekwizytów. DisableAll():void = Logger.Print("Wyłączenie wszystkich bić serca.") # Iteruj przez wszystkie efekty wizualne i przenieś je do 0,0,0. for (HeartBeatVFXDevice : AgentVFX): HeartBeatVFXDevice.Deactivate() # Wyrejestruj wszystkich graczy z dźwięku bicia serca. SFXPlayer.UnregisterAll() # Ponownie zainicjuj licznik bicia serca do 0 set NumberOfHeartBeats = 0