Animacje postaci do gry są ważną częścią tego, co sprawia, że awatary i niemożliwe postacie (NPC) są ekspresyjne, realistyczne i angażujące dla widowni. Oprócz dostarczania immersyjnych wizualizacji, animacje postaci dają graczom wzgląd na ich działania, kierunki środowiskoi ważne informacje o ich postaci i innych.
Używając Hazardous Space Station.rbxl pliku jako referencji, ten samouczek pokazuje, jak grać animacje postaci używając dwóch różnych technik, w tym instrukcje na temat:
- Wymiana standardowych animacji postaci z własnymi animacjami niestandardowymi.
- Wyzwywanie animacji w odpowiedzi na działania postaci w przestrzeni 3D.
Po ukończeniu tego samouczka będziesz posiadać umiejętności do dostosowywania animacji dla szerokiej gamy sytuacji gry.
Zmiana animacji domyślnych
Każdy postać z domyślnym obiektem Humanoid, czy to gracz kontrolowany awatar lub nieskategoryzowany postać (NPC), włącza zestaw animacji domyślnych, które odtwarzane są za każdym razem, gdy postać wykonuje określone akcje w grze, takie jak bieganie, wspinaczka i skaczanie. Roblox dostarcza te anim
Jeśli jednak te domyślne animacje nie spełniają wymagań projektowych dla środowisko, estetyki lub ogólnej fabuły twojego świata, możesz je wymienić na niestandardowe animacje, które stosują się do każdego gracza, który dołącza do twojego doświadczenia. Ta technika projektowania gry może pomóc twoim postaciom i doświadczeniom poczuć bardziej osobisty, angażujący i imersyjne.
Aby pokazać, następny sekcja nauczy cię, jak wymienić animację spaceru domyślną z animacją spaceru niestandardowego z tworzenia animacji postaci . Używając tego samego procesu, możesz wymienić dowolną z animacji domyślnych z własnymi animacjami postaci.
Utwórz Skrypt
Każdy postać Humanoid obiekt zawiera dziecko Animator obiekt, który przechowuje wszystkie domyślne animacje postaci. Aby ustawić którekolwiek z tych domyślnych animacji na nowych przypisanych ID, musisz utworzyć skrypt w
Aby stworzyć skrypt, który będzie odnosił się do domyślnych zasobów animacji:
W oknie Explorer, dodaj nowy skrypt do ServerScriptService.
- Przytrzymaj ServerScriptService i kliknij przycisk ⊕.
- Z menu kontekstowego wpisz 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!")local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Skrypt ResetDefaultAnimations zaczyna się od uzyskania usługi Players, która zawiera wszystkie Player obiekty dla graczy, gdy się połączą z serwerem. Gdy każdy z charakterów gracza załadow
Gdy wykrywa po raz pierwszy obiekt Animator , skrypt wtedy drukuje "Animator znaleziony!" aby poinformować, że skrypt działa tak, jak zamiast.
Zastąp AssetID
Teraz, gdy wiesz, że twój skrypt jest w stanie wykryć, gdy gracze ładową i połączą się z serwerem, możesz zmodyfikować swój skrypt, aby w szczególności odnieść się do identyfikatora animacji, którą chcesz wymienić z własnymi animacjami niestandardowymi.
Poniższy tabela zawiera wszystkie domyślne animacje postaci, które możesz wezwieć i zastąpić w obiekcie Animator. Uwaga, że Idle ma dwie wersje, które możesz zaprogramować, aby grać częściej lub rzadziej.
Akcja postaci | Odnośnik animacji skryptu |
Biegnij | animateScript.run.RunAnim.AnimationId |
Chodzenie | animateScript.walk.WalkAnim.AnimationId |
Skoczka | animateScript.jump.JumpAnim.AnimationId |
Bezczynność | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Upadek | animateScript.fall.FallAnim.AnimationId |
Pływanie | animateScript.swim.Swim.AnimationId |
Pływanie (nieaktywne) | animateScript.swimidle.SwimIdle.AnimationId |
Wejdź do góry | animateScript.climb.ClimbAnim.AnimationId |
Aby zastąpić domyślną animację chodzenia:
Wezwij domyślną animację wstępnej animacji, a następnie zastąp identyfikator pracy własnym niestandardowym animacją własności. Na przykład poniższy kod przywołuje animację cyklu bicia z Tworzenie animacji postaci.
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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Sprawdź swoją grę, aby upewnić się, że twoja niestandardowa animacja chodzenia przeważa nad animacją domyślną.
W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.
Chodź wokół stacji kosmicznej z swoim awatarem.
Wyzwij animacje
Podczas gdy poprzednia technika koncentruje się na wymianie domyślnych animacji, które automatycznie odtwarzają się, gdy postać wykonuje określone w doświadczeniu działania, możesz programowo zainicjować animacje do odtwarzania w odpowiedzi na dowolną akcję postaci w przestrzeni 3D, taką jak podniesienie przedmiotu lub otrzymanie obrażeń od niebezpieczeństwa.
Ten sposób gry animacji jest użyteczny, ponieważ daje graczom natychmiastową informację o tym, jak powinni interagować z obiektami w swoim środowisko. Aby pokazać, następny sekcja pokazuje, jak aktywować animację, gdy gracze są zbyt blisko niebezpiecznych wycieków pary wodnej jako sposób subtelnego nauczania graczy, aby uniknąć chodzenia zbyt blisko ścian.
Utwórz objętość
Jednym z najczęstszych sposobów na uruchomienie unikalnego zachowania gry jest użycie głośników lub niewidocznych obszarów w przestrzeni 3D, aby wykryć, kiedy postacie lub obiekty interagują ze specjalnymi obszarami środowisko. Gdy połączysz głośniki z skryptami, możesz użyć ich sygnałów kolizji, takich jak zmniejszenie zdrowia gracza lub odtwarzanie animacja
Podczas dodawania do swojego doświadczenia warto skalować go, aby pokrył tylko przestrzeń, którą chcesz zesynchronizować z animacją. Jeśli uczynisz swoją wielkość zbyt małą, gracze mogą nigdy nie uderzyć z obszarem, w którym chcesz uruchomić animację; natomiast, jeśli uczynisz swoją wielkość zbyt dużą, animacja zostanie uruchomiona przed tymi
Aby wstawić głośnik wokół wycieku pary, który spowoduje animacja:
- W oknie Explorer dodaj nową część bloku.
- Pozycjonuj i zmniejsz blok, aż pokryje obszar, który chcesz uruchomić animacja.
- W Oknie Proprietści ,
Ustaw Nazwę na AnimationDetector .
Ustaw Przezroczystość na 1, aby renderować blok niewidzialny.
Utwórz Skrypt
Teraz, gdy masz zdefiniowaną region dla uruchomienia twojej animacja, nadszedł czas na stworzenie skryptu, który programowo wykrywa, gdy gracze kolidują z głośnikiem. Następnie możesz słuchać wydarzeń kolidencji, aby uruchomić dowolną animację, która ma sens dla twoich wymagań w grze.
Na przykład, ta technika animacji używa LocalScript zamiast Script , aby zapewnić graczom natychmiastową opinię, gdy kolidują z głośnikiem. Jeśli serwer słuchałby do kolizji i odtwarzałby animacja, może nastąpić opóźnienie między graczem dotykającym głośnika na swoim kliente i widzącym animację grają
Aby stworzyć lokalny skrypt, który wykryje, gdy lokalny gracz dotka głośnika:
W oknie Explorer , dodaj nowy skrypt do StarterCharacterScripts . Ta lokalizacja gwarantuje, że skrypt i jego dzieci kopiują się w graczu na dołączenie i gdy powracają do doświadczenia.
- Rozwiń StarterPlayer , a następnie kliknij jego dziecko StarterCharacterScripts i kliknij przycisk ⊕.
- Z menu kontekstowego wpisz LokalnySkrypt i zmień jego nazwę 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 się od uzyskania usługi Workspace, która zawiera wszystkie obiekty, które istnieją w świecie 3D. Jest to ważne, ponieważ skrypt musi odnieść się do obiektu Part, który działa jako twój głośnik.
Dla każdego postaci gracza, który ładowany lub odchodzi z powrotem do doświadczenia, skrypt czeka na:
- Jego dziecko Animation obiekt, który dodasz w następnym sekcji.
- Przedmiot Volume w przestrzeni roboczej nazywającym się AnimationDetector .
Gdy cokolwiek koliduje z volume, funkcja Touched wskaźnika zdarzeń otrzymuje pierwszy przodkowy, który jest Model, co powinno być znakiem, jeśli BasePart zderzy się z volume. Jeśli jest, funkcja wt
- Ustawia odwrócenie do true .
- Gra i czeka na kończyćanimacji.
- Ustawia odwrócenie do false .
Ustawienie odwrócenia od false do true aby code grać ponownie po zakończeniu animacji jest wzorem debounce, który zapobiega animacji prawie natychmiastowego uruchomienia animacji, gdy gracze nieustannie kolidują z głośnikiem. Aby uzyskać więcej informacji o tym wzorcu debounce, zobacz 4> Wykrywanie kolidji4>.
Dodaj Animację
Jeśli zagrałbyś swoją doświadczenie teraz, twoje TriggerAnimation skryptu nadal nie będzie w stanie odtwarzyć animacji w odpowiedzi na lokalną kolizję gracza. To jest, ponieważ czeka na dziecko Animation z zasobem animacji, który może zeszyfrować, i że ten obiekt Animation nie istnieje obecnie.
Aby dodać animację dla lokalnego skryptu do odniesienia, gdy gracze uderzają z głośnikiem:
W oknie Explorer , dodaj nową animację do TriggerAnimation .
- Przytrzymaj Animacja spustoszenia i kliknij przycisk ⊕.
- Z menu kontekstowego wpisz Animację .
Wybierz nowy obiekt animacji, a następnie w oknie Właściwości ustaw AnimationID na animację asetID, którą chcesz uruchomić, gdy gracze dotykają głośnika. Na przykład, przykład Hazardous Space Station odnosi się do 2> rbxassetid://37164687742> , aby odt
Sprawdź swoją animację, aby upewnić się, że gra się ładuje, gdy gracze są blisko pierwszej nieszczelności.