pátek 27. května 2016

Teach Vision: První hra v Unity část II.

SOUBORY KE STAŽENÍ

Stáhněte si soubory s grafikou a kartičku: ZDE. Obsah rozbalte a soubory nahrajte do Unity tak, že v menu Assets zmáčknete na položku Import New Asset... Všechny naráz nepůjdou, tak se nelekněte a importujte je jeden po druhém. Při importu se v Inspektoru vždy objeví údaje, které ovlivňují chování našeho assetu. U grafiky vyberte: Texture type: Texture, Wrap mode: Repeat, Filter mode: Point, Format: Crunched.

NÁŠ DESIGN DOKUMENT

Jako první hru budeme tvořit Pexeso, které je myslím velmi jednoduché na začátek.

1. Sestrojíme kartičky s osmi odlišnými obrázky, a to znamená, že na obrazovce bude celkově šestnáct karet (viz pravidla hry Pexeso), otočených obrázkem dolů.

2. Ovládání bude skrze myš, levým tlačidlem se vyberou/otočí karty, jedna po druhé. Pokud se neshodují, otočí se zpět, v opačném případě zmizí a hráči přibude skóre.

3. Budeme mít dva herní módy: proti CPU a lokální multiplayer.

UPOZORNĚNÍ

Kratičké upozornění: Jde o můj vůbec první návod, který navíc dělám sám ve volném čase a tím pádem nemůžu zaručit jeho bezchybnost, a vlastně jej nemůžu ani (pořádně) otestovat. Byl bych tedy rád, pokud najdete nějakou chybu, abyste mi napsali do komentářů, a já ji následně opravím.

PRVNÍ KROKY

Potřebujeme si vytvořit prázdný objekt, který bude sloužit jako nositel našeho skriptu / herního manažeru: Menu > GameObject > Create Empty

V okně Hierarchy na něj dvakrát poklepeme (či jej označíme a stiskneme klávesu F2) a pojmenujeme ho jako GameManager.

Vytvořte první skript: Menu > Assets > Create > Javascript
Pojmenujte ho GameM, myší ho přetáhněte (z okna Project do okna Hierarchy) na náš herní manažer GameManager. V okně Project klikněte na náš nově vytvořený skript. Otevře se skriptovací prostředí Mono Develop.

NÁŠ PRVNÍ SKRIPT

Karty můžeme vytvořit v Unity editoru tak, že do Hierarchy vložíme pexesoKartaLow.FBX, vytvoříme nový materiál, ten dáme na objekt v okně Project a v materiálu pak vybereme texturu. Proč to ale dělat tak složitě - jednoduše, když si karty můžeme vyrobit kódem?!

Vše vymažte. Na první řádku našeho skriptu napište následující (Unity díky této knihovně bude moci vytvořit dynamické seznamy):

import System.Collections.Generic;

Vytvoříme si první proměnné:

1. Seznam karet: pole, které bude obsahovat obrázky. Díky tomuto seznamu pak později snadno přidáme nové karty. Nestačí vám osm základních kartiček? Stačí nakreslit novou a tu poté přidáte do tohoto seznamu, a již více není třeba, kód vše obstará za vás.

var kartySeznam : Texture[];

2. Materiál karet: Karty sice budou mít každá jiný obrázek, materiál bude ale zapotřebí jen jeden. Pro všechny stejný.

var kartaMaterial : Material;

3. Model karet: Odkaz na 3D model, na nějž později přidáme materiál.

var kartaMesh : Mesh;

4. Pořadí karet: Číselné odkazy na naše karty. Co číslo, to karta. Později ve funkci CreateSeznam() tato čísla zduplikujeme, aby ve hře bylo každé číslo dvakrát.

var kartaPoradi : List.<int>;
5. Vytvoříme funkci CreateSeznam(): s pomocí této funkce vytvoříme seznam, který bude obsahovat šestnáct identifikačních čísel, resp. dvakrát osm (unikátních karet je osm).
function CreateSeznam()
{
    for(var j : int =0;j<pocet/2;j++)
{
kartaPoradi.Add(j+1);
kartaPoradi.Add(j+1);
}
}

V této funkci potřebujeme naplnit pole kartaPoradi čísly 1 až 8, přičemž je potřeba mít každé číslo dvakrát. Napíšeme tedy příkaz k přidání čísla dvakrát po sobě a tento příkaz přidáme do smyčky "for", která se zopakuje tolikrát, kolik jí řekneme: "j < pocet/2".

K našim proměnným nahoře je tak potřeba ještě přidat proměnnou int pocet - počet karet na začátku hry:
var pocet : int = 16;
U funkce CreateSeznam() potřebujeme, aby se spustila na začátku našeho programu, odkaz na ni zapíšeme tedy do funkce Start().
function Start()
{
    CreateSeznam();
}

K zamíchání karet potřebujeme vytvořit další funkci, která bude vypadat následovně:

function ShuffleKarty()
{
for (var i : int = 0; i < pocet; i++)
{
     var tempKarta : int = kartaPoradi[i];
        var randomIndex : int = Random.Range(i, pocet);
        kartaPoradi[i] = kartaPoradi[randomIndex];
        kartaPoradi[randomIndex] = tempKarta;
    }
}
Odkaz na funkci opět přidáme do Startu, za CreateSeznam(). V této chvíli nám program naplní seznam kartaPoradi čísly od 1 až 8, vždy dvakrát. Funkce ShuffleKarty() tato čísla v seznamu kartaPoradi náhodně zamíchá, aby každá nová hra byla unikátní. Ve smyčce for máme dvě proměnné v privátním módu - z důvodu, že je jinde v kódu použít nepotřebujeme.

V další části již sestrojíme naše karty pomocí kódu a balíček pak umístíme na stůl obrázkem dolů. Možná stihneme i vytvořit skript, pomocí kterého se kartička po kliknutí obrátí obrázkem nahoru.

zeal

0 komentářů:

Okomentovat