Introduktion till State Machine in Unity

Statsmaskiner är ett grundläggande koncept i spelutveckling, och Unity tillhandahåller en kraftfull verktygsuppsättning för att implementera dem. En tillståndsmaskin är en beräkningsmodell som består av en uppsättning tillstånd, övergångar mellan dessa tillstånd och åtgärder associerade med varje tillstånd eller övergång. I Unity används tillståndsmaskinsystemet vanligtvis för att kontrollera spelkaraktärsbeteende, hantera animationer, hantera användarinmatning, hantera UI-tillstånd och mer.

Vad är en statsmaskin

I sin kärna består en tillståndsmaskin av två nyckelelement: tillstånd och övergångar.

Tillstånd representerar specifika tillstånd eller beteenden som ett objekt eller system kan vara i vid varje given tidpunkt. Till exempel, i en spelkaraktärs tillståndsmaskin kan det finnas tillstånd som tomgång, gå, springa, hoppa eller attackera. Varje tillstånd definierar en uppsättning handlingar eller beteenden som är associerade med den.

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

public CharacterState currentState;

Statliga maskinövergångar

Övergångar, å andra sidan, beskriver de förhållanden under vilka tillståndsmaskinen rör sig från ett tillstånd till ett annat. Dessa villkor kan utlösas av användarinmatning, vissa händelser som inträffar i spelet eller att specifika kriterier uppfylls. Till exempel kan en övergång från viloläge till gångläge utlösas när spelaren trycker på en rörelseknapp.

Animatör

I Unity implementeras tillståndsmaskinens funktionalitet ofta med hjälp av Animator-komponenten, som tillhandahåller ett gränssnitt för att skapa och hantera tillstånd och övergångar. Animator-styrenheten tillåter utvecklare att definiera animationsklipp för varje tillstånd och specificera övergångsvillkor, såsom parametervärden eller triggerhändelser.

State Machine in Unity

Unity Animator Window

Följ dessa steg för att använda en tillståndsmaskin i Unity:

Skapa en Animator Controller

Animator Controller Asset i Unity Editor

  • Den här tillgången fungerar som behållaren för tillståndsmaskinen. Den kan skapas genom att högerklicka i projektfönstret, välja "Create," och välja "Animator Controller."
Animator animator;

Designstater

  • Inom Animator Controller kan tillstånden definieras som representerar olika beteenden eller förhållanden. Varje tillstånd kan ha associerade animationsklipp, variabler eller parametrar som styr tillståndets beteende.
animator = GetComponent<Animator>();
animator.SetFloat("Speed", moveSpeed); // Set the "Speed" parameter to control animation speed

Definiera övergångar

  • Ange villkoren under vilka tillståndsmaskinen övergår från ett tillstånd till ett annat. Dessa villkor kan baseras på parametervärden, trigger-händelser eller skriptdriven logik.
animator.SetBool("IsJumping", true); // Set the "IsJumping" parameter to trigger the jumping animation

Genomföra åtgärder

  • Bifoga skripten till spelobjekten som hanterar de åtgärder som är associerade med varje tillstånd eller övergång. Dessa skript kan modifiera variabler, styra animationer, utföra spelåtgärder och 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);
    }
}

Testa och iterera

Spela spelet och observera hur tillståndsmaskinen övergår mellan tillstånd baserat på de definierade förhållandena. Justera övergångarna, åtgärderna och parametrarna efter behov för att uppnå önskat beteende.

Slutsats

Statsmaskiner tillhandahåller en modulär och organiserad metod för att hantera komplexa beteenden i Unity spel. Genom att definiera tillstånd, övergångar och associerade åtgärder kan utvecklare skapa dynamiska och lyhörda system som anpassar sig till spelarinput, spelhändelser och andra förhållanden. Oavsett om någon skapar karaktärsanimationer, AI-beteenden, UI-interaktioner eller något annat spelsystem, kan förståelse och användning av tillståndsmaskiner i Unity avsevärt förbättra ens spelutvecklingsarbetsflöde.

Föreslagna artiklar
Hur man triggar en mellansekvens i Unity
Introduktion till Unity C# Scripting Language
Introduktion till variabler och datatyper i programmering i Unity
Lägga till spelarinträde till en bil i Unity
En guide till att integrera Nintendo Controller med Unity
Lägger till Sway Effect till Vapen i Unity
Hur man lägger till Sniper Scope Effect i Unity