Ako vytvoriť umelú inteligenciu pre nepriateľského slima

Poznámka: Dokončený projektový súbor k tomuto tutoriálu nájdete na konci tohto článku.
Úvod
V tomto tutoriáli vytvoríme umelú inteligenciu (AI) presvedčivého nepriateľského slizu pre hru v štýle plošinoviek. Pokryjeme niektoré pokročilejšie funkcie a správanie v hyperPad, takže tento tutoriál predpokladá základné znalosti s editorom hyperPad. Ak si myslíte, že sa potrebujete lepšie oboznámiť s vytváraním hry od nuly, môžete si najprv pozrieť Kompletný sprievodca - Vytvorenie plošinovej hry.
Aby sliz vyzeral "inteligentne", mal by robiť viac než len jednoducho sa pohybovať sem a tam a mal by mať celkom vedomie svojho okolia.
Znie to vzrušujúco! Ale predtým, ako začneme, mali by sme najprv podrobne popísať, ako by sa nepriateľský sliz mal správať:
- Sliz sa bude namiesto chôdze skákať doľava alebo doprava, aby sa pohyboval.
- Sliz bude skákať smerom k hráčovi.
- Ak je hráč príliš ďaleko, sliz sa nepohne (nečinnosť).
- Sliz odoberie hráčovi zdravie pri kontakte.
- Sliz je porazený, ak na neho hráč skočí.
Teraz, keď vieme, čo chceme robiť, poďme začať!
Časť 1: Nastavenie projektu
V tomto tutoriáli začneme nový projekt od nuly, aby sme to zjednodušili. Vytvorte nový projekt a nastavte ho na "Bočný pohľad", ostatné nastavenia môžete nechať na predvolené hodnoty.
Keď máte svoj nový projekt vytvorený, choďte do Knižnice majetku a zoberte „Platformer Starter Pack“ od hyperPad v obchode s majetkom. (Je to zadarmo!)
Teraz, keď máme nejaké majetky, s ktorými môžeme pracovať, vložte niekoľko blokov zeme a vytvorte svoj svet. Ak tam ešte nie ste, choďte do Knižnice majetku a klepnite na "Stiahnutia", potom na "Platformer Starter Pack".
Na obrázku nižšie sú umiestnené niektoré bloky zeme (v priečinku "Grass World") a bolo nastavené pozadie (v priečinku "Pozadia").
Teraz, keď máme peknú scénu na prácu, pridajme objekty Hráč a Sliz. Choďte do Knižnice majetku a otvorte svoju zložku "Stiahnutia", potom zložku "Platformer Starter Kit", ak nie sú už otvorené.
Na použitie ako hráč použijeme "Zeleného spacemen", takže klepnite na majetok zeleného spacemena, aby ste videli všetky jeho animačné cykly. Zároveň chceme, aby hráč jednoducho stál, takže klepnite na animáciu "Stoja" a umiestnite ju na scénu.
V rovnakej zložke v Knižnici majetku je tiež "Ružový sliz" animovaná postava. Perfektné na to, aby sme ho použili ako nepriateľa slima! Klepnite na majetok slima a vyberte animáciu "Pohyb" a umiestnite sliz na vašu scénu s vašou postavou hráča.
Doteraz je to dobré! Teraz máme náš objekt hráča a objekt sliz, pripravený na použitie. Ale ak by sme teraz hrali náš projekt, nemohli by sme interagovať s hrou. Takže, budeme musieť vytvoriť nejakú logiku, aby sme našej hre dodali život.
Časť 2: Ovládanie hráča
Skôr než sa dostaneme k práci na oživení nášho nepriateľa sliz, mali by sme najprv mať nejaké ovládanie hráča pre zeleného spacemana.
Klepněte na zeleného spacemana a nastavte jeho fyzikálny režim z "Stena" na "Fyzikálny", čo dovolí hráčovi voľne sa pohybovať. Potom klepnite na tlačidlo "Správanie", aby ste otvorili editor správania pre našu postavu hráča, aby sme mohli pridať nejaké ovládanie.
V editore správania pre našu postavu hráča už by ste mali vidieť osamelé Prehrať animáciu správanie. To správanie môžeme nechať na pokoji, ale môžeme mu pridať niektorých priateľov.
Pod interakciou umiestnite kdekoľvek Ovládač joysticku správanie, ako aj Skok s tlačidlom správanie. S týmito správaním je náš hráč teraz pripravený na ovládanie. Ale, chýba mu nejaká animácia.
Klepněte na správanie Ovládač joysticku a nastavte "Animáciu doľava" na animačný cyklus "Chôdza" v majetku Zeleného spacemana. Urobte to isté aj s "Animáciou doprava".
Teraz náš hráč chodí, ale ešte nestvára animáciu, keď skáče.
Klepněte na správanie Skok s tlačidlom a zmeňte "Animáciu pádu" a "Animáciu skoku" na animačný cyklus "Skok".
Ak teraz hráme našu hru, môžeme sa pohybovať a skákať! Teraz sa môžeme dostať k práci na našom neprajníkovi sliz.
Časť 3: Pohyb sliz
Ako sme podrobne popísali v úvodnej časti tohto tutoriálu, chceme, aby naš sliz skákal smerom k hráčovi. Aby to vedelo, náš sliz musím vedieť, kde sa hráč nachádza vo svete. Z tohto dôvodu by sme mali pridať Tag na našu postavu hráča, aby naše správanie mohli získať našu postavu hráča v akejkoľvek scéne.
Klepněte na postavu hráča a vyberte kartu Tag v dolnej časti zobrazenia vlastností. Napíšte "Hráč" do textového poľa na vrchu menu Tag a stlačte tlačidlo pridať (+) vedľa neho. Teraz je naša postava hráča označená tagom "Hráč".
Podobne ako sme to urobili s postavou hráča, klepnite na sliz a nastavte jeho fyzikálny režim z "Stena" na "Fyzikálne". Potom klepnite na tlačidlo Správanie, aby ste otvorili editor správania slizu.
V editore správania prejdite do sekcie Vlastné správanie a vložte správanie Časovač do editora.
Klepněte na správanie Časovač a nastavte jeho interval na 2 sekundy.
Toto bude začiatok našej logiky pre umelú inteligenciu slizu.
Myšlienka je, že každé 2 sekundy, náš sliz bude "premýšľať" o tom, čo robiť ďalej, napríklad: Má sliz skákať? Ak sa rozhodne skočiť, akým smerom by mal skočiť?
Ďalej prejdite do sekcie Transformovať správanie a umiestnite správanie Získať pozíciu. Klepnite naň a nastavte jeho cieľ na tag "Hráč", ktorý sme vytvorili skôr, klepnite na kartu Tag v dolnej časti jeho zobrazenia vlastností a vyberte "Hráč". Teraz pripojte Časovač k správaniu Získanie pozície.
Teraz vieme, kde sa náš hráč nachádza vo svete! Aby sme zistili, či je hráč vľavo alebo vpravo od slizu, musíme tiež vedieť, kde je sliz vo svete.
Potiahnite ďalšie správanie Získať pozíciu do editora. Predvolené správanie už cielené na náš sliz, takže nemusíme robiť nič iné, len to pripojiť k našej logike. Teraz pripojte Získať pozíciu pre hráča k Získať pozíciu pre sliz.
Voliteľné: Aby sme to urobili zrozumiteľnejším, premenoval som moje správanie Získať pozíciu, aby jasne uvádzali, čo sledovali: "Získať pozíciu hráča" a "Získať pozíciu slizu". To je voliteľné, ale ak by ste tiež chceli zmeniť názvy správania, môžete to urobiť tak, že klepnete na správanie a klepíte na jeho názov na vrchu zobrazenia jeho vlastností.
Doteraz máme to, že každé 2 sekundy sliz získa pozíciu postavy hráča a seba. Teraz, keď máme tieto informácie, môžeme určiť, či by mal sliz skočiť doľava alebo doprava.
Pod Logika kartu, vložte a pripojte správanie Ak. V jeho vlastnostiach nastavte prvú hodnotu na prvú pozíciu Získania (tag "Hráč") x-pozíciu ťahaním výstupnej hodnoty správania do poľa v vlastnostiach správania Ak. Pre druhú hodnotu ju nastavte na druhú pozíciu Získať (sliz) x-pozíciu. Nakoniec nastavte podmienku správania Ak na "Je menšia ako" (<).
Poznámka: x-pozícia objektu je hodnota predstavujúca, kde sa objekt nachádza vo svete na svojej x-osi. (Vľavo a vpravo)
Čo to všetko znamená? Správanie Ak skontroluje, či je x-pozícia hráča menšia ako x-pozícia slizu. Ak je uvedené vyššie pravdivé, vykoná sa nasledujúce pripojené správanie. To v podstate znamená, že ak je hráč ďalej vľavo ako sliz, bude sa pokračovať vo vykonávaní správania.
Teraz máme nastavenú logiku, aby mal sliz skočiť doľava, tak poďme to exactne tak spraviť!
Pod sekciou Fyzika správanie vložte a pripojte správanie Použiť silu k správanie Ak. V jeho vlastnostiach nastavte silu na: x = -0.5, y = 1. Potom nastavte multiplikátor na veľké číslo, 200 by malo stačiť.
Čo máme teraz, je to, že ak sliz zistí, že hráč je ďalej vľavo ako on, skočí nahor (y = 1 × 200) a trochu vľavo (x = -0.5 × 200).
Vyskúšajte to! Hrajte hru a otestujte, aby ste sa uistili, že všetko funguje. To, čo by ste mali vidieť, je sliz skákať doľava každé 2 sekundy, pokiaľ je hráč vľavo od neho. Ak presuniete hráča na pravú stranu sliza, mal by prestať skákať, kým sa opäť nepresuniete na jeho ľavú stranu.
Poznámka: Ak váš sliz sa nepohybuje, prejdite si predchádzajúce kroky, aby ste sa uistili, že ste nič nevynechali. Uistite sa, že správania sú správne prepojené a že gyroskopický režim slizu je nastavený na Fyziku (pohyblivé) namiesto Steny (nepohyblivé). Takisto čoskoro budeme opraviť problém, kde sliz sa niekedy prevráti na svoj bok alebo hore nohami.
Výborný pokrok až doteraz! Ak sa váš sliz skáče podľa očakávania, tak sme pripravení pokračovať. Doplňme ešte pohyby slizu tým, že mu umožníme skákať aj doprava.
Späť v editore správania slizu, duplikujte správanie Ak. Potiahnite a nalepte nové správanie Ak napravo od pôvodného správania Ak. Tým ho premeníte na správanie "Inak, ak".
Duplikujte aj správanie Použiť silu a pripojte ho k novému správanie Inak, ak.
V vlastnostiach Inak, ak zmeňte podmienku z "Je menšia ako" (<) na "Je väčšia ako" (>). Týmto to bude mať opačný účinok ako prvé správanie Ak. Ak správanie Ak nie je pravdivé, potom sa bude kontrolovať, či je Inak, ak pravdivé. Teda, ak hráč nie je vľavo od slizu, skontroluje, či je vpravo od slizu a pokračuje vo vykonávaní správania pripojených k Inak, ak.
Teraz by ste mali mať vetvu správania, ktorá vyzerá takto:
V druhom správaní Použiť silu (pod Inak-Na) zmeňte jeho vlastnosti tak, aby mala silu x = 0.5, namiesto x = -0.5. Teraz, namiesto skákania doľava, sliz skočí doprava.

Hrajte projekt a vyskúšajte ho znovu! Teraz by ste mali vidieť sliz skákať v smere, v ktorom hráč je. Výborné!
Možno ste si počas hrania všimli, že ak sa zrazíte so slizom, niekedy môže spadnúť na svoj bok alebo sa prevrátiť. Chceme, aby sliz zostal vzpriamený, tak to rýchlo opravme.
Späť v editore správania slizu prejdite k sekcii transformácie a vložte správanie Zablokovať rotáciu do editora. Nie je potrebné ho pripájať k inému správaniu, chceme, aby sa zablokovalo hneď, ako sa sliz vytvorí, takže ho môžete nechať tak. Keď to urobíte, skúste hru znova. Tentoraz by ste mali mať ťažkosti snažiť sa prevrátiť sliz na jeho bok.
Možno ste si tiež všimli, že animácia slizu sa prehráva príliš rýchlo. Ak sa vám to stáva, klepnite na správanie Prehrať animáciu v editore správania slizu a zmeňte Rámce za sekundu na oveľa menšie číslo. 6 rámcov za sekundu vyzerá naozaj dobre.
Super! Teraz sa náš sliz nielenže krásne hýbe, ale vyzerá aj skvele. Väčšinou je logika pohybu nášho slizu dokončená.
Avšak, chceme tiež, aby sliz skočil len vtedy, ak je hráč blízko. Takže ak si postavíme väčší svet, slizy ďaleko nebudú okamžite skákať a útočiť na hráča. V ďalšej časti sa pozrieme na pridávanie ďalšej podmienky, aby sme zablokovali logiku skákania, ak je hráč príliš ďaleko.
Časť 4: Nečinnosť sliza
V tejto časti implementujeme niektoré správanie slizu, ktoré mu umožňuje nehybať sa (to je, nečinnosť), keď je hráč príliš ďaleko.
Aby sme to dosiahli, musíme nájsť spôsob, ako zmerať vzdialenosť medzi našim slizom a hráčom. Našťastie existujú správanie k tomu, aby sa to dosiahlo! Poďme pracovať.
Otvoríme editor správania slizu a vložíme správanie Vypočítať vzdialenosť zo sekcie Logika. V jeho vlastnostiach správania je prvý objekt už nastavený na náš sliz. Pre druhý objekt prejdite na kartu a vyberte tag "Hráč".
Toto správanie, pri vykonaní, vypočíta vzdialenosť v metroch medzi našim slizom a hráčom. Pomocou týchto informácií môžeme zistiť, či je hráč príliš ďaleko tým, že skontrolujeme, či vzdialenosť prekračuje určitú hodnotu.
Umiesnite ďalšie správanie Ak zo sekcií Logika a pripojte ho pod správanie Vypočítať vzdialenosť. V vlastnostiach správania Ak nastavte prvú hodnotu na výstupnú hodnotu správania Vypočítať vzdialenosť. Nastavte podmienku na "Je menšia ako" a druhú hodnotu na 15.
Teraz máme spôsob, ako skontrolovať, či je hráč príliš ďaleko, tým, že zpozorujeme, či je vzdialenosť medzi slizom a hráčom menšia ako 15 (metrov). Ak táto podmienka nie je pravdivá, potom je hráč príliš ďaleko a správanie Ak nevykoná nasledujúce správanie.
Teraz, keď máme našu novú podmienku pripravenú pre použitie, odpojte Získať pozíciu (sliz) a staré správanie Ak z predchádzajúcej časti tutoriálu a urobte miesto pre našu novú podmienku. Môžete odpojiť správanie tak, že ťuknete a podržíte spojenia medzi správaním.
so

