Lua Academy · Oppitunti

Tekoälyn käyttäytyminen tilakoneilla

Toteuttakaa tilakoneisiin perustuva vihollisten tekoälylogiikka kokonaan Lua-skripteinä.

Oppitunti 3/413 vaihetta

Tekoälyn käyttäytyminen tilakoneilla on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on äärellinen tilakone?

Äärellinen tilakone (FSM) määrittelee toiminnan joukkona tiloja, joiden välillä on siirtymiä. Ehdot tai tapahtumat käynnistävät siirtymät.

FSM:n taulukkorakenne

Esitä FSM taulukkona, jolla on nykyinen tila, tilataulukko sekä valinnaiset enter-, exit- ja update-callbackit kullekin tilalle.

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

Tilojen määrittäminen

Jokainen tila on taulukko, jolla on valinnaiset enter-, update- ja exit-funktiot.

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
}

Chase-tilan lisääminen

Chase-tila seuraa pelaajaa ja siirtyy attack-tilaan, kun etäisyys on riittävän pieni.

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
}

Siirtymäfunktio

Siirtymä kutsuu nykyisen tilan exit-funktiota, vaihtaa tilaa ja kutsuu sitten uuden tilan enter-funktiota.

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

FSM:n päivittäminen

Kutsu jokaisella pelitikinillä fsm:update(dt)-metodia suorittaaksesi nykyisen tilan päivityslogiikan.

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

Hierarkkiset tilakoneet

Tilat voivat sisältää sisäkkäisiä FSM:iä. Ylätaso käsittelee yleistä toimintaa, kuten taistelua tai partiointia, kun taas alitason FSM:t käsittelevät kunkin ylätason tilan yksityiskohtia.

Dataohjautuvat FSM:t

Määritä FSM:n siirtymät määritystiedostoista ladattavina datataulukkoina. Näin suunnittelijat voivat säätää tekoälyä koskematta koodiin.

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

Pinotut tilakoneet

Tilapino sallii väliaikaisten tilojen, kuten "stunned", pinoamisen nykyisen tilan päälle ja nykyiseen tilaan palaamisen väliaikaisen tilan päätyttyä.

Useat tekoälyagentit

Jokaisella vihollisentiteetillä on oma FSM-instanssinsa, joten niiden tekoäly toimii itsenäisesti. Tämä on helppo toteuttaa Lua-taulukoilla ja sulkeumilla.

FSM:n virheenkorjaus

Kirjaa kaikki siirtymät kehityksen aikana. Jäljitystaulukko tallentaa muodossa {from, to, time} olevat tiedot tekoälyn toiminnan jälkikäteistä analysointia varten.

FSM:ää koskeva kysymys

Mikä käynnistää tilasiirtymän FSM:ssä?

Kertaus: tekoäly tilakoneilla

Luan FSM:t käyttävät tiliohjainobjektien taulukkoa (enter/update/exit) ja siirtymäfunktiota. Ne erottavat tekoälyn osa-alueet selkeästi, tukevat dataohjautuvaa suunnittelua ja skaalautuvat yksinkertaisista vihollisten tekoälyistä monimutkaisiin hierarkkisiin käyttäytymispuu-rakenteisiin.

Aloita maksutta

Opi Lua tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Tekoälyn käyttäytyminen tilakoneilla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tekoälyn käyttäytyminen tilakoneilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Tekoälyn käyttäytyminen tilakoneilla”?

Toteuttakaa tilakoneisiin perustuva vihollisten tekoälylogiikka kokonaan Lua-skripteinä. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Tekoälyn käyttäytyminen tilakoneilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tapahtumajärjestelmät Luassa
  2. Komponenttipohjainen skriptaus
  3. Tekoälyn käyttäytyminen tilakoneilla
  4. Tietopohjainen määritys ja hot reload
← Takaisin: Lua Academy