Odtwarzanie animacji postaci jest istotną 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, jak poruszać się po środowisku oraz istotnych informacji na temat ich postaci i innych.
Używając pliku Hazardous Space Station .rbxl jako odniesienia, ten samouczek pokazuje, jak odtwarzać animacje postaci przy użyciu dwóch różnych technik, w tym wskazówki dotyczące:
- Wymiany domyślnych identyfikatorów zasobów animacji postaci na własne animacje.
- Uruchamiania animacji w odpowiedzi na akcje postaci w 3D.
Po ukończeniu tego samouczka będziesz miał umiejętności, aby dostosowywać animacje do różnorodnych sytuacji w grze.
Zmień domyślne animacje
Każda postać z domyślnym obiektem Humanoid, czy to kontrolowany przez gracza awatar, czy postać niegrywalna (NPC), zawiera zestaw domyślnych animacji, które odtwarzają się zawsze, gdy postać wykonuje określone akcje w doświadczeniu, takie jak bieganie, wspinanie się i skakanie. Roblox dostarcza te animacje z pudełka dla każdego doświadczenia bez dodatkowego kodowania.
Jednakże, jeśli te domyślne animacje nie spełniają wymagań projektowych dla środowiska Twojego świata, estetyki lub ogólnej narracji, możesz je wymienić na własne animacje, które będą miały zastosowanie dla każdego gracza, który dołączy do Twojego doświadczenia.
Aby to zilustrować, następna sekcja uczy, jak zaktualizować domyślną animację chodzenia na własną animację cyklu chodzenia z Create Character Animations. Korzystając z tego samego procesu, możesz wymienić każdą z domyślnych animacji na swoje własne identyfikatory zasobów animacji.
Utwórz skrypt
Każdy obiekt Humanoid postaci zawiera obiekt podrzędny Animator, który przechowuje wszystkie domyślne animacje postaci. Aby ustawić dowolne z tych domyślnych animacji na nowe identyfikatory zasobów, musisz utworzyć skrypt w ServerScriptService, aby mógł odnosić się do i nadpisywać domyślne wartości obiektu Animator, gdy tylko gracze dołączą do doświadczenia.
Aby utworzyć skrypt, który będzie odnosił 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 Script.
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żdy z postaci graczy ładuje się do doświadczenia, 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 może wykrywać, kiedy gracze wchodzą i łączą się z serwerem, możesz zmodyfikować swój skrypt, aby konkretnie odnosił się do identyfikatorów animacji, które chcesz wymienić na swoje własne 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 programować, aby odtwarzały się częściej lub rzadziej.
| Akcja postaci | Odniesienie do skryptu animacji |
| Bieg | animateScript.run.RunAnim.AnimationId |
| Chodzenie | animateScript.walk.WalkAnim.AnimationId |
| Skok | animateScript.jump.JumpAnim.AnimationId |
| Bezczynność | animateScript.idle.Animation1.AnimationId |
| Spadanie | animateScript.fall.FallAnim.AnimationId |
| Pływanie | animateScript.swim.Swim.AnimationId |
| Pływanie (Bezczynność) | animateScript.swimidle.SwimIdle.AnimationId |
| Wspinaczka | animateScript.climb.ClimbAnim.AnimationId |
Aby zastąpić identyfikator zasobu domyślnej animacji chodzenia:
Wywołaj odniesienie do domyślnego skryptu animacji chodzenia, a następnie zastąp identyfikator zasobu swoim własnym identyfikatorem zasobu animacji. Na przykład, poniższy przykład 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 swoje doświadczenie, aby upewnić się, że Twoja własna animacja chodzenia zastępuje domyślną animację.
Wybierz Test z menu rozwijanego i kliknij przycisk Play po prawej stronie, aby rozpocząć testowanie.

Chodź po stacji kosmicznej z Twoim awatarem.
Uruchamiaj animacje
Podczas gdy poprzednia technika koncentruje się na wymianie domyślnych animacji, które odtwarzają się automatycznie, gdy postać wykonuje określone akcje w doświadczeniu, możesz programowo uruchamiać animacje w odpowiedzi na jakiekolwiek działanie postaci w przestrzeni 3D, takie 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 środowisku. Aby to zilustrować, następna sekcja pokazuje, jak uruchomić animację, gdy postacie znajdują się zbyt blisko niebezpiecznych wycieków pary, aby subtelnie nauczyć graczy, aby unikali zbliżania się zbyt blisko do ścian.
Wstaw objętość
Jednym z najczęstszych sposobów uruchamiania unikalnych zachowań w grze jest użycie objętości, czyli niewidzialnych obszarów w przestrzeni 3D, do wykrywania, kiedy postacie lub obiekty wchodzą w interakcję z określonymi obszarami środowiska. Kiedy połączysz objętości ze skryptami, możesz używać ich informacji zwrotnej o kolizjach do programowego uruchamiania działań, takich jak zmniejszanie zdrowia gracza lub odtwarzanie animacji.

Podczas dodawania objętości do swojego doświadczenia ważne jest, aby dostosować jej rozmiar, aby obejmowała tylko przestrzeń, która ma wywoływać Twoją animację. Jeśli stworzysz objętość zbyt małą, gracze mogą nigdy nie kolidować z obszarem, aby odtworzyć animację; przeciwnie, jeśli stworzysz objętość zbyt dużą, animacja będzie się odtwarzać, zanim gracze dotrą do przedmiotu lub interesującego obszaru, i mogą nie zrozumieć, co zrobili, aby wywołać animację.
Aby wstawić objętość wokół wycieku pary, która uruchomi animację:
- W oknie Explorer, dodaj nową część bloku.
- Ustaw i zmień rozmiar bloku, aż pokryje obszar, który chcesz wywołać w swojej animacji.
- W oknie Properties,
Ustaw Name na AnimationDetector.
Ustaw Transparency na 1, aby sprawić, że blok był niewidoczny.

Utwórz skrypt
Teraz, gdy masz zdefiniowany obszar do wywoływania animacji, czas stworzyć skrypt, który programowo wykryje, kiedy gracze zderzą się z objętością. Następnie możesz nasłuchiwać zdarzeń kolizji, aby uruchomić dowolną animację, która ma sens dla wymagań Twojej gry.
Na przykład, ta technika animacyjna wykorzystuje LocalScript zamiast Script, aby zapewnić graczom natychmiastową informację zwrotną, gdy kolidują z objętością. Gdyby serwer miał nasłuchiwać kolizji i odtwarzać animację, mogłoby występować opóźnienie między dotknięciem objętości przez gracza na swoim kliencie a odtworzeniem animacji z powodu czasu replikacji z serwera do klienta.
Aby utworzyć lokalny skrypt, który wykryje, kiedy postać lokalnego gracza dotknie objętości:
W oknie Explorer, dodaj nowy skrypt do StarterCharacterScripts. Takie umiejscowienie zapewnia, że skrypt i jego dzieci będą klonowane do postaci gracza po dołączeniu i podczas ich respawnowania z powrotem do doświadczenia.
- Rozwiń StarterPlayer, 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. Jest to ważne, ponieważ skrypt musi odnosić się do obiektu Part, który działa jako twoja objętość.
Dla każdej postaci gracza, która ładuje się lub respawnuje z powrotem do doświadczenia, skrypt czeka na:
- Jej podrodzaj Animation, który dodasz w następnej sekcji.
- Obiekt objętości w przestrzeni roboczej o nazwie AnimationDetector.
Gdy cokolwiek zderzy się z objętością, funkcja obsługująca zdarzenie Touched uzyskuje pierwszego przodka, który jest Model, co powinno być postacią, jeśli BasePart, który zderzył się z objętością, jest potomkiem modelu postaci. Jeśli tak, funkcja sprawdza następnie, czy Model jest lokalną postacią gracza. Jeśli tak, to funkcja:
- Ustala debouncing na true.
- Odtwarza animację i czeka na jej zakończenie.
- Ponownie ustawia debouncing na false.
Ustawienie debouncing z false na true, a następnie z powrotem na false po zakończeniu odtwarzania animacji stanowi wzór debouncing, który zapobiega wielokrotnemu wywoływaniu animacji, gdy gracze ciągle zderzają się z objętością. Aby uzyskać więcej informacji na temat tego wzoru debouncing, zobacz Wykrywanie kolizji.
Dodaj animację
Jeśli w tej chwili przetestujesz swoje doświadczenie, twój skrypt TriggerAnimation wciąż nie będzie mógł odtworzyć animacji w odpowiedzi na kolizję lokalnego gracza z objętością. Dzieje się tak, ponieważ czeka na podrodzaj Animation, który ma identyfikator zasobu animacji, do którego może się odnosić, a ten podrodzaj Animation obecnie nie istnieje.
Aby dodać animację do odniesienia lokalnego skryptu, gdy gracze zderzą się z objętością:
W oknie Explorer, dodaj nową animację do TriggerAnimation.
- Najedź na TriggerAnimation i kliknij przycisk ⊕.
- Z menu kontekstowego wstaw Animation.
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 swoje doświadczenie, aby upewnić się, że Twoja animacja odtwarza się, gdy gracze są blisko pierwszego wycieku pary.