Introduksjon til State Machine in Unity

Statsmaskiner er et grunnleggende konsept i spillutvikling, og Unity gir et kraftig verktøysett for å implementere dem. En tilstandsmaskin er en beregningsmodell som består av et sett med tilstander, overganger mellom disse tilstandene og handlinger knyttet til hver tilstand eller overgang. I Unity brukes tilstandsmaskinsystemet ofte for å kontrollere spillkarakterens oppførsel, administrere animasjoner, håndtere brukerinndata, administrere UI-tilstander og mer.

Hva er en statsmaskin

Ved sin kjerne består en tilstandsmaskin av to nøkkelelementer: tilstander og overganger.

Tilstander representerer spesifikke tilstander eller atferd som et objekt eller system kan være i til enhver tid. For eksempel, i en spillkarakters tilstandsmaskin, kan det være tilstander som inaktiv, gå, løpe, hoppe eller angripe. Hver stat definerer et sett med handlinger eller atferd knyttet til den.

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

public CharacterState currentState;

Statens maskinoverganger

Overganger, derimot, beskriver forholdene under hvilke tilstandsmaskinen beveger seg fra en tilstand til en annen. Disse forholdene kan utløses av brukerinndata, visse hendelser som skjer i spillet, eller at spesifikke kriterier oppfylles. For eksempel kan en overgang fra hviletilstand til gåtilstand utløses når spilleren trykker på en bevegelsestast.

Animatør

I Unity implementeres tilstandsmaskinfunksjonaliteten ofte ved hjelp av Animator-komponenten, som gir et grensesnitt for å lage og administrere tilstander og overganger. Animator-kontrolleren lar utviklere definere animasjonsklipp for hver tilstand og spesifisere overgangsbetingelser, for eksempel parameterverdier eller triggerhendelser.

State Machine inn Unity

Unity Animator Window

Følg disse trinnene for å bruke en tilstandsmaskin i Unity:

Lag en animatorkontroller

Animatorkontrollelement i Unity Editor

  • Denne ressursen fungerer som beholderen for tilstandsmaskinen. Den kan opprettes ved å høyreklikke i prosjektvinduet, velge "Create," og velge "Animator Controller."
Animator animator;

Designstater

  • Innenfor animatorkontrolleren kan tilstandene defineres som representerer forskjellig atferd eller forhold. Hver tilstand kan ha tilknyttede animasjonsklipp, variabler, eller parametere som kontrollerer tilstandens oppførsel.
animator = GetComponent<Animator>();
animator.SetFloat("Speed", moveSpeed); // Set the "Speed" parameter to control animation speed

Definer overganger

  • Spesifiser forholdene under hvilke tilstandsmaskinen går over fra en tilstand til en annen. Disse betingelsene kan være basert på parameterverdier, trigger-hendelser eller skriptdrevet logikk.
animator.SetBool("IsJumping", true); // Set the "IsJumping" parameter to trigger the jumping animation

Implementer handlinger

  • Fest skriptene til spillobjektene som håndterer handlingene knyttet til hver tilstand eller overgang. Disse skriptene kan endre variabler, kontrollere animasjoner, utføre spillhandlinger og mer.
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);
    }
}

Test og iterer

Spill spillet og observer hvordan tilstandsmaskinen går mellom tilstander basert på de definerte betingelsene. Juster overgangene, handlingene og parameterne etter behov for å oppnå ønsket oppførsel.

Konklusjon

Tilstandsmaskiner gir en modulær og organisert tilnærming til å håndtere kompleks atferd i Unity-spill. Ved å definere tilstander, overganger og tilhørende handlinger, kan utviklere lage dynamiske og responsive systemer som tilpasser seg spillerinnspill, spillhendelser og andre forhold. Enten noen lager karakteranimasjoner, AI-atferd, UI-interaksjoner eller et hvilket som helst annet spillsystem, kan forståelse og bruk av tilstandsmaskiner i Unity forbedre arbeidsflyten for spillutvikling betraktelig.

Foreslåtte artikler
Hvordan utløse en cutscene i Unity
Introduksjon til Unity C# Scripting Language
Introduksjon til variabler og datatyper i programmering i Unity
Legge til spillerinngang til en bil i Unity
En guide til å integrere Nintendo-kontroller med Unity
Legger til svaieffekt til våpen i Unity
Hvordan legge til Sniper Scope Effect i Unity