Odtwarzaj animacje postaci

*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.

Granie animacji postaci jest ważną częścią tego, co czyni awatary i niedostępne postacie (NPC) ekspresyjnymi, realistycznymi i angażującymi dla twojej publiczności.Oprócz dostarczania wciągających wizualizacji animacje postaci zapewniają graczom zwroty z ich działań, wskazówki dotyczące sposobu nawigowania po środowisku i ważne informacje o ich postaci i innych.

Używając pliku niebezpiecznej stacji kosmicznej.rbxl jako odniesienia, ten samouczek pokazuje, jak grać animacje postaci za pomocą dwóch różnych technik, w tym wskazówek na temat:

  • Wymiana domyślnych animacji postaci z własnymi niestandardowymi animacjami.
  • Wyzwalanie animacji w odpowiedzi na działania postaci w przestrzeni 3D.

Po zakończeniu tego samouczka będziesz miał umiejętności, aby dostosować animacje do szerokiej gamy sytuacji w grze.

Zmień domyślne animacje

Każda postać z domyślnym obiektem Humanoid , czy to awatar kontrolowany przez gracza, czy nie-graczową postać (NPC), zawiera zestaw domyślnych animacji , które odtwarzają się za każdym razem, gdy postać wykonuje określone działania doświadczenia, takie jak bieganie, wspinanie się i skakanie.Roblox dostarcza te animacje out-of-the-box dla każdego doświadczenia bez żadnego dodatkowego wysiłku programistycznego.

Domyślna animacja upadku
>

Domyślna animacja pływania
>

Domyślna animacja wspinania się
>

Jeśli jednak te domyślne animacje nie spełniają wymogów projektowych dla środowiska, estetyki lub ogólnej narracji twojego świata, możesz je zamienić na niestandardowe animacje, które odpowiadają każdemu graczowi, który dołącza do twojego doświadczenia.Ta technika projektowania gry może pomóc twoim postaciom i doświadczeniom poczuć się bardziej osobistymi, angażującymi i wciągającymi.

Aby pokazać, następująca sekcja nauczy Cię, jak zamienić domyślną animację chodzenia za pomocą niestandardowej animacji cyklu chodzenia z tworzenia animacji postaci.Używając tego samego procesu, możesz zamienić dowolną domyślną animację za pomocą własnych ID animacji.

Domyślna animacja chodu
>

Niestandardowa animacja chodu

Twórz skrypt

Obiekt każdej postaci Humanoid zawiera dziecko Animator obiekt, który przechowuje wszystkie domyślne animacje postaci.Aby ustawić którąkolwiek z tych domyślnych animacji do nowych ID zasobów, musisz stworzyć skrypt w Class.ServiceScriptService, aby mógł odwoływać i przechowywać domyślne wartości obiektu Animator tak szybko, jak tylko gracze załadują się do doświadczenia.

Aby utworzyć skrypt, który odniesie się do domyślnych animowanych ID zasobów:

  1. W oknie Eksploratora dodaj nowy skrypt do ServerScriptService .

    1. Przejdź nad Serwerową usługę skryptową i kliknij przycisk ⊕.
    2. Z menu kontekstowego wstaw Skrypt .
  2. 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!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Skrypt ResetDefaultAnimations rozpoczyna się od uzyskania usługi Players, która zawiera wszystkie obiekty Player dla graczy, gdy łączą się z serwerem.Kiedy każda z postaci gracza zostanie wczytana do doświadczenia, funkcja onCharacterAdded czeka, aż wykryje obiekty Humanoid i Animator gracza.

Kiedy po raz pierwszy wykrywa obiekt Animator, skrypt drukuje następnie „Animator znaleziony!”, aby poinformować Cię, że skrypt działa zgodnie z przeznaczeniem.

Zastąpij assetID

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 odwoływać się konkretnie do animacji id(ów), które chcesz zamienić za własne niestandardowe animacje.

Poniższa tabela zawiera wszystkie domyślne animacje postaci, które możesz wezwać i zastąpić w obiekcie Animator.Zauważ, że Leniwy ma dwie odmiany, które możesz zaprogramować, aby grać częściej lub rzadziej.

Akcja postaciAnimuj odniesienie skryptu
Wykonaj animateScript.run.RunAnim.AnimationId
Chód animateScript.walk.WalkAnim.AnimationId
Skok animateScript.jump.JumpAnim.AnimationId
Nieaktywny

animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId

Upadek animateScript.fall.FallAnim.AnimationId
Pływaj

animateScript.swim.Swim.AnimationId

Pływaj (leniwy)

animateScript.swimidle.SwimIdle.AnimationId

Wspinaj animateScript.climb.ClimbAnim.AnimationId

Aby zastąpić domyślną animację chodzenia assetID:

  1. Wezwij domyślną animację skryptu, następnie zastąp adres ID zasobu własną niestandardową animacją ID.Na przykład następujący przykład kodu odnosi się do animacji cyklu chodu z tworzenia 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"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Przetestuj swoje doświadczenie, aby upewnić się, że niestandardowa animacja chodzenia zastąpi domyślną animację.

    1. Na pasku narzędzi kliknij przycisk Graj . Studio wchodzi w tryb testowania gry.

      Play button highlighted in Studio's playtesting options.
    2. Poruszaj się po stacji kosmicznej ze swoim awatarem.

Włącz animacje

Podczas gdy poprzednia technika skupia się na wymianie domyślnych animacji, które automatycznie odtwarzają się za każdym razem, gdy postać wykonuje określone działania doświadczeniowe, możesz programowo uruchamiać animacje w odpowiedzi na dowolną akcję postaci w przestrzeni 3D, taką jak podniesienie przedmiotu lub otrzymanie obrażeń od zagrożenia.

W tym przykładzie, gdy gracze dotkną złotej platformy, uruchamiają animację tańca postaci nie domyślnej.

Ta metoda odtwarzania animacji jest przydatna, ponieważ zapewnia graczom natychmiastową informację zwrotną o tym, jak powinni wchodzić w interakcję z obiektami w ich środowisku.Aby pokazać, następna sekcja pokazuje, jak uruchomić animację za każdym razem, gdy postacie są zbyt blisko niebezpiecznych wycieków pary jako sposób subtelnego nauczania graczy, aby unikali chodzenia zbyt blisko ścian.

Dodaj objętość

Jednym z najczęstszych sposobów uruchomienia unikalnego zachowania rozgrywki jest użycie głosności , lub niewidzialnych regionów w przestrzeni 3D, aby wykryć, kiedy postacie lub obiekty interakują z określonymi obszarami środowiska.Gdy połączysz woluminy z skryptami, możesz wykorzystać ich informacje zwrotne o kolizji do automatycznego uruchamiania akcji, takich jak zmniejszenie zdrowia gracza lub odtwarzanie animacji.

A far out view of a mansion room. An outline of a box is in the middle of the room to signify the volume that triggers gameplay events.
Tajemnica Duvall Drive wykorzystuje objętości, aby uruchomić wydarzenia rozgrywki, które zmieniają wizualny wygląd pokoju.

Dodając wolumen do swojego doświadczenia, ważne jest, aby skalować go tak, aby pokrywał tylko przestrzeń, którą chcesz uruchomić swoją animację.Jeśli ustawisz zbyt małą objętość, gracze mogą nigdy nie zderzyć się z obszarem, aby odtworzyć animację; odwrotnie, jeśli ustawisz zbyt dużą objętość, animacja zostanie odtworzona, zanim gracze dotrą do przedmiotu lub obszaru zainteresowania, a mogą nie zrozumieć, co zrobili, aby uruchomić animację.

Aby wstawić wolumen wokół wycieku pary, który uruchomi animację:

  1. W oknie Eksploratora dodaj nową część bloku.
  2. Pozycjonuj i zmieniaj rozmiar bloku, aż pokryje obszar, na którym chcesz uruchomić animację.
  3. W oknie Właściwości ,
    1. Ustaw nazwę na detektor animacji .

    2. Ustaw Przezroczystość na 1, aby blok był niewidoczny.

      An outline of a block is visible around a steam vent to signify the position of the volume.

Twórz skrypt

Teraz, gdy masz zdefiniowany region do uruchamiania animacji, nadszedł czas, aby stworzyć skrypt, który wykrywa programowo, kiedy gracze zderzają się z głośnością.Następnie możesz słuchać zdarzeń kolizyjnych, aby uruchomić dowolną animację, która ma sens dla wymagań rozgrywki.

Na przykład ta technika animacji wykorzystuje LocalScript zamiast Script, aby zapewnić graczom natychmiastową informację zwrotną, gdy zderzą się z głośnością.Jeśli serwer miał słuchać kolizji i odtwarzać animację, może wystąpić opóźnienie między dotknięciem głośności przez gracza na swoim klientzie a zobaczeniem animacji z powodu czasu replikacji z serwera na klienta.

Aby utworzyć lokalny skrypt, który wykryje, kiedy postać lokalnego gracza dotknie głośności:

  1. W oknie Eksploratora dodaj nowy skrypt do StarterCharacterScripts .Umieszczenie to zapewnia, że skrypt i jego dzieci klonują się w postaci gracza przy dołączeniu i po ponownym odrodzeniu w doświadczeniu.

    1. Rozszerz StarterPlayer , następnie przewiń nad jego dzieckiem StarterCharacterScripts i kliknij przycisk ⊕.
    2. Z menu kontekstowego wstaw lokalny skrypt i zmień nazwę na TriggerAnimation .
  2. 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 = false
    animationDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    if hitCharacter ~= localCharacter then
    return
    end
    debounce = true
    animationTrack:Play()
    animationTrack.Ended:Wait()
    debounce = false
    end)

Skrypt TriggerAnimation rozpoczyna się od uzyskania usługi Workspace, która zawiera wszystkie obiekty, które istnieją w świecie 3D.Jest to ważne, ponieważ skrypt musi odwoływać się do obiektu Part działającego jako twoja objętość.

Dla każdej postaci gracza, która ładowana lub odrodza się ponownie w doświadczeniu, skrypt czeka na:

  • Jego dziecko Animation obiekt, który dodasz w następnej sekcji.
  • Obiekty Humanoid i Animator postaci.
  • Obiekt objętości w przestrzeni nazwanej AnimationDetector .

Kiedy coś zderza się z objętością, funkcja obsługi zdarzenia Touched otrzymuje pierwszego przodka, który jest Model, który powinien być charakterem, jeśli BasePart zderzony z objętością jest potomkiem modelu postaci.Jeśli tak, funkcja następnie sprawdza, czy jest to postać gracza lokalnego .Jeśli tak, funkcja następnie:

  • Ustawia debounce na true .
  • Odtwarza i czeka, aż animacja się zakończy.
  • Ustawia odpuszczenie powrotne do false.

Ustawienie debounce od false do true do false ponownie po zakończeniu odtwarzania animacji jest wzorem debounce, który zapobiega powtarzaniu się animacji, ponieważ gracze nieustannie kolizują z głośnością.Aby uzyskać więcej informacji o tym wzorcu debounce, zobacz Wykryj kolizje .

Dodaj animację

Jeśli teraz przetestujesz swoje doświadczenie, twój skrypt TriggerAnimation nadal nie będzie w stanie odtworzyć animacji w odpowiedzi na lokalną kolizję gracza.Dzieje się tak, ponieważ czeka na dziecko Animation obiekt z zasobem animacji, na który może odwołać się, a ten obiekt Animation nie istnieje obecnie.

Aby dodać animację dla lokalnego skryptu, na który odwołują się gracze, gdy zderzają się z głośnością:

  1. W oknie Eksploratora dodaj nową animację do TriggerAnimation .

    1. Najedź na Animację aktywacji i kliknij przycisk ⊕.
    2. Z menu kontekstowego wstaw Animację .
  2. Wybierz nowy obiekt animacji, a następnie w oknie Właściwości ustaw AnimationID na animację assetID, którą chcesz uruchomić, gdy gracze dotkną głośności.Na przykład odniesienia próbek niebezpiecznej stacji kosmicznej odtwarzają animację spadającego postaci wstecz.

  3. Przetestuj swoje doświadczenie, aby upewnić się, że twoja animacja odtwarza się, gdy gracze są w pobliżu pierwszej wycieku pary.