Introduktion til State Machine in Unity

Statsmaskiner er et grundlæggende koncept i spiludvikling, og Unity giver et kraftfuldt værktøjssæt til at implementere dem. En tilstandsmaskine er en beregningsmodel, der består af et sæt tilstande, overgange mellem disse tilstande og handlinger forbundet med hver tilstand eller overgang. I Unity bruges tilstandsmaskinsystemet almindeligvis til at kontrollere spilkarakters adfærd, administrere animationer, håndtere brugerinput, administrere UI-tilstande og mere.

Hvad er en statsmaskine

Ved sin kerne består en tilstandsmaskine af to nøgleelementer: tilstande og overgange.

Tilstande repræsenterer specifikke betingelser eller adfærd, som et objekt eller system kan være i på ethvert givet tidspunkt. For eksempel kan der i en spilfigurs tilstandsmaskine være tilstande som tomgang, gå, løbe, hoppe eller angribe. Hver stat definerer et sæt handlinger eller adfærd forbundet med den.

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

public CharacterState currentState;

Statens Maskinovergange

Overgange beskriver på den anden side de forhold, hvorunder tilstandsmaskinen bevæger sig fra en tilstand til en anden. Disse betingelser kan udløses af brugerinput, visse hændelser, der forekommer i spillet, eller at specifikke kriterier er opfyldt. For eksempel kan en overgang fra inaktiv tilstand til gåtilstand udløses, når spilleren trykker på en bevægelsestast.

Animatør

I Unity implementeres tilstandsmaskinens funktionalitet ofte ved hjælp af Animator-komponenten, som giver en grænseflade til at oprette og administrere tilstande og overgange. Animator-controlleren giver udviklere mulighed for at definere animationsklip for hver tilstand og specificere overgangsbetingelser, såsom parameterværdier eller triggerhændelser.

State Machine ind Unity

Unity Animator vindue

Følg disse trin for at bruge en tilstandsmaskine i Unity:

Opret en animatorcontroller

Animator-controller-aktiv i Unity Editor

  • Dette aktiv fungerer som beholderen for tilstandsmaskinen. Den kan oprettes ved at højreklikke i projektvinduet, vælge "Create," og vælge "Animator Controller."
Animator animator;

Designstater

  • Inden for Animator Controller kan de tilstande defineres, der repræsenterer forskellige adfærd eller forhold. Hver tilstand kan have tilknyttet animationsklip, variabler eller parametre, der styrer tilstandens adfærd.
animator = GetComponent<Animator>();
animator.SetFloat("Speed", moveSpeed); // Set the "Speed" parameter to control animation speed

Definer overgange

  • Angiv de betingelser, hvorunder tilstandsmaskinen skifter fra en tilstand til en anden. Disse betingelser kan være baseret på parameterværdier, trigger hændelser eller script-drevet logik.
animator.SetBool("IsJumping", true); // Set the "IsJumping" parameter to trigger the jumping animation

Implementer handlinger

  • Vedhæft scripts til spilobjekterne, der håndterer handlingerne forbundet med hver tilstand eller overgang. Disse scripts kan ændre variabler, styre animationer, udføre gameplay-handlinger og mere.
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 gentag

Spil spillet og observer, hvordan tilstandsmaskinen skifter mellem tilstande baseret på de definerede betingelser. Juster overgange, handlinger og parametre efter behov for at opnå den ønskede adfærd.

Konklusion

Statsmaskiner giver en modulær og organiseret tilgang til håndtering af kompleks adfærd i Unity-spil. Ved at definere tilstande, overgange og tilknyttede handlinger kan udviklere skabe dynamiske og responsive systemer, der tilpasser sig spillerinput, spilbegivenheder og andre forhold. Uanset om nogen skaber karakteranimationer, AI-adfærd, UI-interaktioner eller et hvilket som helst andet spilsystem, kan forståelse og brug af tilstandsmaskiner i Unity i høj grad forbedre ens spiludviklingsarbejdsgang.