Finite State Machines [Part 1] – Unity Development Resources from TKoU
Finite State Machines ar putea fi ceva ce toți dezvoltatorii ar fi putut auzi cel puțin o dată în cei câțiva ani în care au început să dezvolte jocuri în Unity.
Ce este o Finite State Machine? Ei bine, sunt multe de acoperit și de aceea vom face cel puțin 3 părți. Practic, un Finite State Machine (sau FSM) este un model de proiectare în care intră în joc automatizarea. Utilizat în mod obișnuit în implementările AI pentru anumite comportamente. De exemplu: mersul pe jos, atacul, mersul în gol etc. FSM poate fi implementat și în NPC-uri și este cel mai des întâlnit în RPG-urile Open World.
Să tratăm FSM-ul ca pe un supraveghetor:
Acum, supraveghetorul verifică starea unei AI. În funcție de stare, AI-ul va reacționa la aceasta. De asemenea, în funcție de tipul unui AI (dacă este de tip zburător, sau de tip terestru, sau de tip înot) este acțiunea pe care o va face AI-ul. În acest scenariu, FSM îi spune AI-ului că se află în „Starea de patrulare” și îi va spune AI-ului să „meargă de la A la B”. Cu excepția cazului în care nu există o schimbare de stare, AI va merge doar de la A la B.
Pentru a schimba starea, mai întâi trebuie să avem o condiție. În imaginea din stânga, AI-ul îl vede pe jucător și îi spune supraveghetorului. Acum supraveghetorul va schimba starea AI-ului și va începe să atace.
Din nou, AI-ul începe să patruleze din nou, deoarece jucătorul nu se află în raza sa vizuală.
După cum se vede în aceste desene prost făcute, fiecare stare are condițiile sale înainte de a trece la alte stări.
Să ne uităm la diagrama de mai jos.
Aici este o diagramă a stărilor unei AI normale. Liniile roșii reprezintă falsul pe condiția care este necesară pentru a se schimba în stare. Diagrama este destul de simplă. AI-ul va fi în stare de inactivitate dacă ajunge la destinație și viceversa. Dacă vede un inamic, va începe să atace. FSM-ul se ocupă acum de toate tranzițiile între stări și ajută AI-ul să facă acțiunea care este disponibilă pentru acea stare.
Acum să descompunem sistemul nostru FSM.
- Sistemul FSM principal – Acesta va fi cel care va controla stările AI-ului și va verifica dacă condițiile dintre stări. Sistemul FSM principal va conține toate stările și va gestiona apelurile de evenimente de la acțiunile FSM.
- FSM State – Acesta determină starea curentă a IA și conține toate acțiunile care sunt plasate pe IA.
- FSM Action – Aceasta va fi acțiunea pe care IA o va face atunci când IA se află într-o anumită stare.
Acum cum vom face acest lucru? Haideți să cartografiem totul.
Aceasta va fi bucla FSM-ului nostru. Mai întâi inițializăm FSM-ul, creăm stări, creăm acțiuni și le mapăm pe toate împreună. După ce le-am cartografiat, acum vom porni FSM-ul și vom indica starea la care va porni AI-ul. Acum, AI va trece la o anumită stare, iar FSM va inițializa acțiunea, o va actualiza până când acțiunea se termină și va trimite un eveniment care indică faptul că acțiunea s-a terminat. În cele din urmă, FSM-ul se va întoarce și va schimba starea.
Un alt lucru care va provoca o schimbare de stare este atunci când un eveniment este apelat în afara logicii AI. Ca atunci când creăm un comandant și le spune tuturor soldaților să nu se mai miște.
Aceasta încheie prima parte a tutorialului nostru FSM. Sper că v-am explicat bine FSM-ul. Dacă încă nu înțelegeți, probabil că va trebui să vedeți mai întâi totul în acțiune și să vedeți scanând totul de unul singur. Așa am învățat și eu.
În partea următoare, vom discuta mai întâi din nou câteva implementări FSM simple din viața reală și vom începe să scriptăm întregul nostru motor FSM de la zero!
.