7# Block breaker 3.

V minulé lekci jsme zprovoznili audio, ale stále ještě nemáme celkem důležitou část. Hra ještě nepozná, že máme všechny bloky zničené a tak nemůže hráče poslat do dalšího levelu. Proto napíšeme script, který bude počítat bloky, které máme ve hře a postupně bude počítat během ničení jestli již jsou všechny pryč. Pracujeme opět v lvl 1, přidáme do hierarchie prázdný object (pravé tlačíko -> Create Empty). Pojmenujeme si ho Level a přidáme mu v inspektoru script se stejným jménem. Otevřeme si ho ve Visual studiu.

Jako první si založíme proměnnou, ve které budeme mít uchovaný počet proměnných. Nazveme ji breakableBlocks, a bude ve formátu INT, protože se bude jednat pouze o celá čísla. Také můžeme odstranit metody Start() a Update(), nebudeme je potřebovat. Místo toho si vytvoříme veřejnou funkci, CountBreakableBlocks.

Tato metoda/funkce vždy, když je zavolána přičte jedna k proměnné. Když pouze chceme přičíst 1 k proměnné nemusíme dělat dlouhý zápis breakableBlocks = breakableBlocks + 1; ale stačí použít ++, které říká zvýšit o 1.

Nyní musíme udělat způsob jak funkci zavolat tolikrát kolik máme bloků ve hře. Počítání, kolik bloků máme budou počítat samotné bloky a tak se přesuneme do třídy break.cs. Zde musíme přidat metodu Start(), kterou jsme předtím odstranili a ta na začátku bude volat funkci pro počítání bloků, protože to udělá každý blok, získáme tím celkový počet bloků. Aby jsme ale mohli funkci jiné třídy volat musíme ji “najít”, Pro to budeme používat funkci FindObjectOfType, pomocí které si uložíme herní object level do proměnné, aby jsme ho nemuseli hledat pro každý blok, který máme ve hře. poté necháme blok zavolat funkci CountBreakableBlocks.

Na začátek budeme potřebovat proměnnou, do které si uložíme nalezený herní object Level, na který máme napojenou třídu level.cs. Bude se jednat o typ Level s jménem level. K tomu si ještě vytvoříme funkci Start().

Uvnitř funkce Start() zapíšeme do proměnné a pak zavoláme funkci,

Zatím nemáme možnost jak ověřit, že naše počítadlo bloků funguje, ale pokud v level.cs upravíte proměnnou breakableBlocks na serializované pole uvidíte jeho obsah v inspekoru. Stačí před int breakableBlocks dopsat [SerializeField]. Vše si uložte a přepněte se do unity. Zde si v hierarchii rozlikněte Level a zapněte hru. V inspektoru pak uvidíte počet bloků v levelu.

Když už máme bloky spočítané, můžeme zjistit, jestli jsme je i všechny zničili. Proto v Level.cs vytvoříme novou metodu BlockDestroyed(). Ta bude odečítat od proměnné 1 a později i hráče přepne na další level, pokud počet bloků bude 0.

Napřed ale vytvoříme funkci a zapíšeme odečtení 1 od breakableBlocks. Opět můžeme použít zkrácený zápis –.

Další částí je podmínka jestli je počet breakableBlock menší nebo rovno 0. Menší nebo rovno se zapisuje prakticky stejně jako jej vyslovujeme a to jako < (menší) a  = (rovná se). Vše bude součástí podmínky IF.

Načtení další scény máme již napsané a je připojeno na herní object SceneLoader. Vytvoříme proto proměnou sceneloader typu SceneLoader, přidáme funkci Start() a do ni zapíšeme prakticky to samé jako jsme použili v break.cs.

Jako poslední musíme nahradit poznámku funkčním řádkem. sceneloader.LoadNextScene();

Visual Studio nám zde přímo píše, že je 0 referencí na tuto funkci. To je proto, že ji ještě nikde nepoužíváme. Proto se přepneme do Break.cs a přidáme ji za rozbití bloku Destroy(gameObject);.

Vše uložíme a přepneme se do unity. Zde nás čeká ještě pár úprav než se budeme moci vrhnout na testování. Napřed snížíme počet bloků na 1. Rozhodně nechceme testovat jestli jde jít do dalšího levelu tím, že budeme muset rozbít všech 28 bloků. Také musíme upravit Build Settings (file -> build settings), kde nemáme přidaný LVL 2. Samozřejmě musíte i opravit pořadí.

Poslední krok. V LVL 1 máme vytvořený object Level. Uděláme si z něj Prefab (Přetáhnout do Assets -> Prefab) a pak jej přidáme do LVL 2.

Už to skoro vypadá, jako že je hra hotová a jediné co stačí je udělat hromadu levelů. Bohužel. Ještě nás čeká Scóre, bloky co chtějí víc než jeden hit, zabránění zaseknutí míče a další drobnosti.

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