5# Block breaker 1.

V této lekci nás čeká něco podbného jako je Atari Breakout. Musíme udělat nějakou práci s fyzikou, kolize objektů, ukazatele poškození jednotlivých bloků (pokud chceme aby je bylo potřeba trefit víc než jednou), nějakou hudbu/zvuky a konečně vznikne něco co bude opravdu hra.

Samozřejmě stejně jako ve většině programování není třeba vše od nuly. Můžeme používat věcí co už máme a vytvořili jsme je v předchozích lekcích. Tentokrát se nám bude hodit z Number Wizard přechod mezi scénami. Block breaker by měl mít víc levelů a to budou jednotlivé scény + menu a end screen. Začneme tedy tím, že si otevřeme předchozí projekt. Vybereme v horním menu Assets -> Export package. Zde bude trochu rozdíl jestli jste použili TextMeshPro, protože pokud ano tak se vám zde zobrazí jako složka. Já ve svém minulém projektu TextMeshPro nepoužil a tak jej ani v nabídce nemám. Každopádně potřebujeme SceneLoader.cs, potřebujeme naše scény (end, game a menu) a já si vezmu ještě font, protože ho chci použít znovu.

Pokud nemáte předchozí lekci u sebe můžete použít můj balíček. Projekt teď můžeme zavřít a přepneme se do unity hub, vytvoříme nový projekt. Opět 2D a jméno podle vás, já použiji Breakout. První krok co udělám je import balíčku. V novém projektu klikneme na Assets -> Import package a vybere balíček co jsme před chvílí vytvořili. Importujeme vše a můžeme začít upravovat pro aktuální projekt. Můžeme začít tím, že si otevřeme scénu menu. Pokud jste použili TextMeshPro nabídne vám Unity nyní import. Určitě mu to dovolte. Po načtení scény uvidíte, že místo obrázků máme bílé obdélníky a také, že náš text nedává úplně smysl s aktuální hrou. Na to nám bude stačit pár úprav, ale první co musíme upravit je poměr stran hry. Klikneme na v hierarchii na Canvas a v inspektoru máme “Canvas Scaler (Script)”. Minule jsme tam nastavili na 1920×1080 (16:9). To by pro Breaker hru nebylo ideální, většina klasických breaker her používá obrazovku 4:3 případně na výšku (9:16). My zůstaneme u více klasického vzhledu 4:3 a tak upravíme hodnoty na 1440×1080. Aby jsme měli i herní náhled ve 4:3 musíme ještě změnit v záložce GAME poměr stran na 4:3.

Předělat design úvodní obrazovky. Odstraníme prázdný obrázek a zbytek je na vás. Já zatím budu pracovat s tímto designem a případně ho předělám.

Tlačítko začít hru nám zatím nic dělat nebude, protože jsme neudělali pořadí scén. Proto dáme FILE -> Build Setting a přidáme scény, které chceme používat (Přesunutím z Assets do Build settings). Pokud ještě máte v Build SampleScene kliněte na ni pravým tlačítkem a vybereme Remove.

Můžeme Build setting zavřít a po zapnutí by nám mělo jít proklikat všechny scény (Začít hru -> Správně -> Znovu). Samozřejmě samotný Number Wizard fungovat nebude, protože nemáme jeho script. Pro lepší orientaci můžeme přejmenovat scény kdy očekáváme, že nebude více než jeden LVL a end nemusí být ten pozitívní, ale může to být game over. Začněte CTRL + S! Jinak můžete přijít o svůj re-design. Pak můžete dát pravé tlačítko na scénu a vybrat Rename. Já jsem použil jména Start/LVL 1 a GameOver. Jména by se nám měla automaticky upravit i v Build Settings.

Přesuneme se na LVL 1. Tam můžeme smazat prakticky vše uvnitř Canvas kromě tlačítka správně, které můžeme upravit na menší/nenápadné, ale zatím ho tam necháme pro testování. Také můžeme smazat GAME herní object, protože ten jsme měli pro napojení scriptu NumberWizard a ten připojený nemáme. Poslední změnou bude uprava Canvas rozlišení 1440×1080, stejně jako u první scény.

U GameOver uděláme úplně to samé. 1440×1080 a smazat/upravit text, odpovídal tomu o co se snažíme. Vše by mělo zatím fungovat a může to vypadat třeba takto:

Otevřeme si nyní LVL 1 a začneme upravovat. První co nás čeká je vytvoření složky na Sprites (herní objekty) nebude jich v případě naší hry moc, ale je to lepší je skládat na jedno místo. Dole v Assets si klikněte v pravém panelu na assets, tím se dostanete do úrovně nad složku Scenes a zde vytvoříme složku Sprites (Pravé tlačítko -> Create Folder). Do Sprites si importujte tyto soubory. Stačí rozbalit zip a přetáhnout soubory do Assets v unity. Měli by jsme mít míč, 3 bloky, pálku a pozadí hry. Samozřejmě nemusíte použít toto, ale pokud si přidáte něco vlastního snažte se dodržte stejné rozlišení u objektů a stejný poměr stran u pozadí.

Teď to bude malinko náročnější. V unity je hodně věcí vázáno s kamerou. Do teď jsme ji prakticky vůbec neřešili, ale již musíme. Otevřete si Main Camera a v inspektoru nás bude zajímat zatím pouze jedna věc, SIZE. Size určuje velikost kamery a díky tomu i velikost všech objektů ve hře. Velikost nemá jednotky a nemůžeme říct, že se jedná o cm/m/px, jsou to prostě jednotky (units). V základu má naše kamera velikost 5. To znamená od středu 5 nahoru. Její celková velikost je tedy 10 na výšku a šířka je (podle našeho poměru stran 4:3) 7,5 jednotky. Pro naše sprites je potřeba kameru zvětšit na 6. Aktuálně by naše Sprites byly příliš velké.

Nyní, pozadí hry. Stačí ho přetáhnout do scény, ale ještě nás čeká trochu nastavení. Po vložení zjistíte, že náš obrázek je opravdu miniaturní. Je přibližně stejně velký jako kamera a je ta tak malá, že při pohledu na celý canvas ji ani nevidíme.Přesuňte si obrázek do levého dolního rohu ke kameře a scénu si přibližte. Můžete použít dvojklik na Main Camera v hierarchii. Teprve, když obrázek nasunete do kamery objeví se vám v náhledu hry. I když má náš obrázek dobrý poměr stran nemusí nám sedět na kameru. Na každou jednotku (unit) se zobrazuje v základu 100 pixelů a pokud máte jako já obrázek ve větším rozlišení musíme upravit hustotu pixelů.

V Assets klikneme na obrázek pozadí. Myslím, že si většina z vás hned všimne položky Pixels per Unit, ale jako první si upravíme pivot obrázku. Klikneme na Sprite Editor a u pivot vybereme Bottom Left a nahoře klikneme na Apply. Toto by nám mělo připnout levý dolní roh obrázku na střed naší kamery. ,

Nyní můžeme přesunout kameru přes obrázek, ale ten nám úplně nebude sedět na kameru (v našem případě bude větší). Pro přesunutí kamery použijte nástroj “Move, rotate and scale selected objects”.

Konečně se dostáváme k úpravě hustoty obrázku. Víme že naše kamera má 12 jednotek na výšku (Nastavili jsme velikost 6). Obrázek co jsem vám dal já je vysoký 1944. 1944 / 12 = 162. Takže do Pixel per Unit dáme 162 a potvrdíme Apply v pravém dolním rohu.

Díky tomu, že jsme upravili pivot bod u obrázku, můžeme snadno přesně zarovnat obrázek s kamerou. V hierarchii si klikneme na space (jméno obrázku na pozadí) a hned první položka je Transofrm – Position. Nastavíme X i Z na 0. Pak se překlikneme na Main Camera. Ta má stále svůj střed a tak musíme zadat souřadnice středu kamery. Naštěstí souřadnice jsou v jednotkách (units) a velikost kamery známe. Díky tomu můžeme říct, že střed je 8X a 6Y (Kamera je 16:12 X 4:3).

Příprava pozadí zatím není úplně kompletní. Podstata pozadí je, že je vzadu. souřadnice Z, je ale u nás zatím 0 což je i výška ve které chceme mít pálku, míček a bloky. Proto musíme pozadí posunout dozadu. Klikneme znovu space a do souřadnice Z napíšeme 5. Pokud si chcete ověřit, že se to skutečně povedlo klikněte na 2D nad náhledem scény. Kamer má v základu -10, to znamená nad scénou.

Vraťte se do 2D pohledu a začneme přidávat sprites. Zde bude prostor pro to jak si hru představujete vy. Protože změnou Pixel per Unit měníte velikost jednotlivých Sprites. Můžete cílit malý míč a velké bloky nebo změna velikosti pálky bude mít vliv na obtížnost a tak dále. Pro začátek neskládáme kompletní level. Pouze hledáme správnou velikost objektů pro naši hru. Přetáhneme si do scény jeden míč, blok a pálku. A změnou Pixel per unit upravíme velikost.

Já jsem použil pro pálku 90, míč 175 a blok 125. Kdykoliv to můžu změnit ale zatím mi velikost vyhovuje takto.

Rovnou jsem si poskládal objekty nad sebe, protože nás čeká pohyb, FYZIKA a kolize objektů. Pro toto se v Unity používá RigidBody. Jsou dvě verze jedna je jen RigidBody a druhá je RigidBody 2D. Asi vás nepřekvapí, že první je pro 3D hry a 2D je pro 2D hry. RigidBody se bude přidávat všem objektům, které se mají pohybovat. Existují 3 druhy RigidBody. První je Dynamic, toto nastavení dává předmětům fyziku, která určuje pohyb předmětu. Druhé nastavení je Kinematic, pomocí tohoto nastavení určuje pohyb objektů script/hráč. A třetí nastavení je Static, kdy se objekt nepohybuje. Většina z vás již tuší, že tato hra bude potřebovat všechny 3 možnosti.

Začneme míče, klikneme si na něj v Hierarchii a v dolní části inspektoru klikneme na Add Component. Zde začneme psát “RigidBody”.

 

Zde by vám nemělo dělat problém najít Body Type, kde vidíte všechny 3 možnosti. Dokonce, když kliknete na Play míč by vám měl padat dolů.

Fyzika je krok jedna, nyní kolize.Stále pracujeme s míčem a přidáme další komponent, Collider. Colliderů je celá řada a my opět budeme v této hře potřebovat 3 různé, hlavně kvůli tomu, že máme 3 různé tvary objektů. Pro míč určitě bude potřeba Circle Collider 2D, pro blok bude Box Collider 2D a pro pálku bude pořeba Polygon Collider 2D. Přidejte zatím míči Circle collider 2D a přibližte si míč v náhledu scény. Měli by jste kolem něj vidět tenkou zelenou čáru naznačující collider. Zatím rozhodně není přesně kolem míče. Nejlepší způsob jak to opravit je kliknout na Edit Collider. Na zeleném kružnici se vám objeví 4 tečky. Ty můžete chytit a přesunout tak aby odpovídali stranám míče.

Na chování našeho míče to zatím nemá žádný vliv. Musíme ještě přidat Box Collider 2D našemu Bloku. V hierarchii klikneme na Blok (bb0 – můžete si přejmenovat), v inspektoru klikneme na Add component a přidáme Box Collider 2D. Není třeba měnit žádné nastavení, velikost vy měla být správná.

 

Další krok je přidat si collider k naší pálce. Budeme potřebovat Polygon Collider 2D a tak stačí kliknout na pálku v hierarchii, add component v inspektoru a vybrat Polygon Collider 2D. Sám by nám měl srovnat kolem pálky, můžete dodělat drobné detaily není není třeba, aby to bylo 100% přesné. Dejte si na chvíli blok stranou a vyzkoušejte jestli se míč zasekne na pálce. Je možné, že se vám míč začně kutálet na nějakou stranu pálky, není to něco co je třeba řešit protože tato situace ve hře nenastane. Míč se nám má odrazit. Aby se od sebe objekty odráželi musíme jim dát materiál. Připravíme si na naše materiály složku, Vrátíme se do Assets, pravé tlačítko, Create -> Folder. Pojmenujeme si ji Materials. Uvnitř této složky si zase dáme pravé tlačítko, Create -> Physics MAterial 2D a dáme mu jméno Bounce.

Tento materiál přiřadíme míčku tím, že jej přetáhneme na Ball v hierarchii. Nastavení Bounce má pouze dvě možnosti. Friction a Bounciness. Friction neboli tření pro nás nemá žádný vliv, ale Bounciness určuje sílu odrazu míčku. Pokud máme 0, míček se po dopadu zastaví. 1 znamená, že míček se odrazí do stejné výšky z jaké padal. 2 znamená, že se odrazí do dvojnásobné výšky než z které padal a tak dále. Zde je jak vypadá nastavení 1.1.

Jeden kosmetický detail je, že náš míč jak padá tak se i točí a díky tomu to nevypadá tak dobře jako bych chtěl. Pokud chcete zablokovat rotaci stačí v inspektoru míče, pod RiggidBody rozkliknout nastavení Constraints a zaškrtnout Z.

Zatím jsme používali kolize pouze pro odraz, ale kolize se používají i jako triggery (spouštěče) událostí. Dotknete se této věci a ztratíte život, nabouráte to do tohoto a rozbijete to, dotknete se tohoto a je konec hry. My začneme tím, že když nám míč spadne pod pálku přepne nás to na GameOver screen. První co musíme udělat je objekt. Náš sice bude pod obrazovkou a tak by to mohlo být prakticky cokoliv, ale je dobrým zvykem k tomu používat prázdné objekty (stejně jako na SceneLoader nebo herní mechaniky). Proto dáme pravé tlačítko do hierarchy a vybereme Create Empty. Ten se nám vytvoří uprostřed obrazovky, pro lepší organizaci si ho dáme do levého dolního rohu (souřadnice 0,0,0) tak, že v inspektoru klikneme pravým na transform a vybereme RESET. Určitě se také vyplatí objekt přejmenovat na něco co vám bude dávat smysl, třeba LoseCollider.

Další krok je vytvoření Collideru. Přidáme Component, Box Collider 2D a roztáhneme ho přes celou šířku obrazovky a umístíme ho přibližně o velikost míče pod spodní okraj obrazovky (aby míč mohl skutečně zmizet pod okraj obrazovky než člověk prohraje).

Nyní musíme Collider změnit na Trigger. Aktuální nastavení by fungovalo tak, že nejde prohrát. Když by míč minul pálku odrazil by se od našeho bloku zpět do hry. V nastavení Box Collider 2D je položka “Is trigger”. Samo o sobě to nic nedělá a ještě musíme přidat script, dáme přidat component “LoseCollider” a vybereme “New Script”.

V Assets si otevřeme nově vytvořený Script LoseCollider. Nebude potřebovat ani Start() ani Update(), protože jediný moment, kdy tento script bude něco dělat je, když dojde ke kolizi objektů. Také nebude žádná další třída volat tuto funkci a tak se bude jedna o private funkci, které nic nevrací (void). Tentokrát ale nemůžeme dát funkci jakékoliv jméno. Budeme používat funkci, která je již součástí unity a jmenuje se OnTriggerEnter2D. Visual Studio vám začne během psaní automaticky napovídat a přidá vám do závorek ještě Collider2D collision. Samotný obsah {} bude prakticky stejný jako byla funkce našeho původního tlačítka. Stejně jako tlačítko u tlačítka i tady potřebujeme knihovnu SceneManagement. Uvnitř závorek pak můžeme napsat SceneManager.LoadScene(). Zde se objeví ale změna proto tlačítku. To nás posílalo jen na další scénu, ale my budeme mít scén/levelů víc a tak musíme určit konkrétní scénu, na kterou chceme jít a to GameOver. Stejně jako ve většině programovacích jazyků i zde je potřeba text dát do uvozovek jinak by to bylo považováno za proměnnou.

Po uložení scriptu by se vám mohlo povést toto:

 

V další část začneme hýbat pálkou. Samozřejmě je množství způsobů jak takovou hru ovládat, ať už pomocí šipek nebo WASD, tlačítka ve hře a nebo něco nového a to myš. S klávesami i tlačítky jsme již pracovali, ale myš bude něco nového, budeme snímat polohu myši a pomocí toho budeme pohybovat pálkou doprava a doleva (nikoliv nahoru a dolů). Začneme tím, že si přidáme nový script. Klikneme na Paddle (p) v hierarchii, přidáme komponent Paddle a vytvoříme nový script. Otevřeme si ho ve Visual Studiu a začneme upravovat.

Nejdůležitější částí pro nás nyní bude funkce Update(), protože budeme chtít, aby pálka upravovala svoji polohu co nejpřesněji s pohybem myši, čili každý snímek. Později můžeme nastavit nějakou maximální rychlost pohybu. To nás alespoň prozatím nebude zajímat. První co musíme je získat polohu myši na obrazovce, provést to na jednotky (units) a pak to aplikovat na polohu pálky.

První část – získat polohu myši. Jednoduchý příkaz nám ji může vypisovat do konzole (Debug.Log) a od toho budeme pokračovat dál. X na konci příkazu znamená, že chceme pouze polohu X.

Toto by nám mělo do konzole vypisovat postupně polohu myši ve formátu: *číslo* UnityEngine.Debug:Log(Object). Pokud si stoupnete k levému a pak k pravému okraji obrazovky zjistíte že nejmenší číslo je 0 a největší je například 600. Maximální číslo totiž záleží na velikosti obrazovky. Aby jsme zjistili šířku obrazovky máme funkci Screen.width. Pokud vydělíme pozici myši šířkou obrazovky získáme poměr v jaké části obrazovky je. A to poté můžeme vynásobit šířkou obrazovky v jednotkách (16) a získáme polohu v jednotkách. Samozřejmě místo toho, aby jsme psali 16 přímo do kódu by bylo lepší použít serializované pole, ale v tomto případě asi již měnit nebudeme.

Debug.Log určitě nebude v našem finálním kódu, ale je to pro nás způsob jak si ověřit, že se nám vrací správné číslo. To ale nemůžeme uložit jako “obyčejnou” proměnnou. Pro ukládání polohy v unity se používá proměnná Vector. Vector má dvě varianty Vector2 a Vector3. Kdy rozdíl je jestli se jedná o polohu ve 2D prostředí nebo 3D. My použijeme Vector2, proměnnou si pojmenujeme paddlePos. Do ni můžeme rovnou ukládat dvě hodnoty. Pokud by jste si chtěli funkci vyzkoušet na statickém čísle musíte za číslo psát písmeno f (float), protože se nebudeme již pohybovat pouze v celých číslech. Pro změnu polohy použijeme příkaz transform.position = paddlePos.

Nyní musíme kombinovat naše 3 řádky kódu do dvou. Máme v Debug.Log převedenou polohu myši na jednotky, to dáme místo 4f a místo 5f můžeme použít například aktuální polohu pálky transform.position.y.

Teď sice se pálka pohybuje, ALE může se dostat mimo obrazovku a tak musíme kód malinko opravit. Existuje funkce Mathf.Clamp(), ta dokáže brát proměnnou a hlídat jestli je větší nebo menší než nastavené maximum a minimum. Pokud se tak stane vrací maximum nebo minimum. V našem případě bude může být minimum 0 a maximum 16. Hráč najede myší mimo obrazovku a místo toho, aby nám pálka jela mimo hru, Mathf.Clamp zjistí, že proměnná není 0-16, ale 28 a nahradí ji 16. Samozřejmě toto musíme nějak zapsat do kódu.

Maxima a minima bude lepší napsat v Unity, kde i snadno poznáme kde maxima a minima jsou. Nechceme totiž, aby nám pálka zajela z půlky do zdi (pozice se počítá ze středu objektu). Takže si vytvoříme dvě serializovaná pole minX a maxX.

Nyní rework kódu. Napřed vytvoříme proměnnou float, do které uložíme pozici myši převedenou na jednotky. Nazveme ji mousePosInUnits, aby to bylo 100% jasné. Pak proměnnou znovu uložíme přes Mathf.Clamp a nakonec upravíme náš Vector2, aby používal proměnnou mousePosInUnits. Dalo by se to napsat o řádek kratší, ale pro přehlednost to nechám takto.

Uložíme a jdeme do unity. Zatím to nebude fungovat, protože naše minX a maxX je 0 a tak jediné co by se stalo je, že se nám pálka přilepí na levý okraj a nebude se hýbat. Proto klikneme v hierarchii na Paddle a v inspektoru by jsme měli vidět naše Serializovaná pole minX a maxX. Pokud nechcete odhadovat kolik to je, můžete pálku přesunout ke kraji ve scéně a přepsat čísla z Transform – Position.

Nyní už by nám mělo vše fungovat a pálka by neměla vyjíždět z obrazovky ani když vyjedeme myší.

Samotný pohyb pálky už vypadá relativně dobře, ale hry většinou nezačíná tím, že by míč najednou padal doprostřed hry a hráč by musel to nejrychleji reagovat. Míč na začátku sedí na pálce, pohybuje se společně s pálkou a čeká na input hráče (stisk tlačítka), aby míč vyletěl. Proto si ve scéně posadíme míč na pálku, a vytvoříme pro něj script Ball (v inspektoru míče – >Add component -> napíšeme “Ball” -> New Script).

V první části uděláme zatím to, že míček bude sedět na pálce. Bude zde opět používat vektor2 a ne jeden. Budeme zde brát vektor2 pálky a k němu budeme přidávat rozdílový vektor2 míčku na pálce. Rozdílový vektor je to, že pokud chceme x u míčku a u pálky bude rozdíl 0. Pokud chceme míč přesunout nad pálku koukneme se, že pálka má Y 0,77, míček má Y 1,43, tak celkový rozdílový vektor bude X0 Y0,66.

První co musíme udělat získat polohu pálky. Proto si uděláme serializované pole, aby jsme ji mohli připojit. Tady jsou již důležitá jména. Koukněte se do Unity jak jste si pojmenovali pálku. U mě se jmenuje Paddle a proto můžu použít typ pro serializované pole Paddle a jediné co pak mohu připojit je Paddle. Proměnnou si můžeme nazvat paddle1.

V druhé části si založíme proměnnou pro rozdílový vektor2. Píšeme pod serializované pole. Vektor2 paddleToBallVektor;. Po dlouhé době také využijeme Start(), protože na začátku musíme získat rozdíl pálky od míčku a uložit to do proměnné paddleToBallVektor. Rozdílový vektor vypočítáme snadno transform.position (pozice míče) – paddle1.transform.position (pozice pálky).

V update budeme to celé používat. Máme zatím uložený rozdíl míčku od pálky, ale ještě musíme postupně aktualizovat pozici pálky, aby jsme podle toho mohli měnit pozici míče. Proto si založíme nový vektor2 se jménem paddlePos, do kterého si uložíme informace o tom, kde je X pálky a kde je Y pálky.

Když máme uloženou pozici pálky, víme jaký je rozdíl mezi pozicí pálky a míče, můžeme snadno tyto hodnoty sečíst a tím získat aktuální pozici míče.

To by nám mělo už fungovat a míček by nám měl sedět na pálce. Samozřejmě to není úplně hotovo. Ještě musíme přidat vystřelení míčku a trošku musíme přerovnat to co aktuálně máme. Už jsme ověřili, že nám držení míčku na pálce funguje a tak jej přesuneme do samostatné funkce a budeme jí pouštět jen na začátku hry. Aby jsme to celé nemuseli kopírovat vytvářet funkci a opět vkládat Visual studio má možnost “Refaktoring”. Označíme si dva řádky co jsme právě napsali, klikneme pravým tlačítkem a vybereme “Rychlé akce a refaktoring”, Visual studio nám nabídne Extrahovat metodu a vytvoří nám novou private funkci s názvem NewMethod. Když ji začnete přepisovat jméno, automaticky se upraví na obou místech.

Podobným způsobem jdou i vytvářet funkce. Budeme ještě potřebovat funkci LaunchOnMouseClick(). Pokud ji napíšete do Update a funkce neexistuje, bude červeně podtržená, stačí na ni kliknout pravým tlačítkem a vybrat “Rychlé akce a refaktoring” a hned vám to nabídne generovat metodu. Sice vám to tam přidá řádek “throw new …”, ale ten můžete smazat a je to rychlejší než funkci psát celou sám. Místo toho tam budeme psát podmínku (if), když stiskneme tlačítko myši 0 (levé tlačítko) udělej něco.

Místo //Něco musíme napsat vystřelení míčku, budeme upravovat RigidBody a díky tomu budeme simulovat vystřelení. Napřed musíme vzít component RigidBoddy, tam vybrat jeho rychlost a nahradit ji vektorem jak silně budeme na míček tlačit po ose X a Y. Toto bude určitě chtít testování a tak si na to připravíme dvě serializovaná pole, jedno pro pushX a druhé pushY obě typu float.

Poté nahradíme naše //Něco.

Samozřejmě ještě nemáme hotovo. Protože sice máme příkaz, pomocí kterého by jsme mohli vystřelit míček, ale jakmile ho vystřelíme vrátí se funkce LockBallToPaddle, která nám ho vrátí zpět. Trochu upravit Update a přidat další proměnnou. Ta bude typu BOOL. Bool je speciální typ proměnné co uchovává pouze informace true/false. Takže si do ni můžeme uložit například jestli byl míček již vystřelen. Pokud ne (false), bude probíhat i funkce LockBallToPaddle. Pokud bude true funkce se vypne. K tomu opět použijeme podmínku IF. Začneme ale vytvořením proměnné. Tu umístíme pod Vector2 paddleToBallVektor a její založení je velmi snadné “bool hasStarted = false”. Podmínku jsme již jednu dělali a to pokud bylo stisknuto tlačítko myši. Pokud chceme, ale udělat dokud není pravda dáme před podmínku ! (vykřičník) a do této podmínky zabalíme LockBallToPaddle.

Jako poslední musíme zajistit, aby po kliknutí se změnila proměnná hasStarted na true (hasStarted = true).

Uložit a zpět do unity. Tam v inspektoru míčku musíme nastavit sílu vystřelení. Můžete na začátek nastavit 2 a 10, případně zkoušet vlastní hodnoty.

Hra začíná dostávat celkem jasné obrysy. Ještě nás ale čeká dost práce. Hned ta první herní prostor. Ještě naše herní plocha nemá stěny ani strop a s tím rozhodně musíme něco udělat. Přidáme si 3 prázdné objekty a nazveme si je WallTop, WallLeft a WallRight. Všem těmto objektům dáme Box Collider 2D a uděláme z nich stěny. Princip je úplně stejný jako když jsme dělali LoseCollider jen to nebudeme měnit na Trigger.

Trochu se nám hierarchie začíná plnit a tak je dobré si pro organizaci přidat Prázdné objekty jako kategorie a pod ně přidávat další objekty. Já jsem si vytvořil prázdný object GameBoard a do něj jsem si dal vše co je na herní ploše kromě pálky míče a bloku.

Další nastavení, aktuálně náš míč pořádně ani nedoletí k horní stěně hry. To samozřejmě není dobře a space nemám jako pozadí náhodou. Aktuálně na náš míč působí gravitace. Když si rozkliknete míč a kouknete se do RigidBody najdete Gravity Scale. Aktuálně se hra snaží simulovat normální gravitaci země, ale pokud chcete můžete ji změnit na 0. Doporučuji vyzkoušet a možná míči trochu přidat startovní “Push” pro větší rychlost. Gravitace se dá nastavit i globálně, když si kliknete v horní liště na Edit -> Project Settings, tak pod Physics 2D najdete Gravity X a Y. Pokud obě změníte na 0 nemusíte pak nastavovat gravitaci 0 u jednotlivých objektů.

Stále to není dokonalé, ale pokračování v další lekci.

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