Odtwarzanie animacji postaci jest ważną częścią tego, co sprawia, że awatary i postacie niegrywalne (NPC) są ekspresyjne, realistyczne i angażujące dla twojej publiczności. Oprócz zapewnienia immersyjnych wizualizacji, animacje postaci dostarczają graczom informacji zwrotnej z ich działań, wskazówek dotyczących poruszania się po otoczeniu oraz istotnych informacji o ich postaci i innych.
Korzystając z pliku .rbxl Hazardous Space Station jako odniesienia, ten samouczek pokazuje, jak odtwarzać animacje postaci przy użyciu dwóch różnych technik, w tym wskazówki dotyczące:
- Zamiany domyślnych identyfikatorów zasobów animacji postaci na własne niestandardowe animacje.
- Uruchamiania animacji w odpowiedzi na działania postaci w przestrzeni 3D.
Po ukończeniu tego samouczka będziesz miał umiejętności do dostosowywania animacji do szerokiej gamy sytuacji w grze.
Zmień domyślne animacje
Każda postać z domyślnym obiektem Humanoid, niezależnie od tego, czy jest to awatar kontrolowany przez gracza, czy postać niegrywalna (NPC), zawiera zestaw domyślnych animacji, które odtwarzają się, gdy postać wykonuje określone akcje w grze, takie jak bieganie, wspinanie się i skakanie. Roblox dostarcza te animacje od razu dla każdej gry bez dodatkowego wysiłku w skryptowaniu.
Jednak jeśli te domyślne animacje nie spełniają wymagań projektowych dla środowiska twojego świata, estetyki lub ogólnej narracji, możesz je zamienić na niestandardowe animacje, które będą miały zastosowanie do każdego gracza, który dołącza do twojej gry.
Aby to zademonstrować, w następnej sekcji nauczysz się, jak zamienić domyślną animację chodzenia na niestandardową animację cyklu chodzenia z Create Character Animations. Korzystając z tego samego procesu, możesz zamienić dowolną z domyślnych animacji na własne identyfikatory zasobów animacji.
Utwórz skrypt
Obiekt Humanoid każdej postaci zawiera obiekt podrzędny Animator, który przechowuje wszystkie domyślne animacje postaci. Aby ustawić dowolną z tych domyślnych animacji na nowe identyfikatory zasobów, musisz utworzyć skrypt w ServerScriptService, aby mógł odwoływać się do i nadpisywać domyślne wartości obiektu Animator, gdy tylko gracze załadują się do gry.
Aby utworzyć skrypt, który będzie odwoływał się do domyślnych identyfikatorów zasobów animacji:
W oknie Explorer dodaj nowy skrypt do ServerScriptService.
- Najedź na ServerScriptService i kliknij przycisk ⊕.
- Z menu kontekstowego wstaw Skrypt.
W nowym skrypcie wklej następujący kod:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Skrypt ResetDefaultAnimations zaczyna od uzyskania usługi Players, która zawiera wszystkie obiekty Player dla graczy, gdy łączą się z serwerem. Gdy każda z postaci gracza ładuje się do gry, funkcja onCharacterAdded czeka, aż wykryje obiekty Humanoid i Animator postaci.
Gdy po raz pierwszy wykryje obiekt Animator, skrypt drukuje "Animator found!", aby dać ci znać, że skrypt działa zgodnie z zamierzeniem.
Zastąp identyfikator zasobu
Teraz, gdy wiesz, że twój skrypt jest w stanie wykryć, kiedy gracze ładują się i łączą z serwerem, możesz zmodyfikować swój skrypt, aby konkretnie odwoływał się do identyfikatorów animacji, które chcesz zamienić na własne niestandardowe animacje.
Poniższa tabela zawiera wszystkie domyślne animacje postaci, które możesz wywołać i zastąpić w obiekcie Animator. Zauważ, że Idle ma dwie warianty, które możesz zaprogramować, aby odtwarzały się rzadziej lub częściej.
| Akcja postaci | Odwołanie do skryptu animacji |
| Bieganie | animateScript.run.RunAnim.AnimationId |
| Chodzenie | animateScript.walk.WalkAnim.AnimationId |
| Skok | animateScript.jump.JumpAnim.AnimationId |
| Bezczynność | animateScript.idle.Animation1.AnimationId |
| Upadek | animateScript.fall.FallAnim.AnimationId |
| Pływanie | animateScript.swim.Swim.AnimationId |
| Pływanie (Bezczynność) | animateScript.swimidle.SwimIdle.AnimationId |
| Wspinanie się | animateScript.climb.ClimbAnim.AnimationId |
Aby zastąpić domyślny identyfikator zasobu animacji chodzenia:
Wywołaj domyślną referencję skryptu animacji chodzenia, a następnie zastąp identyfikator zasobu swoim własnym identyfikatorem zasobu animacji. Na przykład, poniższy fragment kodu odnosi się do animacji cyklu chodzenia z Create Character Animations.
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")local animateScript = character:WaitForChild("Animate")animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Przetestuj swoją grę, aby upewnić się, że twoja niestandardowa animacja chodzenia zastępuje domyślną animację.
Wybierz Test z rozwijanego menu i kliknij przycisk Play po jego prawej stronie, aby rozpocząć testowanie.

Chodź po stacji kosmicznej ze swoim awatarem.
Uruchamianie animacji
Podczas gdy poprzednia technika koncentruje się na zamianie domyślnych animacji, które automatycznie odtwarzają się, gdy postać wykonuje określone akcje w grze, możesz programowo uruchamiać animacje w odpowiedzi na dowolną akcję postaci w przestrzeni 3D, taką jak podnoszenie przedmiotu lub otrzymywanie obrażeń od zagrożenia.
Ta metoda odtwarzania animacji jest przydatna, ponieważ zapewnia graczom natychmiastową informację zwrotną na temat tego, jak powinni wchodzić w interakcje z obiektami w swoim otoczeniu. Aby to zademonstrować, w następnej sekcji pokażemy, jak uruchomić animację, gdy postacie są zbyt blisko niebezpiecznych wycieków pary, jako sposób na subtelne nauczenie graczy unikania zbyt bliskiego podchodzenia do ścian.
Wstaw objętość
Jednym z najczęstszych sposobów uruchamiania unikalnych zachowań w grze jest użycie objętości, czyli niewidocznych obszarów w przestrzeni 3D, aby wykryć, kiedy postacie lub obiekty wchodzą w interakcję z określonymi obszarami środowiska. Gdy połączysz objętości z skryptami, możesz użyć ich informacji zwrotnej o kolizji do programowego uruchamiania akcji, takich jak zmniejszenie zdrowia gracza lub odtwarzanie animacji.

Dodając objętość do swojej gry, ważne jest, aby skalować ją tak, aby obejmowała tylko przestrzeń, która ma uruchomić twoją animację. Jeśli zrobisz swoją objętość zbyt małą, gracze mogą nigdy nie zderzyć się z obszarem, aby odtworzyć animację; odwrotnie, jeśli zrobisz swoją objętość zbyt dużą, animacja odtworzy się, zanim gracze dotrą do przedmiotu lub obszaru zainteresowania, i mogą nie zrozumieć, co zrobili, aby uruchomić animację.
Aby wstawić objętość wokół wycieku pary, która uruchomi animację:
- W oknie Explorer dodaj nową część blokową.
- Ustaw i zmień rozmiar bloku, aż pokryje obszar, który chcesz uruchomić animację.
- W oknie Properties,
Ustaw Name na AnimationDetector.
Ustaw Transparency na 1, aby uczynić blok niewidocznym.

Utwórz skrypt
Teraz, gdy masz zdefiniowany obszar do uruchamiania animacji, czas utworzyć skrypt, który programowo wykrywa, kiedy gracze zderzają się z objętością. Możesz następnie nasłuchiwać zdarzeń kolizji, aby uruchomić dowolną animację, która ma sens dla twoich wymagań dotyczących rozgrywki.
Na przykład, ta technika animacji używa LocalScript zamiast Script, aby zapewnić graczom natychmiastową informację zwrotną, gdy zderzają się z objętością. Gdyby serwer miał nasłuchiwać kolizji i odtwarzać animację, mogłoby wystąpić opóźnienie między dotknięciem objętości przez gracza na ich kliencie a zobaczeniem animacji, ponieważ czas replikacji z serwera do klienta.
Aby utworzyć lokalny skrypt, który wykryje, kiedy lokalna postać gracza dotyka objętości:
W oknie Explorer dodaj nowy skrypt do StarterCharacterScripts. To umiejscowienie zapewnia, że skrypt i jego dzieci klonują się do postaci gracza przy dołączeniu i gdy odradzają się w grze.
- Rozwiń StarterPlayer, a następnie najedź na jego dziecko StarterCharacterScripts i kliknij przycisk ⊕.
- Z menu kontekstowego wstaw LocalScript i zmień jego nazwę na TriggerAnimation.
W nowym skrypcie wklej następujący kod:
local Workspace = game:GetService("Workspace")local animation = script:WaitForChild("Animation")local humanoid = script.Parent:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")local animationTrack = animator:LoadAnimation(animation)local animationDetector = Workspace:WaitForChild("AnimationDetector")local debounce = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
Skrypt TriggerAnimation zaczyna od uzyskania usługi Workspace, która zawiera wszystkie obiekty istniejące w świecie 3D. To ważne, ponieważ skrypt musi odwołać się do obiektu Part, który działa jako twoja objętość.
Dla każdej postaci gracza, która ładuje się lub odradza w grze, skrypt czeka na:
- Jego podrzędny obiekt Animation, który dodasz w następnej sekcji.
- Obiekt objętości w przestrzeni roboczej o nazwie AnimationDetector.
Gdy cokolwiek zderza się z objętością, funkcja obsługi zdarzenia Touched uzyskuje pierwszego przodka, który jest Model, co powinno być postacią, jeśli BasePart, która zderzyła się z objętością, jest potomkiem modelu postaci. Jeśli tak jest, funkcja sprawdza, czy Model to postać lokalnego gracza. Jeśli tak, funkcja:
- Ustawia debounce na true.
- Odtwarza i czeka na zakończenie animacji.
- Ustawia debounce z powrotem na false.
Ustawienie debounce z false na true, a następnie z powrotem na false po zakończeniu odtwarzania animacji to wzór debounce, który zapobiega wielokrotnemu uruchamianiu animacji, gdy gracze ciągle zderzają się z objętością. Aby uzyskać więcej informacji na temat tego wzoru debounce, zobacz Wykrywanie kolizji.
Dodaj animację
Jeśli teraz przetestujesz swoją grę, twój skrypt TriggerAnimation nadal nie będzie w stanie odtworzyć animacji w odpowiedzi na kolizję lokalnego gracza z objętością. Dzieje się tak, ponieważ czeka na podrzędny obiekt Animation z identyfikatorem zasobu animacji, do którego może się odwołać, a ten obiekt Animation obecnie nie istnieje.
Aby dodać animację, do której lokalny skrypt będzie mógł się odwołać, gdy gracze zderzają się z objętością:
W oknie Explorer dodaj nową animację do TriggerAnimation.
- Najedź na TriggerAnimation i kliknij przycisk ⊕.
- Z menu kontekstowego wstaw Animację.
Wybierz nowy obiekt animacji, a następnie w oknie Properties ustaw AnimationID na identyfikator zasobu animacji, który chcesz uruchomić, gdy gracze dotkną objętości. Na przykład, próbka Hazardous Space Station odnosi się do rbxassetid://3716468774, aby odtworzyć animację postaci upadającej do tyłu.
Przetestuj swoją grę, aby upewnić się, że twoja animacja odtwarza się, gdy gracze są blisko pierwszego wycieku pary.