Odtwarzanie animacji 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.

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.

Domyślna animacja upadku
Domyślna animacja pływania
Domyślna animacja wspinania się

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.

Domyślna animacja chodzenia
Niższa animacja chodzenia

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:

  1. W oknie Explorer dodaj nowy skrypt do ServerScriptService.

    1. Najedź na ServerScriptService 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 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 postaciOdwołanie do skryptu animacji
BieganieanimateScript.run.RunAnim.AnimationId
ChodzenieanimateScript.walk.WalkAnim.AnimationId
SkokanimateScript.jump.JumpAnim.AnimationId
Bezczynność

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

UpadekanimateScript.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:

  1. 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"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Przetestuj swoją grę, aby upewnić się, że twoja niestandardowa animacja chodzenia zastępuje domyślną animację.

    1. Wybierz Test z rozwijanego menu i kliknij przycisk Play po jego prawej stronie, aby rozpocząć testowanie.

      Opcja testowania w rozwijanym menu trybów testowania w mezzaninie Studio.
    2. 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.

W tym przykładzie, gdy gracze dotykają złotej platformy, uruchamiają animację tańca, która nie jest domyślna.

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.

Widok z daleka na pokój w willi. Kontur pudełka znajduje się w środku pokoju, aby zaznaczyć objętość, która uruchamia zdarzenia w grze.
The Mystery of Duvall Drive używa objętości do uruchamiania zdarzeń w grze, które zmieniają wizualny wygląd pokoju.

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ę:

  1. W oknie Explorer dodaj nową część blokową.
  2. Ustaw i zmień rozmiar bloku, aż pokryje obszar, który chcesz uruchomić animację.
  3. W oknie Properties,
    1. Ustaw Name na AnimationDetector.

    2. Ustaw Transparency na 1, aby uczynić blok niewidocznym.

      Kontur bloku jest widoczny wokół wentylu parowego, aby zaznaczyć położenie objętości.

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:

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

    1. Rozwiń StarterPlayer, a następnie najedź na jego dziecko StarterCharacterScripts i kliknij przycisk ⊕.
    2. Z menu kontekstowego wstaw LocalScript i zmień jego 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 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.
  • Obiekty Humanoid i Animator postaci.
  • 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ą:

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

    1. Najedź na TriggerAnimation i kliknij przycisk ⊕.
    2. Z menu kontekstowego wstaw Animację.
  2. 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.

  3. Przetestuj swoją grę, aby upewnić się, że twoja animacja odtwarza się, gdy gracze są blisko pierwszego wycieku pary.

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