Lua Academy · Lektion

AI-beteende med tillståndsmaskiner

Implementera FSM-baserad fiende-AI helt i Lua-skript.

Lektion 3 av 413 steg

AI-beteende med tillståndsmaskiner är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad är en finit tillståndsmaskin?

En finit tillståndsmaskin (FSM) definierar beteende som en uppsättning tillstånd med övergångar mellan dem, utlöst av villkor eller händelser.

FSM-tabellens struktur

Representera en FSM som en tabell med ett aktuellt tillstånd, en tillståndstabell och valfria enter-, exit- och update-callbacks för varje tillstånd.

local function newFSM(initialState)
  return {
    current = initialState,
    states  = {},
  }
end

Definiera tillstånd

Varje tillstånd är en tabell med valfria funktioner för enter, update och exit.

local fsm = newFSM("idle")
fsm.states.idle = {
  enter  = function(self) print("Enter idle") end,
  update = function(self, dt)
    if self.enemy then self:transition("chase") end
  end,
  exit   = function(self) print("Exit idle") end
}

Lägga till tillståndet Chase

Tillståndet chase förföljer spelaren och övergår till attack när det är tillräckligt nära.

fsm.states.chase = {
  enter = function(self) print("Chasing!") end,
  update = function(self, dt)
    if self.distToPlayer < 2 then
      self:transition("attack")
    elseif not self.enemy then
      self:transition("idle")
    end
  end
}

Övergångsfunktion

En övergång anropar exit för det aktuella tillståndet, byter tillstånd och anropar sedan enter för det nya tillståndet.

function fsm:transition(newState)
  local cur = self.states[self.current]
  if cur and cur.exit then cur:exit() end
  self.current = newState
  local next = self.states[newState]
  if next and next.enter then next:enter() end
end

Uppdatera FSM:en

Anropa fsm:update(dt) vid varje game tick för att köra logiken för det aktuella tillståndet.

function fsm:update(dt)
  local state = self.states[self.current]
  if state and state.update then
    state:update(dt)
  end
end

Hierarkiska tillståndsmaskiner

Tillstånd kan innehålla nästlade FSM:er. Ett överordnat tillstånd hanterar det övergripande beteendet, till exempel strid kontra patrull, medan underordnade FSM:er hanterar detaljerna inom varje överordnat tillstånd.

Datastyrda FSM:er

Definiera FSM-övergångar som datatabeller som läses in från konfigurationsfiler. Då kan designers justera AI utan att ändra koden.

local transitions = {
  idle  = {seeEnemy = "chase"},
  chase = {lostEnemy = "idle", nearEnemy = "attack"},
  attack = {enemyDead = "idle"},
}

Stapla tillståndsmaskiner

En tillståndsstack gör det möjligt för tillfälliga tillstånd, till exempel "stunned", att läggas ovanpå det aktuella tillståndet och återuppta det när de är klara.

Flera AI-agenter

Varje fiendeentitet har en egen FSM-instans, så deras AI körs oberoende av varandra. Detta är enkelt att göra med Lua-tabeller och closures.

Felsöka FSM

Logga alla övergångar under utvecklingen. En spårningstabell lagrar {from, to, time} för efteranalys av AI-beteendet.

Fråga om FSM

Vad utlöser en tillståndsövergång i en FSM?

Repetition: AI med tillståndsmaskiner

Lua-FSM:er använder en tabell med tillståndsobjekt (enter/update/exit) och en övergångsfunktion. De separerar AI-relaterade ansvarsområden tydligt, stöder datastyrd design och kan skalas från enkla fiendehjärnor till komplexa hierarkiska beteendeträd.

Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”AI-beteende med tillståndsmaskiner” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”AI-beteende med tillståndsmaskiner”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”AI-beteende med tillståndsmaskiner”?

Implementera FSM-baserad fiende-AI helt i Lua-skript. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”AI-beteende med tillståndsmaskiner”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Händelsesystem i Lua
  2. Komponentbaserad skriptning
  3. AI-beteende med tillståndsmaskiner
  4. Datadriven konfiguration och hot-reload
← Tillbaka till Lua Academy