32# 1942 Classic 19.

V dnešní lekci přidáme skóre aby hra konečně dávala smysl. Protože konec nemá a jde jen o skóre a to jsme do teď neměli.

Budeme pracovat ve scéně Game, kde očekáváme, že budeme poprvé potřebovat skóre. Vytvoříme si prázdný objekt se jménem GameSession a přidáme mu script GameSession. Jako další si vytvoříme pole pro skóre. UI prvky vždy dáváme pod Canvas a přidáme si TEXT, můžete mu zatím předepsat nuly a dát ho na místo, kde budete chtít skóre. Poté mu přidáme script s jménem DisplayScore.

Na druhou stranu si dáme v další lekci životy. Zatím si otevřeme GameSession a vytvoříme si proměnnou na skóre.

Jako další nás čeká Singleton, budeme totiž chtít, aby hráč neviděl skóre jen během hry, ale i na GameOver obrazovce. Proto si přidáme Awake, SetUpSingleton().

Singleton si můžeme půjčit z Music.cs, kde ho máme obecně předepsaný, nebo ho můžeme napsat zvonu přímo pro gameSession.

Jako další budeme potřebovat předávat hodnotu skóre scriptu DisplayScore.cs. To znamená, že musíme udělat veřejnou funkci, který bude vracet score.

Jako další veřejnou funkci si uděláme AddToScore. Tu budou volat nepřátelé po zničení, kdy přidají ke skóre hodnotu, kterou pošlou v parametru. Takže, budeme moci udělat, že jeden nepřítel bude za 100 bodů, další za 150 a tak dále. Kdyby jsme hodnotu rovnou definovali zde, tak jediná možnost by byla, volat funkci víckrát a postupně přidávat skóre. To by určitě také fungovalo, ale není to rozhodně nejlepší řešení.

Jako poslední veřejnou funkci si uděláme ResetGame. Ten budeme volat poté co dá hráč, hrát znovu nebo menu na GameOver obrazovce. Tím zničíme GameSession, aby jsme mohli vytvořit po přechodu na hru novou, se skóre 0.

Uložíme a otevřeme si DisplayScore.cs. Zde budeme volat veřejnou funkci z gameSession, která nám bude vracet jaké má hráč skóre a to budeme zobrazovat v textu. Jako první ale musíme připojit knihovnu UnityEngine.UI, pomocí které můžeme pracovat s textem. Serializované pole dělat nemusíme, protože script je rovnou připojený k textu a tak ho nemusíme připojovat ve scriptu.

Aby jsme nemuseli každý snímek hledat, kde je Text a odkud voláme funkci, uložíme si ve Start jejich polohu do proměnných Text a GameSession. Ty pak budeme používat u Update pro zobrazení skóre.

Update pode pouze jeden řádek, kde vezeme scoreText a jeho component text, a uložíme do něj obsah co nám vrátí GetScore z GameSession. Jediné co musíme přidat je ToString, jako vždy, když proměnnou chceme zobrazit v textu.

Po uložení by jsme měli poznat jestli vše funguje tak, že po zapnutí hry se změní to, co jste měli napsané v Textu na jednu nulu. Přepneme se Enemy.cs donutíme ho nám dávat skóre. Jako první si uděláme serializované pole, kam si můžeme předvyplnit skóre nepřítele (později je můžeme upravit jednotlivě v inspektoru), takto ale předejdeme tomu, že by nějaký nepřítel dával score 0, pokud mu ho zapomeneme vyplnit.

Nyní musíme správně zavolat a umístit funkci AddToScore(). Ta v závorkách vyžaduje INT a je v objektu GameSession. Budeme ji chtít volat když zničíme nepřítele a to by mělo stačit k vytvoření tohoto řádku.

Máme hotovo, můžete uložit, přepnout do unity a každý nepřítel by vám měl přidat 150 bodů a u jednotlivých nepřátel, můžete upravit jednotlivé nepřátele. Není ale úplně hotovo. skóre se nám zobrazí jen na těch pár sekund po smrti a na GameOver obrazovce se nám nezobrazí. Proto si z textu “Score” uděláme prefab (přetáhneme ho do Assets -> Prafabs), uložíme scénu a přepneme se do GameOver scény, kde ho opět umístíme a upravíme, aby na obrazovku seděl.

Když se nám skóre ukazuje už i na GameOver obrazovce, čeká nás poslední problém a to, že nám skóre zůstává a pokračujeme stále dál. Musíme ještě použít poslední funkci, kterou jsme dnes vytvořili a toje “ResetGame”, který nám odstraní GameSession a dovolí nám založit novou. Budeme ji volat z funkce Level, kde máme načítání jednotlivých scén, a budeme ji chtít smazat vždy, když budeme načítat hru. Tu máme ve funkci LoadGame() a budeme volat funkci ResetGame, z objektu GameSession.

Hotovo. V další lekci, životy hráče.

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