AI-beteende med tillståndsmaskiner
Implementera FSM-baserad fiende-AI helt i Lua-skript.
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 = {},
}
endDefiniera 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
endUppdatera 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
endHierarkiska 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.
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
- Händelsesystem i Lua
- Komponentbaserad skriptning
- AI-beteende med tillståndsmaskiner
- Datadriven konfiguration och hot-reload