Inleiding tot staatsmachine in eenheid

Staatsmachines zijn een fundamenteel concept bij de ontwikkeling van games, en Unity biedt een krachtige toolset om deze te implementeren. Een toestandsmachine is een computermodel dat bestaat uit een reeks toestanden, overgangen tussen die toestanden en acties die bij elke toestand of overgang horen. In Unity wordt het state machine-systeem vaak gebruikt voor het controleren van het gedrag van gamepersonages, het beheren van animaties, het verwerken van gebruikersinvoer, het beheren van UI-statussen en meer.

Wat is een staatsmachine

In de kern bestaat een toestandsmachine uit twee sleutelelementen: toestanden en overgangen.

Toestanden vertegenwoordigen specifieke omstandigheden of gedragingen waarin een object of systeem zich op een bepaald moment kan bevinden. In de toestandsmachine van een spelpersonage kunnen er bijvoorbeeld toestanden zijn zoals inactief, lopen, rennen, springen of aanvallen. Elke staat definieert een reeks acties of gedragingen die ermee verbonden zijn.

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

public CharacterState currentState;

Overgangen van staatsmachines

Overgangen daarentegen beschrijven de omstandigheden waaronder de staatsmachine van de ene staat naar de andere gaat. Deze omstandigheden kunnen worden geactiveerd door gebruikersinvoer, bepaalde gebeurtenissen die plaatsvinden in het spel of het voldoen aan specifieke criteria. Er kan bijvoorbeeld een overgang van de inactieve toestand naar de lopende toestand worden geactiveerd wanneer de speler op een bewegingstoets drukt.

Animator

In Unity wordt de statusmachinefunctionaliteit vaak geïmplementeerd met behulp van de Animator-component, die een interface biedt voor het maken en beheren van staten en overgangen. Met de Animator-controller kunnen ontwikkelaars animatieclips voor elke status definiëren en overgangsvoorwaarden specificeren, zoals parameterwaarden of triggergebeurtenissen.

Staatsmachine in Unity

Unity Animator-venster

Volg deze stappen om een ​​statusmachine te gebruiken in Unity:

Maak een animatorcontroller

Animatorcontroller-item in Unity Editor

  • Deze asset fungeert als de container voor de statusmachine. Het kan worden gemaakt door met de rechtermuisknop in het projectvenster te klikken, "Create," te selecteren en te kiezen "Animator Controller."
Animator animator;

Ontwerpstaten

  • Binnen de Animator Controller kunnen de toestanden worden gedefinieerd die verschillende gedragingen of omstandigheden vertegenwoordigen. Elke staat kan bijbehorende animatiefragmenten, variabelen of parameters hebben die het gedrag van de staat bepalen.
animator = GetComponent<Animator>();
animator.SetFloat("Speed", moveSpeed); // Set the "Speed" parameter to control animation speed

Definieer overgangen

  • Geef de omstandigheden op waaronder de toestandsmachine van de ene toestand naar de andere overgaat. Deze voorwaarden kunnen gebaseerd zijn op parameterwaarden, trigger gebeurtenissen of scriptgestuurde logica.
animator.SetBool("IsJumping", true); // Set the "IsJumping" parameter to trigger the jumping animation

Acties implementeren

  • Voeg de scripts toe aan de spelobjecten die de acties afhandelen die bij elke staat of overgang horen. Deze scripts kunnen variabelen wijzigen, animaties besturen, gameplay-acties uitvoeren en meer.
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);
    }
}

Testen en herhalen

Speel het spel en observeer hoe de toestandsmachine tussen toestanden overgaat op basis van de gedefinieerde omstandigheden. Pas de overgangen, acties en parameters zo nodig aan om het gewenste gedrag te bereiken.

Conclusie

Staatsmachines bieden een modulaire en georganiseerde aanpak voor het beheren van complex gedrag in Unity games. Door staten, overgangen en bijbehorende acties te definiëren, kunnen ontwikkelaars dynamische en responsieve systemen creëren die zich aanpassen aan spelersinvoer, gamegebeurtenissen en andere omstandigheden. Of iemand nu karakteranimaties, AI-gedrag, UI-interacties of een ander spelsysteem maakt, het begrijpen en gebruiken van staatsmachines in Unity kan de workflow voor game-ontwikkeling aanzienlijk verbeteren.

Voorgestelde artikelen
Hoe je een filmpje activeert in Unity
Inleiding tot Unity C#-scripttaal
Inleiding tot variabelen en gegevenstypen bij programmeren in eenheid
Objectpooling in eenheid implementeren
Uitgebreide gids voor het transformeren van rotatie in eenheid
Een Game Over-scène creëren in eenheid
Maak scriptbare objecten in eenheid