03. Kolízie a fyzika

Pokračujeme v projekte z predošlej lekcie, otvorte si svoj projekt alebo si stiahnite hotový projekt:

MojaHra_02.zip

Základná fyzika

Naša loptička zatiaľ visí vo vzduchu. Ak budeme chcieť, aby sa game objekty správali ako fyzické telesá – narážali do seba, odrážali sa, padali – musíme ich naučiť poslúchať fyziku. K tomu slúži komponent RigidBody, ktorý pridáme na loptičku.

Označte si loptičku a v inšpektore kliknite na tlačidlo Add Component úplne dole. Je tu možné preklikávať celý strom všetkých možných komponentov, ale najrýchlejšie je nájsť RigidBody napísaním do vyhľadávacieho okna:

Vyskúšajte pustiť hru a loptička už spadne na stôl. Akurát spadne tvrdo ako kameň a nie pružne ako loptička. Unity totiž zatiaľ nevie, z akého materiálu loptička je. Preto jej pridáme fyzikálny materiál, ktorý ju naučí sa aj odrážať:

Vytvorte v assetoch nový asset typu Physic Material a nastavte mu v Inšpektore vlastnosť Bounciness na 1 a priraďte ho ako materiál na loptičku (Ak neviete ako priradiť materiál na game objekt, pozrite si predošlú lekciu.)

Loptička sa teraz už pružne odrazí od stola.

Dorobte pod loptičku naklonenú rampu, aby sme mohli vidieť jej pohyb po stole aj keď ešte nemáme urobenú interakciu s hráčom.

Vyrábame cieľ hry

Naša hra zatiaľ nemá cieľ. Cieľom stolného golfu bude dopraviť loptičku do diery v obrube stola.

Vyrobte v jednom z okrajov stola medzeru ako na obrázku nižšie:

Vyskúšajte hru, uvidíte, že loptička cez medzeru vypadne zo stola. To je dobrý začiatok. Unity ale zatiaľ nevie, že toto je náš cieľ. Pre počítač je to len nejaká medzera. Nevie, že ten prázdny priestor má pre nás nejaký význam.

Význam tomuto priestoru dodáme tým, že do neho umiestnime senzor, ktorý bude zisťovať, či do neho vošla loptička.

Ak chceme vedieť zistiť, či nejaký objekt vošiel do nejakého priestoru (napríklad loptička do medzery), umiestnime do tohto územia takzvaný collider.

Čo je to collider?

Je to komponent, ktorý funguje ako detektor dotyku s nejakým game objektom. Sám o sebe nie je vo výslednej hre viditeľný, ale ovplyvňuje správanie sa hry.

Viaceré z game objektov, ktoré máme v scéne už takýto collider majú. Napríklad plocha stola má na sebe komponent Mesh Collider, loptička má Sphere Collider a šikmá rampa zase Box Collider. Všetky majú za úlohu zisťovať, či práve nedošlo k nejakej kolízii a keď došlo, tak sa fyzikálny program v Unity podľa kolízie zmení pohyb objektov. Keď loptička pri páde príde do kolízie s priestorom rampy, Unity prepočíta jej pohyb a namiesto pokračovania v páde kolmo nadol sa začne loptička pohybovať šikmo po povrchu rampy.

Ale na ktorý game objekt pridáme tento komponent? V medzere chceme predsa zachovať viditeľnú medzeru. Použijeme teda nový prázdny game objekt.

V hlavnom menu zvoľte GameObject > Create Empty a pomenujte novovytvorený game objekt Exit.

Na game objekt Exit pridajte komponent typu Box Collider.

Prázdny game objekt s komponentom Box Collider.

Presuňte a naškálujte Exit tak aby vypĺňaj dieru v okraji stola.

Skúste teraz pustiť hru, zistíte, že Exit funguje ako neviditeľná bariéra, cez ktorú loptička nevypadáva von. Je to preto, že štandardne každý collider funguje ako bariéra. My ale chceme, aby tento collider nefungoval ako bariéra, ale ako senzor, ktorý zaregistruje, keď do neho vojde guľa. Takýto senzor sa v Unity volá trigger.

Zapnite v Box Collider komponente na game objekte Exit možnosť Is Trigger

Na koniec pridáme na Exit ešte skript, ktorý zatiaľ spôsobí len to, že sa loptička pri prechode exitom vyparí.

Stiahnite si skript Exit.cs do assetov.

Priraďte z assetov skript Exit na game objekt Exit. Môžete to urobiť pretiahnutím z assetov alebo aj cez Add Component v inšpektora (ako sme pridávali RigidBody)

Hotový projekt po skončení tejto lekcie: MojaHra_03.zip