0Pricing
Lua Academy · Lezione

Comportamento dell'IA con macchine a stati

Implementi interamente negli script Lua la logica dell'IA dei nemici basata su FSM.

Comportamento dell'IA con macchine a stati è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Che cos'è una macchina a stati finiti

Una macchina a stati finiti (FSM) definisce il comportamento come un insieme di stati con transizioni tra loro, attivate da condizioni o eventi.

Struttura a tabella di una FSM

Rappresenti una FSM come una tabella con uno stato corrente, una tabella degli stati e callback opzionali di entrata/uscita/aggiornamento per ogni stato.

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

Definizione degli stati

Ogni stato è una tabella con funzioni opzionali enter, update e 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
}

Aggiunta dello stato di inseguimento

Lo stato di inseguimento segue il giocatore e passa all'attacco quando è sufficientemente vicino.

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
}

Funzione di transizione

Una transizione chiama exit sullo stato corrente, cambia stato e poi chiama enter sul nuovo stato.

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

Aggiornamento della FSM

A ogni tick del gioco chiami fsm:update(dt) per eseguire la logica di aggiornamento dello stato corrente.

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

Macchine a stati gerarchiche

Gli stati possono contenere FSM annidate. Uno stato padre gestisce il comportamento generale, ad esempio combattimento o pattugliamento, mentre le FSM figlie gestiscono i dettagli all'interno di ogni stato padre.

FSM guidate dai dati

Definisca le transizioni della FSM come tabelle di dati caricate dai file di configurazione. In questo modo i designer possono modificare l'IA senza intervenire sul codice.

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

Macchine a stati impilate

Uno stack degli stati consente agli stati temporanei, ad esempio "stunned", di essere inseriti sopra lo stato corrente e di riprenderlo al termine.

Più agenti di IA

Ogni entità nemica ha una propria istanza FSM, quindi la relativa IA viene eseguita indipendentemente. Con le tabelle e le closure di Lua è semplice ottenere questo comportamento.

Debug delle FSM

Registri tutte le transizioni durante lo sviluppo. Una tabella di traccia memorizza {from, to, time} per l'analisi a posteriori del comportamento dell'IA.

Domanda sulle FSM

Che cosa attiva una transizione di stato in una FSM?

Riepilogo: IA con macchine a stati

Le FSM in Lua utilizzano una tabella di oggetti stato (enter/update/exit) con una funzione di transizione. Separano chiaramente gli aspetti dell'IA, supportano la progettazione guidata dai dati e scalano dai comportamenti semplici dei nemici fino a complessi alberi comportamentali gerarchici.

Domande Frequenti

La lezione «Comportamento dell'IA con macchine a stati» è gratuita?

Sì — il testo completo di «Comportamento dell'IA con macchine a stati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Comportamento dell'IA con macchine a stati»?

Implementi interamente negli script Lua la logica dell'IA dei nemici basata su FSM. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Comportamento dell'IA con macchine a stati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Sistemi di eventi in Lua
  2. Scripting basato sui componenti
  3. Comportamento dell'IA con macchine a stati
  4. Configurazione data-driven e hot reload
← Torna a Lua Academy