Articles

Véges állapotú gépek [1. rész] – Unity Development Resources from TKoU

A véges állapotú gépekről talán minden fejlesztő hallott már legalább egyszer az alatt a néhány év alatt, amíg elkezdte a játékfejlesztést Unityben.

Mi is az a véges állapotú gép? Nos, rengeteg mindent le kell fedni, ezért legalább 3 részt fogunk csinálni. Alapvetően a Finite State Machine (vagy FSM) egy olyan tervezési minta, ahol az automatizálás kerül a játékba. Általánosan használt AI implementációkban bizonyos viselkedésekhez. Vagyis: Séta, támadás, üresjárat, stb. Az FSM implementálható NPC-kben is, és leginkább a nyílt világú RPG-kben használatos.

fsm1Kezeljük az FSM-et felügyelőként:

Az felügyelő ellenőrzi az AI állapotát. Az állapottól függően az AI reagál rá. Szintén az AI típusától függően (hogy repülő típusú, vagy földi típusú, vagy úszó típusú) az AI milyen akciót fog végrehajtani. Ebben a forgatókönyvben az FSM azt mondja a mesterséges intelligenciának, hogy “járőrözési állapotban” van, és azt fogja mondani a mesterséges intelligenciának, hogy “Sétáljon A-ból B-be”. Hacsak nem történik állapotváltozás, az AI csak A-tól B-be fog sétálni.

fsm2

Az állapotváltoztatáshoz először is szükségünk van egy állapotra. A bal oldali képen az AI látja a játékost, és szól a felügyelőnek. Most az overseer megváltoztatja az AI állapotát, és elkezd támadni.

1ZmLLoS1bAl71Ea_BNZzHWaja5YsjvqLa2z-ubNYAz AI ismét járőrözni kezd, mivel a játékos nincs a látóterében.

Amint ezeken a rosszul sikerült rajzokon látható, minden állapotnak megvannak a feltételei, mielőtt más állapotba váltana.

Nézzük meg az alábbi diagramot.

sNz-b43jHw-bZzuRbNlrvHQ

Itt egy normál AI állapotainak diagramja. A piros vonalak hamis állapotot jelentenek, ami az állapotváltozáshoz szükséges. A diagram eléggé egyszerű. Az AI üresjárati állapotban lesz, ha eléri a célállomást, és fordítva. Ha ellenséget lát, akkor támadni kezd. Az FSM most kezeli az összes átmenetet az állapotok között, és segít a mesterséges intelligenciának végrehajtani az adott állapothoz rendelkezésre álló műveletet.

Most bontsuk le az FSM rendszerünket.

  • Fő FSM rendszer – Ez lesz az, amelyik irányítani fogja a mesterséges intelligencia állapotait, és ellenőrzi, hogy az állapotok közötti feltételek teljesülnek-e. A Main FSM tartalmazza az összes állapotot, és kezeli az FSM Actions eseményhívásait.
  • FSM State – Ez határozza meg a mesterséges intelligencia aktuális állapotát, és tartalmazza az összes műveletet, amelyet a mesterséges intelligenciára helyezünk.
  • FSM Action – Ez lesz az a művelet, amelyet a mesterséges intelligencia akkor fog végrehajtani, amikor a mesterséges intelligencia egy adott állapotban van.

Most hogyan fogjuk csinálni? Térképezzünk fel mindent.

sV8-Gi7zqfM4YoWEXA-SCGw

Ez lesz az FSM-ünk hurokja. Először inicializáljuk az FSM-et, létrehozzuk az állapotokat, létrehozzuk az akciókat, és mindezt leképezzük. Miután leképeztük őket, most elindítjuk az FSM-et, és megadjuk az állapotot, amelybe a mesterséges intelligencia elindul. Most az AI egy adott állapotba fog váltani, és az FSM inicializálja az akciót, frissíti azt, amíg az akció be nem fejeződik, és elküld egy eseményt, amely jelzi, hogy az akció befejeződött. Végül az FSM visszamegy, és megváltoztatja az állapotot.

A másik dolog, ami állapotváltozást okoz, az az, amikor egy eseményt hívnak meg a mesterséges intelligencia logikáján kívül. Például amikor létrehozunk egy parancsnokot, és azt mondja az összes katonának, hogy ne mozogjon.

Ezzel véget ér az FSM bemutató első része. Remélem, hogy jól elmagyaráztam nektek az FSM-et. Ha még mindig nem érted, valószínűleg először mindent látnod kell működés közben, és mindent magadnak kell beolvasnod. Én így tanultam meg.
A következő részben először ismét néhány egyszerű, valós FSM megvalósítást fogunk megvitatni, és elkezdjük az egész FSM motorunk szkriptelését a semmiből!