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

Submit a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Share This