Wprowadzenie do maszyny stanowej w Unity

Maszyny stanowe są podstawową koncepcją w tworzeniu gier, a Unity zapewnia potężny zestaw narzędzi do ich wdrażania. Maszyna stanów to model obliczeniowy składający się ze zbioru stanów, przejść między tymi stanami i działań związanych z każdym stanem lub przejściem. W Unity system maszyny stanowej jest powszechnie używany do kontrolowania zachowania postaci w grze, zarządzania animacjami, obsługi danych wprowadzanych przez użytkownika, zarządzania stanami interfejsu użytkownika i nie tylko.

Co to jest maszyna stanu

W swoim rdzeniu maszyna stanów składa się z dwóch kluczowych elementów: stanów i przejść.

Stany reprezentują specyficzne warunki lub zachowania, w jakich może znajdować się obiekt lub system w dowolnym momencie. Na przykład w maszynie stanu postaci w grze mogą występować takie stany, jak bezczynność, chodzenie, bieganie, skakanie lub atak. Każdy stan definiuje zestaw działań lub zachowań z nim związanych.

public enum CharacterState
{
    Idle,
    Walking,
    Running,
    Jumping,
    Attacking
}

public CharacterState currentState;

Przejścia maszyn stanowych

Z drugiej strony przejścia opisują warunki, w jakich maszyna stanów przechodzi z jednego stanu do drugiego. Warunki te mogą zostać wywołane przez wejście użytkownika, pewne zdarzenia mające miejsce w grze lub spełnienie określonych kryteriów. Na przykład przejście ze stanu bezczynności do stanu chodzenia może zostać wywołane, gdy gracz naciśnie klawisz ruchu.

Animator

W Unity funkcjonalność maszyny stanów jest często implementowana przy użyciu komponentu Animator, który zapewnia interfejs do tworzenia stanów i przejść oraz zarządzania nimi. Kontroler Animator umożliwia programistom definiowanie klipów animacyjnych dla każdego stanu i określanie warunków przejścia, takich jak wartości parametrów lub zdarzenia wyzwalające.

Maszyna stanu w Unity

Okno Animatora Unity

Aby użyć maszyny stanów w Unity, wykonaj następujące kroki:

Utwórz kontroler animatora

Zasób kontrolera animacji w edytorze Unity

  • Ten zasób działa jako kontener dla maszyny stanów. Można go utworzyć klikając prawym przyciskiem myszy w oknie Projektu, wybierając "Create," i wybierając "Animator Controller."
Animator animator;

Stany projektowe

  • W programie Animator Controller można zdefiniować stany reprezentujące różne zachowania lub warunki. Z każdym stanem mogą być powiązane klipy animacyjne, zmienne lub parametry kontrolujące zachowanie stanu.
animator = GetComponent<Animator>();
animator.SetFloat("Speed", moveSpeed); // Set the "Speed" parameter to control animation speed

Zdefiniuj przejścia

  • Określ warunki, w jakich maszyna stanów przechodzi z jednego stanu do drugiego. Warunki te mogą opierać się na wartościach parametrów, zdarzeniach trigger lub logice sterowanej skryptem.
animator.SetBool("IsJumping", true); // Set the "IsJumping" parameter to trigger the jumping animation

Wdrażaj działania

  • Dołącz skrypty do obiektów gry, które obsługują akcje powiązane z każdym stanem lub przejściem. Skrypty te mogą modyfikować zmienne, kontrolować animacje, wykonywać czynności związane z rozgrywką i nie tylko.
void Update()
{
    // Check for player input and transition to the appropriate state
    if (Input.GetKey(KeyCode.W))
    {
        currentState = CharacterState.Walking;
        animator.SetBool("IsWalking", true);
    }
    else if (Input.GetKey(KeyCode.Space))
    {
        currentState = CharacterState.Jumping;
        animator.SetBool("IsJumping", true);
    }
    else
    {
        // Default state
        currentState = CharacterState.Idle;
        animator.SetBool("IsWalking", false);
        animator.SetBool("IsJumping", false);
    }
}

Testuj i iteruj

Zagraj w grę i obserwuj, jak maszyna stanów przechodzi między stanami w oparciu o zdefiniowane warunki. Dostosuj przejścia, akcje i parametry zgodnie z potrzebami, aby osiągnąć pożądane zachowanie.

Wniosek

Maszyny stanowe zapewniają modularne i zorganizowane podejście do zarządzania złożonymi zachowaniami w grach Unity. Definiując stany, przejścia i powiązane działania, programiści mogą tworzyć dynamiczne i responsywne systemy, które dostosowują się do działań gracza, wydarzeń w grze i innych warunków. Niezależnie od tego, czy ktoś tworzy animacje postaci, zachowania sztucznej inteligencji, interakcje interfejsu użytkownika, czy jakikolwiek inny system gry, zrozumienie i wykorzystanie maszyn stanowych w Unity może znacznie usprawnić przepływ pracy przy tworzeniu gier.

Sugerowane artykuły
Jak wywołać przerywnik filmowy w Unity
Wprowadzenie do języka skryptowego Unity C#
Wprowadzenie do zmiennych i typów danych w programowaniu w Unity
Tworzenie GrabPack w Unity zainspirowany Poppy Playtime
Tworzenie efektu Bullet Time w Unity
Tworzenie obiektów interaktywnych w Unity
Implementowanie interakcji kinetycznych w Unity