Edytor grafów animacji

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Edytor grafów animacji to wizualne, oparte na węzłach narzędzie, które umożliwia technicznym artystom i animatom budowanie złożonej logiki animacji bezpośrednio w Roblox Studio. Dzięki uproszczonemu interfejsowi do tworzenia zachowań, takich jak drzewka blendy, usuwa tradycyjną zależność od ręcznego skryptowania w celu poruszania postacią.

System ten działa współzależnie z Twoim istniejącym przepływem pracy dla animacji:

  • Edytor animacji: Kontynuuj korzystanie z Edytora animacji jako głównego narzędzia do tworzenia pojedynczych klipów oraz dostosowywania kluczowych klatek i krzywych.
  • Edytor grafów animacji: Użyj tego nowego miejsca pracy, aby wziąć te klipy i zorganizować je w drzewo logiki do sterowania wyspecjalizowanym zachowaniem w grze.

Zaprojektowany, aby poprawić współpracę, wizualny graf pozwala deweloperom szybko sprawdzać, debugować i zrozumieć logikę stworzoną przez animatorów. Podczas gdy artyści koncentrują się na doskonaleniu interaktywnego ruchu, deweloperzy mogą nadal uzyskiwać dostęp do węzłów grafów animacji programowo, aby mieć bezpośrednią kontrolę nad mieszanymi animacjami i stanami.

Budowanie grafu


Aby rozpocząć budowanie logiki dla animowalnej postaci, uzyskaj dostęp do edytora grafów animacji za pomocą zakładki Avatar wstęgi Studio. Kolejne kroki pokazują, jak zainicjować rig i skonstruować podstawową sieć węzłów używając domyślnych animacji chodzenia i machania.

Aby głębiej zagłębić się w praktyczne aplikacje, możesz zapoznać się z Plikiem odniesienia grafów animacji, który zawiera zarówno podstawowe, jak i złożone przykłady implementacji.

Aby stworzyć własny graf animacji, podobnie do podstawowego przykładu podanego w odniesieniu, użyj następujących kroków:

  1. W Studio dodaj animowalny rig, przechodząc do zakładki Avatar i wybierając PostaćMoja Postać.

    Przycisk postaci zaznaczony w pasku narzędzi Studio.
  2. Otwórz edytor grafów animacji, przechodząc do Edytora grafów w zakładce Avatar.

    Edytor grafów animacji wskazany w pasku narzędzi Studio.
  3. Wybierz animowalny rig w widoku 3D i wybierz Utwórz graf.

  4. W Edytorze grafów kliknij prawym przyciskiem myszy i wybierz Klip.

    Lista węzłów w menu po kliknięciu prawym przyciskiem myszy
  5. W nowym węźle Klip, ustaw identyfikator animacji.

    1. Wybierz rozwijane menu Identyfikator animacji.

    2. Aby wprowadzić konkretny identyfikator zasobu animacji, kliknij Importuj.

      Podano pole w module importu animacji, aby dodać identyfikator animacji
    3. W polu Identyfikator animacji dodaj domyślną animację chodzenia: 507777826.

    4. Wybierz Importuj.

  6. Dodaj kolejny węzeł klipu, powtarzając kroki 4-5, używając domyślnej animacji machania: 507770239.

    Dwa węzły klipu z wypełnionym identyfikatorem animacji
  7. W Edytorze grafów kliknij prawym przyciskiem myszy i wybierz Dodaj.

    Dodaj węzeł
  8. Połącz węzły klipu z węzłem Dodaj, przeciągając złącze wyjściowe w prawym górnym rogu do odpowiedniego portu:

    1. Połącz węzeł Klip z animacją chodzenia z portem Podstawowym.
    2. Połącz węzeł Klip z animacją machania z portem Dodatkowym.
    Oba węzły klipu podłączone do węzła dodaj
  9. Z węzła Dodaj, połącz złącze wyjściowe w prawym górnym rogu z portem wyjściowym grafu Postura.

    Wszystkie węzły podłączone do finalnego węzła wyjściowego
  10. (Opcjonalnie) Przypisz parametr do swojej zmiennej Prędkość.

    1. Kliknij i przeciągnij zielone złącze portu Prędkość w pustą przestrzeń. Pojawia się nowy węzeł parametru.

      Kliknij i przeciągnij złącze z portu prędkości węzła klipu.
    2. W lewym górnym rogu edytora grafów, użyj panelu parametrów, aby szybko modyfikować parametry w swoich węzłach. Możesz również uzyskać do nich dostęp programowo.

      Panel parametrów, węzeł parametru i węzeł klipu pokazujący wspólne wartości.
  11. Przetestuj animację, naciskając przycisk odtwarzania.

    Ikona przycisku odtwarzania do podglądu animacji
  12. Spróbuj testować różne wagi, prędkości, tryby odtwarzania i inne animacje. Aby uzyskać więcej informacji na temat pojedynczych węzłów, zobacz Odniesienie węzłów.

Integracja API

Tworzenie i wdrażanie grafu animacji odbywa się zgodnie z standardowym procesem animacji Roblox. Po wybraniu riga w Edytorze grafów animacji, nowy zasób AnimationGraphDefinition jest tworzony. Ten zasób działa jako kontener dla Twoich węzłów, połączeń i parametrów. Gdy logika zostanie sfinalizowana, publikujesz graf, aby otrzymać standardowy identyfikator zasobu.

W swoich skryptach interakcjonujesz z tymi grafami, ładując je na Animator tak jak tradycyjną animację. Aby uruchomić wewnętrzną logikę grafu, użyj AnimationTrack:SetParameter(), aby przekazać wartości w czasie rzeczywistym - takie jak prędkość ruchu lub stany logiczne - bezpośrednio do zmiennych grafu.


local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Twój opublikowany identyfikator grafu
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- Dynamiczne aktualizacje parametrów za pomocą RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)

Odniesienie do węzłów

Każdy węzeł grafu animacji działa jako bramka logiki lub źródło danych, które przetwarza dane animacji, zanim dotrą do riga postaci. Ta sekcja dostarcza technicznych informacji na temat funkcjonalnych bloków w Edytorze grafów animacji. Wszystkie węzły obecnie produkują posturę animacji.

Każda sekcja węzła zawiera:

  • Definicja – Podsumowanie celu węzła i jego roli w grafie.
  • Wejścia – Strumienie danych wchodzące do węzła. Wiele wejść oznaczone jest jako Wejście1, Wejście2, ..., WejścieN.
  • Właściwości wejściowe – Ustawienia związane bezpośrednio z konkretnym wejściem (wejście Bez ruchu przypisane do pozycji 0.5 na węźle Blend1D).
  • Dane zdarzeń – Zdarzenia emitowane lub konsumowane przez węzeł w celu wyzwolenia wewnętrznej logiki grafu lub zewnętrznych skryptów Luau. To zachowanie może ulec zmianie w trakcie rozwoju wersji beta.

Globalne zasady zdarzeń

Dla wszystkich węzłów i przejść stosują się poniższe zasady domyślne:

  • Zdarzenia propagują się w górę z węzła źródłowego przez graf. Każde zdarzenie niesie wagę reprezentującą wpływ jego źródła na finalną blendę. Jeśli waga wynosi zero w dowolnym momencie, zdarzenie jest nieme.
  • Węzły bez dostosowanej logiki zdarzeń przekazują wszystkie zdarzenia bez zmian; węzły, które mieszają lub wybierają spośród wejść, mogą skalować wagę lub blokować zdarzenia z wejść niepierwszorzędowych (zobacz sekcję Zdarzeń dla każdego węzła).
  • Zdarzenia znaczników, które docierają na szczyt grafu, mogą być obserwowane za pomocą AnimationTrack:GetMarkerReachedSignal().

Klip

Węzeł klipu

Odwołanie do zasobu AnimationClip. Służy jako liściasty węzeł w grafie, generując surowe dane animacji, które wprowadzane są do innych węzłów do mieszania, wyboru lub modyfikacji.

Wejścia
  • Brak
Właściwości
WłaściwośćTypOpis
KlipIdentyfikator zasobuZasób animacji do odtworzenia (np. rbxassetid://12345).
TrybOdtwarzaniaEnum.AnimationNodePlayMode

Definiuje zachowanie klipu, gdy osiągnie koniec swojej długości.

  • Pętla (domyślnie): Automatycznie restartuje się od początku, gdy klip zakończy odtwarzanie.
  • PingPong: Odtwarza od początku do końca, a następnie natychmiast wraca do początku.
  • Raz i przytrzymaj: Odtwarza raz i utrzymuje ostatnią posturę po zakończeniu.
  • Raz i zresetuj: Odtwarza raz i przeskakuje do początkowej postury po zakończeniu.
OdwróćBooleanKontroluje kierunek odtwarzania.
PrędkośćLiczbaMnożnik dla tempa odtwarzania. 0.0 wstrzymuje graf, 1.0 to normalna prędkość, a 2.0 to podwójna prędkość.
PrzytnijBooleanUmożliwia przycięcie długości klipu.
TrimStartLiczbaAbsolutny znacznik czasowy (w sekundach), od którego powinno rozpocząć się odtwarzanie.
TrimEndLiczbaAbsolutny znacznik czasowy (w sekundach), w którym powinno zakończyć się odtwarzanie.
Dane zdarzeń
  • Obsługa zdarzeń: Brak. Jest to liściasty węzeł bez dzieci.
  • Emisja zdarzeń: Odczytuje własne znaczniki osadzone w klipie animacji (np. "Krok", "Uderzenie broni") i emituje je jako nazwane zdarzenia w dokładnej klatce, w której się pojawiają. Jeśli klip jest przycięty, tylko znaczniki w zdefiniowanym zakresie [TrimStart, TrimEnd] (włącznie) są emitowane.

Wybierz

Węzeł Wybierz

Wybiera spośród dowolnej liczby wejść za pośrednictwem właściwości Wybór. Kiedy bieżący wybór się zmienia, uruchamia nowe przejście.

Wejścia
  • Wejście1...WejścieN
Właściwości
WłaściwośćTypOpis
WybórStringUnikalny identyfikator wejścia do wybrania, pasujący do nazwy połączenia wejścia (np. "Chodź").
Dane zdarzeń
  • Obsługa zdarzeń: Zdarzenia z aktualnie wybranego wejścia przechodzą bez zmian ich wagi.
  • Emisja zdarzeń: Przechodzi przez wszystkie zdarzenia tylko z aktualnie wybranego wejścia. W trakcie przejścia emisja zdarzeń podlega globalnym zasadom zdarzeń.

WybórPriorytetowy

Węzeł Wybór Priorytetowy

Ocena listy połączonych wejść od góry do dołu i odtwarzanie pierwszego, którego warunek oceniany jest na prawdziwy. Pozwala to na wybór animacji hierarchicznych na podstawie konkretnej logiki. Kiedy zmienia się aktualny wybór, uruchamia nowe przejście.

Wejścia
  • Wejście1...WejścieN
    • Wyzwalacz (Boolean): Warunek logiczny, który musi być prawdziwy, aby to wejście zostało aktywowane. W obecnych wersjach jest to podłączone do parametru logicznego.
    • Przerywalny (Enum.AnimationNodeInterruptible): Definiuje zasady, kiedy ta aktywna animacja może być przerwana przez wejście o wyższym priorytecie.
      • Zawsze (domyślnie): Wejście można przerwać w dowolnym momencie przez warunek o wyższym priorytecie.
      • Zakończono: Obecna animacja musi zakończyć swoje odtwarzanie, zanim wyższy priorytet może przejąć kontrolę.
      • Wyzwalacz: Wejście jest przerywalne tylko wtedy, gdy InterruptibleTrigger ustawione jest na prawdę.
    • WyzwalaczPrzerywalny (Boolean): Dostępne tylko, jeśli Przerywalny ustawione jest na Wyzwalacz. Wejście można przerwać, gdy to konkretne wyrażenie jest prawdziwe.
Właściwości
WłaściwośćTypOpis
DefaultInterruptibleEnum.AnimationNodeInterruptiblePodstawowa zasada przerwania stosowana do wszystkich wejść. Każde wejście może nadpisać to swoją własną właściwością wejściową Przerywalny.
DefaultInterruptibleTriggerBooleanPodstawowa wartość wyzwalacza używana, gdy rozwiązany tryb Przerywalny wejścia to Wyzwalacz. Każde wejście może nadpisać to swoją własną właściwością wejściową WyzwalaczPrzerywalny.
Dane zdarzeń
  • Obsługa zdarzeń: Zdarzenia z aktualnie wybranego wejścia przechodzą bez zmian ich wagi.
  • Emisja zdarzeń: Przechodzi przez wszystkie zdarzenia tylko z aktualnie wybranego wejścia. W trakcie przejścia emisja zdarzeń podlega globalnym zasadom zdarzeń.

Sekwencja

Węzeł Sekwencji

Aktywuje połączone wejścia w określonej sekwencyjnej kolejności, na podstawie zdefiniowanych warunków oczekiwania. Kiedy zmienia się aktualny wybór, uruchamia nowe przejście.

Wejścia
  • Wejście1...WejścieN
    • CzekajNa (Enum.AnimationNodeWaitFor): Określa warunek, który musi być spełniony, zanim sekwencja przejdzie do następnego wejścia.
      • Zakończono (domyślnie): Przechodzi do następnego wejścia, gdy obecne wejście kończy cykl. Zachowanie przejścia zależy od połączonego wejścia:
        • Prawa do odtworzenia klipu: Przechodzi, gdy klip kończy.
        • Powtarzający się klip: Przechodzi po zakończeniu jednego pełnego cyklu.
        • Sekwencja z nieskończonymi pętlami: Przechodzi po pełnym cyklu przez wszystkie wejścia.
        • Sekwencja z nieskończonymi pętlami: Przechodzi po zakończeniu wszystkich pętli.
      • Wyzwalaj: Aktywuje następne wejście, gdy niestandardowe wyrażenie logiczne ocenia się na prawdę.
    • WaitForTrigger (Boolean): Dostępne tylko, gdy WaitFor jest ustawione na Wyzwalacz.
Właściwości
WłaściwośćTypOpis
LiczbaPętliLiczbaLiczba cykli przez całą sekwencję (domyślnie 1). Wartość 0 oznacza nieskończoną pętlę. Gdy liczba zostanie osiągnięta, węzeł respektuje ustawienia pętli lub trzymania końcowego wejścia.
DomyślnaCzekajNaEnum.AnimationNodeWaitForPodstawowy warunek oczekiwania stosowany do wszystkich wejść. Każde wejście może nadpisać to swoją własną właściwością wejściową CzekajNa.
Dane zdarzeń
  • Obsługa zdarzeń: Zdarzenia z aktualnie aktywnego wejścia przechodzą bez zmian ich wagi.
  • Emisja zdarzeń: Przechodzi przez wszystkie zdarzenia tylko z aktualnie aktywnego wejścia w sekwencji. W trakcie przejścia emisja zdarzeń podlega globalnym zasadom zdarzeń.

SekwencjaLosowa

Węzeł Sekwencja Losowa

Wybiera i odtwarza jedno z podłączonych wejść losowo. Gdy obecna animacja kończy, węzeł losowo wybiera inne wejście do odtworzenia. Przypisz każdemu wejściu konkretną wagę, aby wpłynąć na prawdopodobieństwo jego wyboru. Gdy zmienia się aktualny wybór, uruchamia nowe przejście.

Wejścia
  • Wejście1...WejścieN
    • Waga (Liczba): Określa prawdopodobieństwo, że to wejście zostanie wybrane; wyższe wagi zwiększają szansę na wybór.
Właściwości
WłaściwośćTypOpis
LiczbaOdtwórzeńLiczbaLiczba wejść, przez które węzeł będzie odtwarzać przed zatrzymaniem. Po osiągnięciu węzeł respektuje ustawienia pętli lub trzymania końcowego wejścia. Domyślnie jest to 0 dla nieskończonego odtwarzania
ZiarnoLiczbaWartość używana do inicjacji Generatora Liczb Losowych (RNG), zapewniając, że sekwencja pozostaje spójna w różnych klientach. Domyślnie -1 dla losowego ziarna.
Dane zdarzeń
  • Obsługa zdarzeń: Zdarzenia z aktualnie aktywnego wejścia przechodzą bez zmian ich wagi.
  • Emisja zdarzeń: Przechodzi przez wszystkie zdarzenia tylko z aktualnie aktywnego wejścia w sekwencji. W trakcie przejścia emisja zdarzeń podlega globalnym zasadom zdarzeń.

Nad

Węzeł Nad

Nakłada posturę Nad na posturę Podstawową. Kiedy połączona z węzłem Mask, wykluczone stawy w poście Nad całkowicie ujawniają posturę Podstawową, tworząc efekt przezroczystego nakładania.

Wejścia
  • Podstawowa: Tło lub dolna warstwa, zazwyczaj pełna animacja ciała, taka jak lokomocja lub postawa spoczynkowa.
  • Nad: Warstwa pierwszorzędna, która ma być zastosowana ponad podstawą, na przykład gest ręki lub animacja używania narzędzia.
Właściwości
WłaściwośćTypOpis
WagaLiczbaWaga blendy używana do osłabienia postury Nad. Domyślnie 1.0 (pełna zastąpienie) i nieograniczona.
Dane zdarzeń
  • Obsługa zdarzeń:
    • Węzeł nasłuchuje na zdarzenia z obu wejść Podstawowego i Nad.
  • Emisja zdarzeń:
    • Zdarzenia podstawowe: Wszystkie zdarzenia z wejścia podstawowego są przekazywane bez zmian.
    • Zdarzenia nad: Zdarzenia z wejścia nad są skalowane przez właściwość Waga.
      • Przy wadze 0.5, zdarzenia Nad propagują się z połową wagi
      • Przy wadze 0 są nieme.

Dodaj

Węzeł Dodaj

Dodaje posturę Dodatnią do postury Podstawowej, osłabionej przez konkretną Wagę (nieograniczoną).

Wejścia
  • Podstawowa: Podstawowa postura animacji.
  • Dodatnia: Postura, która ma być nałożona na podstawę.
Właściwości
WłaściwośćTypOpis
WagaLiczbaOkreśla siłę nałożonej postury dodatniej na podstawę.
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na zdarzenia z obu wejść Podstawowego i Dodatniego.
  • Emisja zdarzeń: Wszystkie zdarzenia z obu wejść Podstawowego i Dodatniego są przekazywane bez zmian.

Odejmij

Węzeł Odejmij

Konwertuje animację w posturę dodatnią przez odjęcie względnej postury podstawowej od docelowej postury (ABA - B). Wynik jest osłabiony przez konkretną Wagę (nieograniczoną).

Wejścia
  • A: Docelowa postura animacji.
  • B: Względna postura podstawowa do odjęcia.
Właściwości
WłaściwośćTypOpis
WagaLiczbaOkreśla siłę efektu odejmowania zastosowanego do wyniku.
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na zdarzenia z obu Wejście A i Wejście B.
  • Emisja zdarzeń: Wszystkie zdarzenia z obu Wejścia A i Wejścia B są przekazywane bez zmian.

Blend1D

Węzeł Blend1D

Linearnie interpoluje między dwiema posturami animacji najbliższymi aktualnej pozycji wejścia na jednej osi.

Wejścia
  • Wejście1...WejścieN
    • Pozycja (Liczba): Konkretna współrzędna dla każdego kolejnego wejścia na osi blendy.
Właściwości
WłaściwośćTypOpis
PozycjaLiczbaAktualna aktywna wartość na osi blendy używana do próbkowania animacji. Jeśli Pozycja jest poza zakresem zdefiniowanych pozycji wejściowych, węzeł extrapoluje, używając dwóch najbliższych wejść.
SynchronizacjaFazEnum.AnimationNodePhaseSync

Konfiguruje, czy czasowe synchronizacje wejść dzieci powinny być synchronizowane.

  • Synchroniczny (domyślnie): Normalizowana synchronizacja. Węzeł oblicza "wirtualną długość" na podstawie ważonej średniej aktywnych wejść. Czas kroków każdego węzła wejściowego jest dostosowywany, aby wszystkie dzieci zbiegały się do tej samej fazy, utrzymując animacje o różnych długościach w synchronizacji.
  • Niesynchronizowany: Standardowe mieszanie, w którym klipy postępują niezależnie od swoich prędkości odtwarzania.
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na zdarzenia ze wszystkich aktualnie aktywnych węzłów dzieci.
  • Emisja zdarzeń: Tylko zdarzenia z najwyżej ważonego aktywnego wejścia propagują się, skalowane przez ich wagę blendy. Zdarzenia z dodatkowego wejścia są nieme.

Blend2D

Węzeł Blend2D

Miesza wiele postur animacji na podstawie dwóch parametrów wejściowych w ramach przestrzeni współrzędnych 2D. Uogólnia węzeł Blend1D, aby poradzić sobie z bardziej złożonymi scenariuszami, takimi jak mieszanie na podstawie zarówno kierunku ruchu, jak i prędkości jednocześnie.

Wejścia
  • Wejście1...WejścieN
    • X (Liczba): Współrzędna X dla każdego kolejnego wejścia.
    • Y (Liczba): Współrzędna Y dla każdego kolejnego wejścia.
Właściwości
WłaściwośćTypOpis
TrybWejściaEnum.AnimationNodeBlend2DInputMode

Definiuje system współrzędnych używany do ocenienia przestrzeni blendy:

  • Kartezjański (domyślnie): Używa standardowych współrzędnych siatki 2D. X i Y reprezentują aktualną pozycję w przestrzeni blendy.
  • Polar: Używa wartości kątowych i wielkości. X reprezentuje kierunek w radianach, podczas gdy Y reprezentuje wielkość lub siłę ruchu. Kierunek jest oceniany ciężej niż wielkość, więc wejścia w podobnych kątach, ale różnych wielkościach lepiej się mieszają niż wejścia w różnych kątach.
XLiczbaAktualna współrzędna X (Kartezjańska) lub kierunek w radianach (Polar).
YLiczbaAktualna współrzędna Y (Kartezjańska) lub wielkość (Polar).
SynchronizacjaFazEnum.AnimationNodePhaseSync

Konfiguruje, czy czasowe synchronizacje wejść dzieci powinny być synchronizowane.

  • Synchroniczny (domyślnie): Normalizowana synchronizacja. Węzeł oblicza "wirtualną długość" na podstawie ważonej średniej aktywnych wejść. Czas kroków każdego węzła wejściowego jest dostosowywany, aby wszystkie dzieci zbiegały się do tej samej fazy, utrzymując animacje o różnych długościach w synchronizacji.
  • Niesynchronizowany: Standardowe mieszanie, w którym klipy postępują niezależnie od swoich prędkości odtwarzania.
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na zdarzenia ze wszystkich aktualnie aktywnych węzłów dzieci.
  • Emisja zdarzeń: Tylko zdarzenia z najwyżej ważonego aktywnego wejścia propagują się, skalowane przez ich wagę blendy. Zdarzenia z dodatkowego wejścia są nieme.

Maska

Węzeł Maska

Aplikacje wcześniej zdefiniowanej maski do wejściowej postury. Maska jest definiowana przez wagę dla każdego obiektu (np. stawu) w hierarchii riga, co pozwala na precyzyjne kontrolowanie lub "piórkowanie" animacji.

Wejścia
  • Postura: Postura animacji, która ma być zamaskowana.
Właściwości
WłaściwośćTypOpis
MaskaObjectValue

Obiekt ObjectValue (utworzony jako bezpośrednia właściwość dziecka w definicji węzła Mask) definiuje wagi maski. Może działać na jeden z dwóch sposobów:

  • Bezpośrednio: Sam ObjectValue zawiera atrybuty mapujące nazwy obiektów riga do konkretnych wartości wag.
  • Przez referencję: ObjectValue odnosi się do innego obiektu Instance, który zawiera atrybuty mapujące. To pozwala na współdzielone maski w różnych węzłach w grafie.

Podczas tworzenia maski można wybrać schemat riga (HumanoidRigDescription lub Picker), aby uzupełnić hierarchię.

  • HumanoidRigDescription: Standaryzuje maskę dla postaci humanoidalnych.
  • Picker: Umożliwia wybór dowolnego konkretnego riga w przestrzeni roboczej do uzupełnienia hierarchii maski.
OdwróćBooleanKiedy prawda, stosuje wartości wag jako 1 - waga. Umożliwia to ponowne wykorzystanie maski odwrotnie bez tworzenia nowego zasobu.
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na wszystkie zdarzenia z wejścia Postura.
  • Emisja zdarzeń: Wszystkie zdarzenia z wejścia Postura są przekazywane bez zmian.

Prędkość

Węzeł Prędkość

Modyfikuje tempo odtwarzania nadchodzącej postury animacji.

Wejścia
  • Postura: Postura_animacji_ lub podgraf, której tempo odtwarzania ma być modyfikowane.
Właściwości
WłaściwośćTypOpis
PrędkośćLiczbaMnożnik zastosowany do zmiany czasu (dtdt). 0.0 wstrzymuje graf, 1.0 to normalna prędkość, a 2.0 to podwójna prędkość.
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na zdarzenia z wejścia Postura.
  • Emisja zdarzeń: Wszystkie zdarzenia z wejścia Postura są przekazywane bez zmian. Należy pamiętać, że podczas gdy wizualna prędkość odtwarzania się zmienia, czas emisji emitowanych zdarzeń (takich jak znaczniki) będzie odpowiednio skalować się wraz z zastosowaną prędkością odtwarzania.

GrafWyjściowy

Węzeł GrafWyjściowy

Reprezentuje ostateczną ocenioną posturę grafu. Ten węzeł jest automatycznie umieszczany we wszystkich nowych grafach w Edytorze grafów animacji. Jego obecność zapewnia, że graf jest zawsze ważny i konsekwentnie produkuje posturę animacji.

Wejścia
  • Postura: Ostateczne przetworzone dane animacji, które mają być zastosowane do riga.
Właściwości
  • Brak
Dane zdarzeń
  • Obsługa zdarzeń: Węzeł nasłuchuje na wszystkie zdarzenia przekazywane przez ostatnie połączone wejście.
  • Emisja zdarzeń: Ten węzeł działa jako punkt wyjścia dla procesu animacji i nie emituje sygnałów z powrotem do grafu.

Przejścia

Kilka węzłów w Grafie Animacji (takich jak Wybierz, Wybór Priorytetowy, Sekwencja i Sekwencja Losowa) zarządza tym, jak animacje mieszają się podczas przełączania między aktywnymi wejściami. Aby zapobiec redundantności w odniesieniu do węzłów, te zachowania są definiowane przez znormalizowane grupy właściwości przejść.

Domyślne przejście

Domyślne Przejście

Podstawowe zachowanie mieszania stosowane do węzła, gdy przełącza się na nowe aktywne wejście.

Nadzór nad przejściem

Nadzór nad Przejściem

Właściwości związane z danym wejściem, które nadrzędne przejście. Są one stosowane, gdy węzeł przechodzi do tego konkretnego wejścia.

Replikacja

Parametry grafów animacji są lokalne dla każdego AnimationTrack i nie są automatycznie replikowane. Może to się zmienić w przyszłych aktualizacjach, ale obecnie zalecanym podejściem jest użycie:

  • Klient → Serwer: RemoteEvent, aby przesyłać parametry z klienta posiadającego do serwera w stałym tempie.
  • Serwer → Inni Klienci: Atrybuty instancji, które automatycznie replikują do wszystkich klientów.

Postacie graczy

Skrypt klienta steruje postaciami graczy. Ponieważ tylko posiadający klient zna aktualny stan gry (wejście ruchu, stan humanoida itp.), parametry muszą przepływać od posiadającego klienta do serwera, a następnie do wszystkich innych klientów.

Ustawienia

W StarterCharacterScripts stwórz:

  • Skrypt LocalScript do animacji po stronie klienta i napędzania parametrów.
  • Script do replikacji po stronie serwera.
  • RemoteEvent do komunikacji klient-serwer.

Skrypt klienta

Posiadający klient steruje parametrami na podstawie zdarzeń związanych z grą i co jakiś czas wysyła je do serwera. Inne klienty odczytują zreplikowane atrybuty z skryptu serwera.


local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid
-- Załaduj graf animacji
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_GRAPH_ID" -- Zastąp swoim opublikowanym identyfikatorem grafu
local track = animator:LoadAnimation(animation)
track:Play()
local isLocalCharacter = Players:GetPlayerFromCharacter(character) == Players.LocalPlayer
if not isLocalCharacter then
-- Odczytaj zreplikowane parametry z skryptu serwera
local animateServer = script.Parent:WaitForChild("AnimateServer")
for attribute, value in animateServer:GetAttributes() do
track:SetParameter(attribute, value)
end
animateServer.AttributeChanged:Connect(function(attribute)
track:SetParameter(attribute, animateServer:GetAttribute(attribute))
end)
return
end
-- Lokalny gracz: napędzaj parametry w zależności od stanu gry
local params = {}
local function setParam(key, value)
track:SetParameter(key, value)
params[key] = value
end
-- Przykład: napędzaj parametry na podstawie stanu humanoida
humanoid.Running:Connect(function(speed)
setParam("Speed", speed)
setParam("State", if speed < 0.1 then "Spoczynek" else "Ruch")
end)
-- Prześlij parametry do serwera w stałym tempie
local replicateEvent = script.Parent:WaitForChild("ReplicateEvent")
local TICK_RATE = 1 / 20
local lastSendTime = 0
RunService.Stepped:Connect(function(gameTime)
if gameTime - lastSendTime > TICK_RATE then
lastSendTime = gameTime
replicateEvent:FireServer(params)
end
end)

Skrypt serwera

Otrzymuje parametry od posiadającego klienta, kieruje grafem animacji po stronie serwera i propaguje wartości jako atrybuty do replikacji do innych klientów.


local Players = game:GetService("Players")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid
-- Załaduj ten sam graf animacji na serwerze
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_GRAPH_ID" -- Ten sam identyfikator grafu co klient
animation.Parent = script
local track = animator:LoadAnimation(animation)
track:Play()
-- Odbieraj parametry od klienta posiadającego i replikuj przez atrybuty
local replicateEvent = script.Parent:WaitForChild("ReplicateEvent")
replicateEvent.OnServerEvent:Connect(function(player, params)
if Players:GetPlayerFromCharacter(character) ~= player then
return
end
for key, value in params do
track:SetParameter(key, value)
script:SetAttribute(key, value)
end
end)

NPC

Ponieważ serwer posiada animacje NPC, wymagana jest tylko replikacja serwer-klient. Kieruj grafem animacji na serwerze, zapisuj parametry jako atrybuty w skrypcie serwera i odczytuj je na klientach używając tego samego wzorca Instance.AttributeChanged, pokazując powyżej.

Opóźnienie

Inni klienci widzą animacje z małym opóźnieniem równym interwałowi ticków (do 50 ms przy 20 Hz) plus opóźnienie sieciowe. Możesz zmniejszyć interwał ticków, zwiększając częstotliwość (np. 1/30), kosztem wyższego ruchu sieciowego. 20 Hz to rozsądny domyślny ustawienia; miksowanie animacji jest na tyle wyrozumiałe, że małe opóźnienia są trudne do zauważenia.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.