Niektóre z najprostszych przeszkód po prostu poruszają się do przodu i do tyłu. Często spotyka się je w zadaniach wykorzystujących platformy, w których musisz dokładnie wymierzyć czas skoku i poruszać się ostrożnie, aby nie spaść.
Poruszanie platformą w ten sposób nazywa się translacją czyli zmianą pozycji przekształcenia obiektu. W tej sekcji dowiesz się, jak tworzyć platformy, które nie tylko poruszają się do przodu i do tyłu, ale mogą się też przesuwać do innych punktów w świecie. Następnie użyjesz takich platform, aby utworzyć swoją pierwszą przeszkodę!
Tworzenie rekwizytów do translacji
Wykonaj poniższe kroki, aby stworzyć kod, który realizuje translację platform:
Przy użyciu Eksploratora Verse utwórz nową klasę Verse o nazwie
translating_prop, która dziedziczy z klasymovable_prop. Do tej klasy dodaj specyfikator<concrete>, aby uwidocznić jej właściwości dla UEFN.Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Dodaj instrukcje
using { /Fortnite.com/Devices/CreativeAnimation }iusing { /UnrealEngine.com/Temporary/SpatialMath }na początku pliku, aby zaimportować te moduły. Są one potrzebne, aby animować rekwizyt. W tym miejscu dołączono podpowiedzi użyte w tej sekcji.Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget." # A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Na początku definicji klasy
translating_propdodaj następujące pola:Edytowalna tablica
creative_propo nazwieMoveTargets. Są to rekwizyty trybu kreatywnego, w których kierunkuRootPropbędzie się poruszać podczas rozgrywki. Używa innego rekwizytu zamiast przekształcenia, ponieważ cel ruchu ułatwia wizualizację, w którą stronę kierują się rekwizyty. Później w edytorze można je ustawić jako niewidoczne podczas rozgrywki.Verse# The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{}Edytowalna opcjonalna zmienna
vector3o nazwieMovePosition. Jeśli nie przypiszesz rekwizytuMoveTarget, rekwizyt główny użyje tej zmiennej, aby dowiedzieć się, w którym kierunku ma się poruszać.Verse# The position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget. @editable {ToolTip := MovePositionTip} var MovePosition:?vector3 = falseZmienna
vector3o nazwieTargetPosition. Jest to pozycja, w kierunku której rekwizyt będzie faktycznie się poruszać. Będzie ustawiona na pozycję celu ruchu lub na wartośćMovePosition.Verse# The position the prop is currently targeting. var TargetPosition:vector3 = vector3{}Definicja klasy powinna wyglądać następująco:
Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop): # The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{} # The optional position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget.
Funkcja
Move(), która porusza rekwizytem w klasiemovable_prop, jest już skonfigurowana, dlatego możesz ją zastąpić w tej klasie. Zastąp funkcjęMove()w klasietranslating_prop.Verse# Translate toward the MovePosition, or MoveTarget if one is set. Move<override>()<suspends>:void=W funkcji
Move()w wyrażeniuif, sprawdź, czy zmiennaMovePositionjest ustawiona i zapisana w wartościNewPosition. Jeśli tak jest, ustaw zmiennąTargetPositionna wartośćNewPosition.Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPositionFunkcja
MoveToEase()wymaga przekazania do niej wartościanimation_mode. Animacja jest odtwarzana jeden raz za każdym razem, gdy zostanie wywołana funkcjaMove(), a zmiennaanimation_modeokreśla, co ma się stać po zakończeniu animacji. Wywołaj funkcjęMoveToEase(), aby przekazać wartościTargetPosition,MoveDuration,MoveEaseTypeianimation_mode.OneShot. Użycie tego trybu animacji oznacza, że animacja się zatrzyma, gdy obiekt osiągnie cel. Jest to wcześniej skonfigurowana przeciążona funkcjaMoveToEase(), która nie przyjmuje wartości obrotu ani skali.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once. RootProp.MoveToEase(TargetPosition, MoveDuration, MoveEaseType, animation_mode.OneShot)Tryb animacji one-shot przydaje się, gdy chcesz zresetować obiekt lub utrzymać go w ruchu, ale co, jeśli chcesz odtworzyć animację wstecz? W takim przypadku możesz użyć trybu animacji
PingPong. To odtworzy animację, a następnie odtworzy ją wstecz, aby przemieścić rekwizyt z powrotem do miejsca początkowego. Istnieje też tryb animacjiLoop, który zapętla animację, ale wymaga, aby animacja kończyła się w tym samym miejscu, w którym się zaczęła. Wybierz tryb animacji odpowiedni do przygody, którą tworzysz.Jeśli, konfigurując rekwizyty, w edytorze nie ustawisz zmiennej
MovePosition, musisz ustawić co najmniej jeden rekwizytMoveTargets, w kierunku którego rekwizyt główny będzie się poruszać. Aby obsługiwać rekwizytyMoveTargetsw wyrażeniufor, wykonaj iterację przez każdy cel wMoveTargets. Sprawdź, czy jest ustawiony rekwizytMoveTarget. W tym celu wywołaj funkcjęIsValid[]. Jeśli jest, ustaw zmiennąTargetPositionna translację wartościMoveTarget.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition else: for: MoveTarget:MoveTargets do: # Set the TargetPosition to the MoveTarget's position if theNa koniec ponownie wywołaj funkcję
MoveToEase()z trybem animacjianimation_mode.OneShot. Wykonanie tego działania w wyrażeniuforspowoduje przeniesienie rekwizytu kolejno do każdego celu, a na koniec spowoduje reset lub kontynuację (w zależności od ustawionych parametrów). Ukończona funkcjaMove()powinna wyglądać następująco:Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once.
Budowanie urządzenia Verse
Kod Verse jest ukończony. Teraz musisz znaleźć sposób na wywołanie go w swoim poziomie. Użyjesz innego urządzenia Verse, aby koordynować i skonfigurować wszystkie rekwizyty w momencie rozpoczęcia gry. Wykonaj poniższe kroki, aby koordynować przeszkody i poruszać platformami!
Przy użyciu Eksploratora Verse utwórz nowe urządzenie Verse o nazwie
prop_animator. Jest to urządzenie, które będzie koordynowało poruszanie rekwizytami.W klasie
prop_animatordodaj edytowalną tablicętranslating_propo nazwieTranslatingProps. Następnie w funkcjiOnBegin()w wyrażeniuforwywołaj funkcjęSetup()w przypadku każdego rekwizytu. Ukończony plikprop_animatorpowinien wyglądać następująco:Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation." # Coordinates moving props through animation by calling each moveable_prop's Setup() method. prop_animator := class(creative_device): # Array of moveable_props that translate using animation.Zapisz kod i go skompiluj.
Przeciągnij urządzenie
prop_animatordo poziomu.
Łączenie rekwizytów z urządzeniami
Wróć do edytora i usuń część rekwizytów blisko początku, aby utworzyć lukę. Do poziomu dodaj dwa rekwizyty FG01 Hover Platform M (FG01 Latająca platforma M). Te platformy będą animowane, dlatego nadaj im nazwę TranslatingPlatform. Następnie dodaj kilka rekwizytów FG01 Button Bulb (FG01 Żarówka przycisku), które będą celami ruchu każdej platformy. Nadaj im nazwę PlatformTarget. Umieść platformy nad luką i pamiętaj, aby umieścić cele, do których platformy mają się przemieszczać. Dla każdej platformy możesz określić wiele celów.
Konfiguracja rekwizytów translacji. Każda platforma porusza się do przodu i do tyłu między dwoma celami ruchu, tak jak wskazują strzałki.
Jeśli chcesz ukryć rekwizyty docelowe w trakcie rozgrywki, w przypadku każdego celu ustaw wartość True dla opcji Aktor ukryty w grze w sekcji Renderowanie.
Przeciągnij urządzenie prop_animator do poziomu i wybierz je. W panelu Outliner dla każdej platformy dodaj element do tablicy TranslatingProps. Każdemu rekwizytowi przypisz następujące wartości:
| Opcja | WARTOŚĆ | Objaśnienie |
|---|---|---|
MoveTargets | Przypisz do celów, w kierunku których ma się poruszać rekwizyt. | Są to cele rekwizytu trybu kreatywnego, w kierunku których kolejno będzie się poruszać rekwizyt. |
RootProp | Przypisz do rekwizytu, który animujesz. | Jest to rekwizyt, który animujesz. |
Kliknij Uruchom sesję i obejrzyj animację platform. Zmieniaj wartości MoveDuration, MoveEaseType oraz opóźnienia rozpoczęcia i zakończenia, aby tworzyć różne scenariusze.
Zajęliśmy się translacją. W kolejnej sekcji utworzysz rekwizyty, które obracają się w różnych kierunkach!
Następnie
Gotowy kod
Oto kompletny kod utworzony w tej sekcji:
translating_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget."
# A prop that moves (translates) toward either a Creative prop target
# or a position in world space.
translating_prop<public> := class<concrete>(movable_prop):
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation."
# Coordinates moving props through animation by calling each moveable_prop's Setup() method.
prop_animator := class(creative_device):
# Array of moveable_props that translate using animation.