25# 1942 Classic 12.
Na začátek si můžeme udělat pořádek v serializovaných polích. Bude to hodně na vás jak si zorganizujete pole, ale pokud chcete si pole rozdělit na kategorie, například v Player.cs máme moveSpeed, projectile, projectile speed a firerate. Kdy si můžeme rozdělit pole na hráč a projectile.
Toto se vám bude určitě hodit v budoucnu, kdy budete mít ještě více proměnných u jednoho scriptu.
Když to máme roztříděné začneme přidávat. Jako první životy hráče. Zařadíme pod Player.
Nyní si můžeme půjčit kus kódu z Enemy.cs, protože stejně jako Enemy i hráč pokud se dostane na 0 a méně životů bude zničen. To celé máme rozepsané v OnTriggerEnter2D. Stačí CTRL + C a CTRL + V.
Nyní uložit a do Unity. Vybereme si Player prefab a přidáme mu Pollygon Collider. Sám se nastaví relativně přesně, ale pokud chcete můžete ho upravit velmi detailně.
Nyní si můžeme přidat k EnemyLaser CapsuleCollider2D, z předchozí lekce víme, že to bude dělat problémy a ty budeme později řešit, ale zatím musíme vyzkoušet jestli fungují životy hráče a jeho zničení. Proto add component -> Capsule Collider 2D a zaškrtnout Is Trigger.
Nyní můžeme udělat krátký test jestli vše funguje.
Odpověď je ano i ne.
Co nám funguje:
- Střely ubírají životy
- Nepřátelé střílí
- Hráč střílí
- Nepřátelé i hráč jdou zničit
Co nám nefunguje / Co je špatně:
- Hráč se může zničit tím, že střílí
- Nepřátelé se ničí navzájem
- Střely prochází skrz hráče i nepřátele
- Po zničení hráče hra pokračuje
Začneme tedy opravovat. Toho čeho chceme docílit je, aby hráčovy střely ničily pouze nepřátele a střely nepřátel ničily pouze hráče. K tomu můžeme použít vrstvy (layers) kde můžeme určit, která vrstva může kolidovat s čím. Aktuálně máme 5 přednastavených vrstev, ty najdete v Edit -> Project Settings -> Physics 2D.
Zde můžeme zaškrtávat, který vrstva může interagovat v jakou vrstvou pomocí kolizí. My si vytvoříme 4 nové vrstvy (Hráč, nepřítel, střely hráče a střely nepřítele) a podle toho nastavíme kolize v Layer Collision Metrix.
Vrstvy (Layers) se vytváří na stejném místě jako jsme dělali Tagy (V horní části inspektoru). Proto si otevřeme Assets -> Prefabs. Vybereme si na začátek hráče (Player) a v inspektoru máme Layer: Default. Rozklikneme, vybereme Add Layer a můžeme si zde všechny vrstvy předepsat.
Poté si klikneme znovu na Player prefab a nastavíme vrstvu na Player. Poté přiřadíme jednotlivé vrstvy všem objektům jak jim náleží.
Nyní se vrátíme do Edit -> Project Setting -> Physics 2D. Vše nám v základu s sebou koliduje. To určitě nechceme a snad vám toto nastavení bude dávat smysl.
Udělejte si test, kdy hráč již se nezničí tím, že začne střílet, nepřátelé se neničí navzájem ani sebe a čeká nás poslední oprava, aby se ničili střely. Bude nám na to stačit přidat dva řádky, jeden k zásahům střel hráče a druhý k zásahům střel nepřítele. Přepneme se do Visual Studia a začneme v Player.cs, ve funkci OnTriggerEnter2D. Napřed budeme chtít odečíst životy a poté zničit střelu. Tu již máme napsanou jako “dmg” a tak nám stačí dmg.Hit() – Funkce Hit() uvnitř DMG má napsáno Destroy(gameObject).
To samé uděláme v Enemy.cs a máme hotovo.
0 Comments