8# Block breaker 4.

Během testování hry jste určitě narazili na pár problémů ohledně rychlosti hry/míčku. Aby jsme mohli snadno měnit rychlost hry existuje funkce time.timescale, která upravuje rychlost hry. Výchozí hodnota je 1 a pokud ji nastavíme na 0.5 bude hra probíhat poloviční rychlostí. Pokud na 2 bude to dvojnásobná rychlost. Samozřejmě to můžeme i využít tak, že každý level bude o trochu rychlejší než ten předchozí. Fantazii se meze nekladou. Aby jsme mohli rychlost snadno upravovat vytvoříme si prázdný herní object, který pojmenujeme GameStatus a přidáme do něj script se stejným jménem jako component. Script si otevřeme.

Naším cílem bude udělat slider, kterým budeme moci v Unity upravovat rychlost hry. Proto si vytvoříme Serializované pole se jménem gameSpeed a typem Float (budeme potřebovat i desetinná místa). Do update si přidáme funkci Time.timescale, která se bude rovna gameSpeed.

Nyní by jsme v unity v inspektoru měli vidět klasické pole, do kterého můžeme zapisovat. Bohužel nám dovolí zapsat jakékoliv číslo včetně záporných. Proto přidáme povolený rozsah (Range) a předvyplníme výchozí hodnotu 1. Range nám dovolí do závorek napsat napřed minimum a pak maximum. Pokud chcete dosazovat do proměnných celé číslo tak, tak aby se chovalo jako float (číslo s desetinným místem) stačí za něj napsat f.

Kromě toho, že jsme nastavili maximum i minimum tak se nám i pole změnilo na slider, kterým měníme rychlost hry. Je třeba GameStatus přidat mezi Assets -> Prefabs a rozkopírovat do dalších levelů.

Máme hotovo a do budoucna můžeme například přidat funkci co nám bude zvyšovat rychlost hry o 0.01 po každém rozbitém bloku. Což by byla zajímavá herní mechanika. Pokračujeme ale dále něčím co hráči očekávají a to je skóre. K tomu použijeme opět objekt Game Status. Zatím tam budeme zobrazovat skóre v inspektoru později i na obrazovce. Budeme potřebovat class Break.cs a GameStatus.cs. Začneme v GameStatus, kde si vytvoříme dvě serializovaná pole. Jedno bude pro samotné skóre a druhé bude o kolik se má skóre zvýšit při zničení jednoho bloku. Obě proměnné budou ve formátu int a do scoreGame budeme rovnou ukládat 0 jako počáteční skóre.

Také si vytvoříme veřejnou funkci, která bude zvyšovat scoreGame o oneBlockPoints.

Nyní musíme tuto funkci volat při zničení bloku. Funkci, která se spouští po zničení bloku již máme a tak se přepneme do Break.cs. Stejně, jako když jsme z bloku volali funkci level.BlockDestroyed(), stejným způsobem musíme připravit i UpdateScore. Napřed vytvoříme proměnou gamestatus typu GameStatus. Ve funkci start uložíme do proměnné to co najdeme pomocí FindObjectOfType<GameStatus>(). A nakonec po zničení bloku zavoláme funkce gamestatus.UpdateScore().

Uložíme a v unity zapíšeme kolik chceme, aby bylo skóre za jeden blok. Zároveň si můžeme nechat otevřený inspektor pro GameStatus a vyzkoušet jestli skóre funguje.

Zatím hráč skóre nevidí, ale to se brzy změní. Textové elementy se zobrazují na canvas, ten máme aktuálně schovaný uvnitř GameBoard. Jedinou věc, kterou tam pravděpodobně ještě máte je tlačítko pro další Level. S ohledem na to, že další lvl se již načte sám nebudeme tlačítko už potřebovat a můžeme ho smazat. Místo toho musíme přidat textové pole, do kterého budeme psát scóre. Aby jsme jej nemuseli přidávat dvakrát v každém LVL můžete kliknou na malou šipku vedle GameBoard a upravovat přímo Prefab. Pravé tlačítko na UI -> TEXT, předepíšeme pár čísel a umístíme do levého horního rohu. 

Všechny scény by měli automaticky obsahovat výchozí skóre. Ještě musíme udělat to, aby se nám skóre upravovalo. Proto si otevřeme ve VisualStudiu GameStatus.cs a začneme náš script ještě rozšiřovat. První co přidáme je knihovna. Pracujeme s textem neboli UI. Proto using UnitiyEngine.UI. Poté vytvoříme Serializované pole pomocí kterého budeme připojovat textové pole ke scriptu. Bude typu Text a bude se jmenovat scoreText. Toto neděláme poprvé a pokud chcete používat TextMeshPro koukněte do předchozí lekce jak na to.

Již jednou jsme používali funkci “ToString”, která vezme například int a promění ho na text, který můžete zobrazit v textovém poli. To samé musíme použít teď. Do proměnné scoreText ulozíme obsah proměnné scoreGame přes ToString. To musíme udělat na dvou místech. Napřed na začátku hry, aby jsme nastavili skóre na 0 a poté při každé změně skóre (UpdateScore).

Jako poslední musíme v inspektoru GameStatus v Unity připojit Textové pole. Nyní by mělo skóre fungovat.

Nyní naše hra má scóre, ale pouze pro jeden lvl a v další začínáte opět od nuly. To není ideální a v příští lekci to napravíme.

0 Comments

Submit a Comment

Your email address will not be published.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Share This