Jak vytvořit herní menu v Unity. Vytvoření hry v Unity s malým týmem: technologické funkce

Proto tímto příspěvkem otevírám sérii tutoriálů pokrývajících hlavní body práce s objektem (cyklus neznámého trvání – pokud to někomu přijde užitečné, budu pokračovat).

Hned řeknu, že abych snížil bariéru vstupu, řeknu to s ohledem na lidi, kteří nikdy v životě nic takového neudělali. Protože nejjednodušší způsob, jak implementovat hlavní funkcionalitu, je vytvořit jednoduchou střílečku, začneme s tím. V tomto návodu si povíme, jak vytvořit zemi, oblohu, ovladatelnou postavu, o kameře, přes kterou se budeme dívat na oblohu a slunce a něco málo o střílení červených kuliček na bílé kostky. Tak pojďme...

Pojďme to začít

Předstartovní příprava
Nejprve si stáhněte a nainstalujte samotnou Unity na offsite a vyberte si licenci s cenovkou zdarma. Můžete si také stáhnout třicetidenní zkušební verzi UnityPro, záleží na vašem vkusu.

Při prvním spuštění se zobrazí okno Průvodce projektem (uvidíte jej prázdné):

Pro obecné informace si můžete otevřít přiložené BootcampDemo, které se ve Windows nachází kupodivu v „DocumentsAndSettings\AllUsers\Documents\Unity Projects\Bootcamp Demo“.
Chcete-li pokračovat v našem školení, přejděte na kartu Vytvořit nový projekt a zaškrtněte políčka u sad standardních herních objektů a skriptů, které budeme potřebovat. Budeme potřebovat

  • Ovladač postavy
  • Částice
  • Fyzikální materiály
  • Skripty
  • Skyboxy
  • Terénní aktiva
  • Tvůrce stromů
A můžete tam zaškrtnout vše, co se zaškrtnout dá. Zásoba netrápí vaši kapsu.

Vyberte cílovou složku, klikněte na Vytvořit a počkejte, dokud se proces pomalého importu nedokončí. Na konci uvidíme prázdné pole pro experimenty:

Když si krátce projdeme popisky na obrázku, tak prefabrikát a inspektor zdrojů- toto je místo, kde jsou uloženy modely, textury, zvuky přidané do projektu a samotné prefabrikáty - objekty uložené pro další opětovné použití. Tito. Vytvořili jsme nepřátelský objekt s připojeným modelem a skriptem, který řídí jeho chování, a chceme, aby ho na každé úrovni nemuseli znovu vytvářet a aby se všechny kopie tohoto objektu neměnily ručně, jednotlivě, ale všichni společně. V tomto případě jej uložíme jako prefabrikát a až příště budeme potřebovat umístit nepřítele, prefabrikát jednoduše přetáhneme na jeviště; a změna prefabrikátu změní všechny jeho kopie.

Hierarchie objekty na ploše je seznam všech objektů na aktuální úrovni, který zároveň zobrazuje vztahy rodič-dítě.

Inspektor objektů zobrazuje komponenty a jejich vlastnosti aktuálně vybraného objektu - model, textura, prefab.

Magická tlačítka Umožňují vám spustit scénu přímo v editoru, spustit ji kvůli chybám, pozastavit ji, abyste zkontrolovali stav některých objektů, a doladit a ovládat ji pomocí spouštění snímek po snímku.

V hlavní editační okno K uspořádání objektů v úrovních využíváme všechny výhody drag and drop.

Nejprve se podíváme na to, co již máme ve výchozí scéně. Nic moc, že? Objekt se samozřejmým názvem Main Camera, kliknutím na jehož název v hierarchii uvidíme výřezový kužel a malé okno s pohledem z kamery.

Okamžitě vám řeknu hlavní ovládací prvky okna úprav:

  • střední myš - pohyb kamery doleva a doprava (po vnitřní rovině xy)
  • levé kliknutí - samozřejmě výběr objektu (i když přepínání mezi Blenderem a Unity může být obtížné :))
  • kliknutí pravým tlačítkem - rotace hlavy
  • F - centrování na vybraný objekt
  • tažení objektu při držení ctrl - tažení v krocích po 1 souřadnicové jednotce
Když už mluvíme o souřadnicích, vývojáři doporučují brát 1 jednotku herního prostoru jako 1 skutečný metr a je lepší se toho držet (alespoň se méně motat s fyzikou).
Země zaslíbená
Ale vraťme se k našim beranům, pojďme si vytvořit povrch, po kterém budeme chodit. Zatím nemáme modely, takže můžeme vytvořit jen velké letadlo... Ale vytvoříme půdu, tedy Terén - bude krásnější než holá rovina. Chcete-li to provést, vyberte z nabídky položku Terén->Vytvořit terén. Voila!

Opět nepříliš působivé. Nejprve změňme velikost zemského povrchu přes Terrain->Set Resolution. Ve výchozím nastavení jsou parametry Délka a Šířka 2000, tzn. 2 km na 2 km. Pro testovací běhy toho tolik nepotřebujeme, takže do těchto polí zapíšeme 500 a 500 - více než dost.

Nyní zemi přiřadíme texturu. Chcete-li to provést, vyberte terén (v hlavním okně nebo v hierarchii) a sledujte dostupné vlastnosti v inspektoru objektů. Tam uvidíme nástroje pro úpravu terénů (standardní - zvýšit/snížit, vyhladit atd.). Okamžitě můžete začít kreslit krajinu, kterou potřebujete, ale v tuto chvíli nás zajímá tlačítko se štětcem textury Malovat terén. A na kartě, která se otevře, je tlačítko Upravit textury, v jehož nabídce klikněte na Přidat texturu:

Otevře se okno s parametry budoucí textury. Najdeme mezi nimi jednu s hodnotou „None (Texture 2d)“ a klikneme na kuličku s tečkou napravo od těchto slov. Otevře se výběr textur z těch, které již byly přidány do zdrojů projektu. Mimochodem, pro přidání textury do projektu ji stačí zkopírovat do složky projektu – Unity ji vyzvedne. Import všeho ostatního probíhá stejným způsobem a odstranění zdroje z projektu znamená jeho fyzické odstranění z disku.

Vyberte požadovanou texturu, například Grass(Hill). Můžete přidat pár dalších textur, například Cliff (Layered Rock), a pomocí štětce vybraného o něco výše domalujte, jak chcete. Po předchozích manipulacích jsem dostal toto:

Pokud aktuálně klikneme na tlačítko „Play“ v horní části obrazovky, pak s největší pravděpodobností uvidíte kousek naší špatně osvětlené země na modrém pozadí. To ale není zajímavé, takže než budeme pokračovat, musíme do scény přidat osvětlení, které simuluje sluneční světlo a modré pozadí nahradit oblohou. Světlo se přidává přes hlavní menu, GameObject->Create other->Directional light. Poté podle obrázku stiskněte tlačítko, které změní pomocné šipky kolem vybraného objektu na ose otáčení. Tahem za tyto osy kupodivu natáčíme osvětlovací zařízení tak, aby byla země krásněji osvětlena.

Aby bylo místo modrého plátna nad hlavou nebe, musíte určit texturu skyboxu (skybox - „sky box“, krychle, na kterou je zevnitř natažena textura, obvykle panoramatická fotografie obloha, bráno tak, že zevnitř to vypadá, jako byste byli obklopeni koulí s touto texturou (takto se obloha kreslí ve většině her). Chcete-li to provést, přejděte do nabídky Úpravy->Nastavení vykreslování, najděte vlastnost „materiál Skybox“ a stejně jako u textury země klikněte na kruh s tečkou napravo od něj. Ukážou se nám materiály dostupné v projektu (abychom nešli do džungle terminologie, budeme předpokládat, že materiálem je textura a jak bude zobrazena – bude průhledná, nebo se bude lesknout atd.). ). Vyberte si libovolný se slovem skybox, například sunny2 skybox. Skvělé, teď naše cvičiště vypadá živěji.

Ovládání a kamera
Dlouho jsem přemýšlel, zda do prvního tutoriálu zařadit analýzu skriptů a psaní fotoaparátu a ovládacích prvků od nuly. A přesto jsem se rozhodl to prozatím odložit. Dnes si jednoduše sestavíme naši postavu z hotových dílků a v příštím tutoriálu začnu rozebírat skripty.

Ve skutečnosti sada Unity obsahuje dva herní objekty, které poskytují hotové, již sestavené řešení pro kameru a ovládací prvky. Ale zatím vám o nich neřeknu, abyste měli motivaci si je sestavit sami. :)

Nejprve vytvoříme objekt pro hráče. Nebo spíše, abychom nevytvářeli zbytečné skripty, přejmenujme „Hlavní kameru“ na „přehrávač“. Nyní, když jste vybrali kameru, vyberte z nabídky Component->Physics->Character Controller. Ovladač postavy je komponenta, která zpracovává polohu objektu (nebo spíše postavy) v prostoru: jeho pohyb, otáčení, pády, skoky a kolize s jinými objekty. To vše lze udělat přímo, bez pomoci tohoto obalu kolem standardních funkcí přesouvání objektů a kontroly kolizí, pak ale výrazně naroste kód pro implementaci pohybu, což je pro první seznámení s enginem špatné. A tak obecně nemusíte kódovat v první lekci :)

<Лирическое отступление>
Jako lyrická odbočka stojí za to mluvit o složkách.

Jakýkoli objekt, který vidíme na scéně, je instancí třídy se samovysvětlujícím názvem GameObject. Má určité množství tzv komponenty - které jsou zase instancemi jejich tříd. Každá součást plní nějakou utilitární funkci. Každý GameObject tedy musí mít komponentu Transform, která ukládá aktuální souřadnice, úhel natočení a rozměry objektu v trojrozměrném prostoru. No a zároveň obsahuje metody pro provádění akcí na pozici objektu v tomto prostoru: pohyb, otáčení atd., tzn. když v editoru přetáhneme objekt za jeho ovládací šipky, změníme souřadnice jeho transformace.

Ale například komponenta RigidBody zpracovává fyzické chování objektu: vše, co vidíme, když hlaveň z výstřelu spadne na bok a kutálí se, je výsledkem práce RigidBody. Což mimochodem nebude fungovat správně, pokud objektu nepřiřadíte komponentu typu Collider, která uchovává trojrozměrný model, podle kterého se určují kolize objektů. Tento model se nezobrazuje, ale právě tento model, a ne ten, který vidíme na obrazovce během hry, je kontrolován na kolize s vnějším světem.

Kolem kamery nyní vidíme zelené čáry, které tvoří kapsli, podle které se počítají srážky s hráčem – tak říkajíc jeho tělem. Kamera je umístěna uprostřed této kapsle, ale nepotřebujeme oči na opasku (i když existují různé situace :)), takže musíme kameru přesunout do oblasti zamýšlené hlavy postavy. Tato kapsle je ale součástí objektu s jedinou Transform, a proto s ní nebude možné pohybovat odděleně od kamery. Naštěstí, když se podíváme na vlastnosti dostupné pro Character Controller v Object Inspectoru, uvidíme tam vlastnost Center s parametry x, y, z. To znamená, že můžeme posunout střed kapsle vzhledem ke středu objektu. Nastavíme y = -0,8 a dostaneme normální výšku očí.

Pokud nyní postavíme náš přehrávač nad zemský povrch a zapneme Play, naše kamera bude stále stát na místě. To se děje, protože ovladač postavy zpracovává pouze ovládací příkazy, které k němu přicházejí, sám nevykazuje iniciativu. Pokud to uděláte, přetáhněte na přehrávač skript, který se nachází v prefab inspector ve složce Standard Assets\Character Controllers\Sources\Scripts a jmenuje se „CharacterMotor“. Jeho úkolem je pomocí metod Character Controller provést základní pohybovou rutinu: implementovat účinek gravitace, skok, vypočítat aktuální rychlost a směr pohybu. Spuštění úrovně nyní způsobí, že hráčova kamera spadne na zem – to je něco.

Ale stále stojíme na místě: koneckonců nemáme skript, který zachycuje stisky kláves a hlásí je CharacterMotoru. To se provádí skriptem FPSInputController umístěným ve stejné složce. Hodíme to na hráče, spustíme a hurá - tlačítka W, S, A, D nyní umožňují chůzi a mezerník - skok! Ale všichni tak nějak jdeme jedním směrem, doleva a doprava, a na krok vedle. Abyste mohli otočit hlavu a jít, kam se vaše oči podívají, budete potřebovat další skript ze stejného místa: MouseLook. Hodíme to, spustíme - a získáme plnou kontrolu.

Nyní si můžete hrát s proměnnými. Character Controller spolu s ním nainstaloval Character Motor – parametry jako Gravitace, Max Forward Speed, Jumping Base Height a všemožné další jsou uloženy v jeho vlastnostech. Zde jsou všechny výhody Inspectoru - všechny hlavní vlastnosti tříd jsou vždy viditelné, nemusíte se ani dostat do kódu.

UPD: pokračování, které z příspěvku vypadlo kvůli mému výjimečnému zakřivení:

Střelba na občas se pohybující cíle
Běhat po kopcích, které jste si sami vytvořili, láskyplně natřenými až třemi texturami, je samozřejmě zábava. Ale brzy to začne být nudné. Z nabídky tedy vybereme GameObject->Create other->Cube, tuto kostku umístíme do vzduchu vedle hráče a ve vlastnostech Transform určíme tyto parametry Měřítko (x, y, z): 3, 3, 3; a spusťte úroveň, abyste viděli, co tato kostka udělá. Upřímně neudělá nic. Jakmile ale tuto kostku vybereme a přiřadíme jí Komponenta->Fyzika->Pevné těleso, při příštím spuštění uvidíme úplně jiný obrázek. Kostka padá a točí se skoro jako skutečná, ale jako kartonová - její výchozí váha je 1 kg, což na její velikost nestačí, ale zatím se jí nedotkneme.

Po vybrání krychle stiskněte Ctrl+D (duplicitní objekt) a podržte Ctrl a táhněte kostku nahoru, dokud nebudou kostky umístěny nad sebou. Nyní máme dvě zcela stejné kostky přesně nad sebou. Zopakujme tento postup kostek do 15 a podívejme se na pád babylonské věže.

Dále vytvoříme novou krychli, ale nepřiřazujeme k ní pevné tělo. Vyrobíme z něj rovnou plochu pro snadné natáčení. Dejte tomu Měřítko: 150, 20, 150; a umístěte ji kamkoli - hlavní věcí je umístit na ni naši věž a hráče. Mám to takhle:

Nyní pojďme vytvořit zbraně a střelivo. Kazety budou prefabrikát, který vytvoříme v inspektoru panelů kliknutím na tlačítko „Vytvořit“ v horní části inspektoru a tam vybereme samotný panel. Ve složce, která byla v tu chvíli otevřena v inspektoru, se vytvoří nový panel. Bude zvýrazněn šedou barvou, což symbolizuje, že nemá žádné komponenty. V hlavní nabídce klikněte na GameObject->Create other->Sphere, najděte tuto sféru v hierarchii scény a připojte k ní pevné tělo. Ale aby to bylo ještě krásnější, pojďme se podívat na vlastnosti tohoto Rigidbody, které jsme právě přidali, a změňme parametr Mass na 5.

Poté přetáhneme kouli ze seznamu v hierarchii na panel, který jsme vytvořili. Panelák zmodrá a spolu s ním zmodrá i název koule na jevišti - to znamená, že se jedná o klon paneláku. Přejmenujte panel z výchozího názvu na, řekněme, prefab_bullet. Pro krásu. Kulka je připravena!

Dalším krokem bude vytvoření zbraně, nebo spíše skriptu, který po kliknutí myší vystřelí právě tuto kouli. Vedle prefabu vytvoříme JavaScriptový soubor: Create->JavaScript. Nazveme ho např. player (no, abychom se nepletli). Dvojklikem na něj se otevře vestavěný editor skriptů, v kterým nahradíme obsah souboru tímto (prozatím to nebudeme analyzovat):

Public var bulletImpulse = 300;
public var rychlost střelby = 1;
public var bullet: GameObject;

Public var lastShotTime: float;

Funkce Start() (
lastShotTime = 0;
}

Funkce Update() (

If (Input.GetKey(KeyCode.Mouse0)) (
if (Time.time>(lastShotTime + shootSpeed)) (
var bull_clone: ​​​​GameObject;
bull_clone = Instantiate(odrážka, transformace.pozice, transformace.rotace);
Physics.IgnoreCollision(bull_clone.collider, collider);
bull_clone.rigidbody.AddForce(transform.forward*bulletImpulse, ForceMode.Impulse);
lastShotTime = Time.time;

To znamená, že skripty se připojují k objektům stejným způsobem jako komponenty a lze je stejným způsobem ovládat. Nebo spíše jsou to komponenty, ale to teď není důležité. Nyní je důležité kliknout na kroužek s tečkou vedle parametru Bullet a ve výběru, který se otevře, najít náš panelák s koulí. Když si ji vyberete jako kulku, můžete bezpečně zahájit úroveň a užít si střílení dělových koulí do kartonových krabic.

Pokud ovšem do mých myšlenek nezasáhlo UFO a neunikl mi nějaký důležitý krok.

Doufám, že jsem dostatečně podrobně popsal to, co bylo potřeba, a nezavěsil jsem se na nedůležité detaily. I když je tento návod pouze informativní, rád bych věřil, že se někomu bude opravdu hodit. Těším se na racionální kritiku a návrhy do dalšího čísla. Děkuji za pozornost!

Prolog.
Ahoj všichni. Když jsem se dozvěděl o Unity3D, byl jsem velmi šťastný. To byla druhá věc při vývoji her, která mě zaujala svou jednoduchostí a intuitivností (první byl Game Maker). Vzhledem k tomu, že nemám rád video lekce (nevím proč), byl jsem při hledání lekcí velmi stresovaný, kvůli malému počtu textových lekcí. Proto jsem se rozhodl napsat tuto sérii článků pro ty, kteří milují textové lekce jako já. Vzhledem k tomu, že tato série je zaměřena na začátečníky, budou možnosti Unity3D prozkoumány na cestě.
Lekce 0 nebo malý plán.

„Budoucnost musí být postavena v přítomnosti. Tomu se říká plán.
Bez toho nemůže být nic na světě dobré."
Georg Christoph Lichtenberg


1. Vytvořte menu s létající kamerou ala Far Cry.
2. Charakter. Pohyb a ovládání. Fotoaparát. Měníme polohu a pohled kamery.
3. Statistiky. První část. Zkušenosti, peníze.
4. Úkoly.
5. Ai. Umělá inteligence. První část. Nákup postavy.
6. Statistiky. Část dvě. Život, mana. Nakreslete pruhy HP a MP.
7. Ai. Umělá inteligence. Část dvě. davy.
8. Inventář. Prodejna.
Plán lze doplňovat a měnit.
Lekce 1. Menu s létající kamerou ala Far Cry.
V tomto tutoriálu se naučíme základy vytváření scén v Unity3D. Pojďme se naučit některé standardní funkce a některé další.
Použitý:
1. Terrain Toolkit http://yadi.sk/d/NECQRcVaCEKuT
2. Nature Pack http://yadi.sk/d/m8Qu8ts2CEKyB
3. Real Nature Pack 2 Autumn v2 http://yadi.sk/d/A4IN7tuMCELA3
4. Tropical Nature Pack http://yadi.sk/d/lTMMWzC4CELCf

Plán:
1. Vytvoření projektu. Importujte požadované knihovny.
2. Tvorba krajiny. Editace.
3. Osvětlení. Fotoaparát.
4. Animace kamery (let).
5. Tvorba menu.
Vytvoření projektu. Importujte požadované knihovny.
Spustíme Unity. V „Průvodci projektem“ přejděte na kartu „Vytvořit nový projekt“. V „Importovat následující balíčky“ vyberte následující balíčky: Skyboxy, Terénní aktiva, Voda (v závislosti na verzi unity3d jsem zvolil pro)

Přejděte na „Assets>>Import package>>Custom package“ a přejděte do složky, kde máte stažené balíčky. Vyberte a klikněte na otevřít.

Pozornost!!! Balíčky jsou těžké, takže Unity vás může trochu zamyslet, nebojte se!!
Krajinná generace.
Klikněte na „Terén>>Vytvořit terén“

Objevil se objekt „Terén“.
Klikněte na „Terrain>>Set Resolution“ a nastavte rozměry naší krajiny jako na snímku obrazovky. Pro scénu není potřeba menu pro velkou krajinu a aby nezatěžoval procesor, tyto velikosti stačí.

Klikněte na „Nastavit rozlišení“
Klikněte na „Component>>Terén>>Train Toolkit“


V komponentě „Terrain Toolkit“, která se objevila, jsem vše nastavil takto


Doporučuji vám pohrát si s nastavením, velmi často se objevují takové zajímavé možnosti krajiny.
Takže naše krajina je připravena.
Dejme tomu texturu.
V inspektoru klikněte na štětec a poté na Upravit textury.

A klikněte na Přidat texturu. V okně, které se objeví, klikněte na „Vybrat“ u Textury

V okně, které se objeví, vyberte texturu (dvojitě klikněte myší), já jsem zvolil „Grass (Hill)“


Klikněte na Přidat a naše krajina se překreslí.


Klikněte na „Zvýšit/Snížit terén“


Vyberte štětec, Velikost štětce a Krytí. A stisknutím LBM (Levé tlačítko myši) vrchol zvedneme, nebo stisknutím Shift+LBM snížíme.
Stisknutím „Smooth Height“ (3. tlačítko) odstraníme ostré rohy.
Dále jsem namaloval něco jako písečnou pláž a přidal jsem texturu „Good Dirt“.
Tady je to, co jsem dostal.

Vyberte „Umístit stromy“ a klikněte na „Upravit stromy“. V okně, které se zobrazí, klikněte na kruh.
A podobně jako při výběru textury volte dřevo.
A změnou nastavení kartáčů vysazujeme různé stromy.
Podobně na předposlední tlačítko sázíme květiny, trávu, kameny atd.
S jedním ALE, abychom nezatěžovali procesor, vybereme pro trávu „Přidat texturu trávy“, ale pro zbytek „Přidat detaily sítě“.
A na poslední záložce si můžete pohrát s nastavením stromu, vykreslováním a nastavením větru. Vše jsem nechal standardně.
Vytvoříme vodu. V okně „Project“ přejděte na balíček „OnQ Nature Pack 2 v2>>Resources Demo>>Standard Assets>>Water (pouze pro)“ a vyberte „Daylight water“.

Přetáhneme jej na scénu a pomocí transformačních tlačítek jej umístíme a roztáhneme, jak potřebujeme.

Tady je to, co jsem dostal.


Toto je konec krajiny.
Nyní přidáme „Skybox“. Chcete-li to provést, přejděte na „Upravit>> Nastavení vykreslování“.

A v inspektoru vyberte materiál „Skybox“ kliknutím na kroužek.


Vybral jsem "Sunny2 skybox".
Osvětlení a kamera.
V „GameObject>>Create Other“ vyberte „Point light“.

V inspektoru nastavíme nastavení. „Pozice“ x=100 y=100 z=100 vycentruje náš světelný zdroj nad „Terén“ ve výšce 100. „Dosah“ = 150, to je poloměr světla kolem zdroje. A "Intenzita" = 3,3.


Výsledkem je docela měkké světlo, které dosáhne všude.


Již máme vytvořenou standardní „hlavní kameru“. Klikněte na něj v okně Hierarchie. A umístěte jej na pozici X=10, Z=10. A Y je nastaveno vzhledem k výšce vaší krajiny, mám 45. Chcete-li zmenšit oblast zachycenou fotoaparátem, změňte nastavení „Field of View“ (já mám 43). Zaměříme-li se na okno „Náhled fotoaparátu“, otáčíme fotoaparátem, jak potřebujeme. Mám rotaci X=5, Y=45, Z=0.
Animace fotoaparátu (let)
Přejděte na „Okno>>Animace“ nebo stiskněte Ctrl+6. Klikněte na šipky v prázdném poli a vyberte „Vytvořit nový klip“

Říkejme tomu například „CameraFly“. Klikněte na hůlku naproti „Position.x“ a klikněte na „Přidat křivky“. Nastavíme pozici snímku na 300 a nastavíme potřebné souřadnice pro další pozici kamery.
Dostal jsem následující hodnoty:

200?"200px":""+(this.scrollHeight+5)+"px");">
Proměnná/číslo rámu 300 | 600 | 900 | 1200 | 1500| 1800
Pozice.x 90 | 10 | 190 | 120 | 190 | 10
Pozice.y 45 | 45 | 45 | 45 | 45 | 45
Pozice.z 90 | 190 | 190 | 100 | 10 | 10
Rotace.x 5 | 45 | 15 | 15 | 15 | 15
Rotace.y 45 | 94 | 240 | 140 | 270 | 405
Rotace.z 0 | 0 | 0 | 0 | 0 | 0


Klikneme na tlačítko Přehrát a uvidíme, co se stane. A teď už letí naše kamera. Po obletu kruhu se však zastaví. Pojďme to napravit.
Vytvořme nový C# skript (RMB v okně „Projekt“, poté „Vytvořit>>C# Script“) a nazvěme jej FlyCamera. V něm napíšeme pouze jeden řádek v metodě Update:

200?"200px":""+(this.scrollHeight+5)+"px");">
transform.animation.CrossFade("FlyCamera");


To nás nutí provádět cyklicky animaci nazvanou „FlyCamera“. Umístíme skript na hlavní kameru.
Zkontrolujeme a vše funguje).
Tvoříme jídelníček.
Vytvořme skript s názvem "Menu".
Nastavíme proměnné:

200?"200px":""+(this.scrollHeight+5)+"px");">
public bool showMenu = true; //Zda zobrazit nabídku


V metodě „Start“ napíšeme:

200?"200px":""+(this.scrollHeight+5)+"px");">
showMenu = true;
okno = 1;


V metodě „Aktualizovat“ zapíšeme:

200?"200px":""+(this.scrollHeight+5)+"px");">
{
}
if(curTime >
{
okno = 0;
}
{
okno = 1;
}


Vytvoříme metodu „OnGUI“ a zapíšeme do ní:

200?"200px":""+(this.scrollHeight+5)+"px");">
{


{
}
{
}
{
}
{
}
}

//Pak je vše při starém
if(okno == 2)
{

{
}
{
}
{
}
{
}
{
okno = 1;
}
}

If(okno == 3)
{

{
okno = 1;
}
}

If(okno == 4)
{

{
}
{
okno = 1;
}
}


{
useGUILayout=false;
}
}


Přesuneme skript do hlavní kamery.

Uložme scénu s názvem menu.unity

Kompletní kód skriptu menu

200?"200px":""+(this.scrollHeight+5)+"px");">pomocí UnityEngine;
pomocí System.Collections;

Nabídka veřejné třídy: MonoBehaviour (
veřejné bool showMenu; //Zda zobrazit nabídku
veřejné int okno; //Zobrazené okno
public float lifeTime = 5,0f; //Maximální doba zobrazení nabídky
soukromý float curTime; //Aktuální doba zobrazení nabídky

Void Start() (
showMenu = true;
okno = 1;
}

Void Update() (
if(showMenu == true) //Zkontrolujte, zda je nabídka povolena
{
curTime += Time.deltaTime; //Pokud je povoleno, zvýší proměnnou curTime podle uplynulého času
}
if(curTime > lifeTime) //Pokud čas dosáhl maximálního bodu
{
showMenu = false; //Zakázat nabídku
okno = 0;
curTime = 0; //Resetujte časovač
}
if(showMenu == false&Input.anyKeyDown) //Pokud je nabídka vypnuta a je stisknuta jakákoli klávesa
{
showMenu = true; //Povolit nabídku
okno = 1;
}
}

Void OnGUI() (
if(window == 1) //Pokud je okno 1
{
GUI.Box(new Rect(Screen.width/2-100,Screen.Height/2-80,200,220), "Menu"); //Vytvořte okno s nabídkou

If(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-40,180,30), "New Game"))
{
Application.LoadLevel(1); //Načíst úroveň 1
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-0,180,30), "Settings"))
{
okno = 2; //otevřete okno nastavení
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+40,180,30), "O hře"))
{
okno = 3; //Zobrazení informací o autorech hry
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+80,180,30), "Exit"))
{
okno = 4; //Vyvolání výstupního okna
}
}

//Pak je vše při starém
if(okno == 2)
{
GUI.Box (nový Rect (Screen.width/2-100,Screen.height/2-80,200,250), "Settings");
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-40,180,30), "Game"))
{
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-0,180,30), "Audio"))
{
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+40,180,30), "Video"))
{
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+80,180,30), "Control"))
{
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+120,180,30), "Back"))
{
okno = 1;
}
}

If(okno == 3)
{
GUI.Box (nový Rect (Screen.width/2-100,Screen.height/2-80,200,220), "O hře");
GUI.Label(new Rect(Screen.width/2-90,Screen.height/2-0, 180, 40), "Information about the developer");
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+100,180,30), "back"))
{
okno = 1;
}
}

If(okno == 4)
{
GUI.Box(new Rect(Screen.width/2-100,Screen.height/2-60,200,120), "Exit?");
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-20,180,30), "Yes"))
{
Application.Quit(); //Ukončit hru
}
if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+20,180,30), "Ne"))
{
okno = 1;
}
}

If(window == 0) //Pokud se jedná o okno, vypněte nabídku
{
useGUILayout=false;
}
}
}


Sestavená scéna http://yadi.sk/d/f5pFI0_pCG7YC

P.S. Nesuďte prosím přísně, toto je můj první článek.
P.P.S. Pro trolly: ano, jsem kodér vidlák, jděte lesem!

Dobrý den. Tento článek je věnován multiplatformnímu nástroji Unity3d. Článek pojednává o optimálních, dle mého názoru, způsobech práce s motorem, dává praktické rady k obsluze a doplňující (obecné) informace; jsou zvažovány vyhlídky na vývoj Unity3d.

  • Část 1. Úvod
    • Co je Unity?
    • Funkce Unity3d
    • Problém dodatečných znalostí
  • Část 2: Začínáme
    • Podpůrná literatura
      • Scény
      • Ladění
    • Strukturování
  • Oddíl 3. Praktické rady
    • Psaní skriptů
    • Video lekce
    • Odstraňování problémů
  • Část 4: Vypnutí
    • závěry
    • Publikování hry
    • *Optimalizace
    • Teorie grafiky
    • užitečné odkazy
    • Názor
      • Co byste rádi viděli v budoucnu?
  • Informační zdroje

Část 1. Úvod

Co je Unity3d?
Unity3d je moderní multiplatformní engine pro tvorbu her a aplikací vyvinutý společností Unity Technologies. Pomocí tohoto enginu můžete vyvíjet nejen aplikace pro počítače, ale také pro mobilní zařízení (například založené na Androidu), herní konzole a další zařízení.
Pojďme si říci něco málo o vlastnostech motoru. Za prvé, stojí za zmínku, že herní engine je integrován do vývojového prostředí Unity, jinými slovy, svou hru můžete otestovat, aniž byste opustili editor. Za druhé, Unity podporuje import velkého množství různých formátů, což umožňuje vývojáři hry konstruovat modely samotné v pohodlnější aplikaci a používat Unity pro zamýšlený účel - vývoj produktu. Za třetí, skripty jsou psány v nejoblíbenějších programovacích jazycích - C# a JavaScript.
Unity3d je tedy relevantní platforma, se kterou můžete vytvářet vlastní aplikace a exportovat je do různých zařízení, ať už jde o mobilní telefon nebo konzoli Nintendo Wii.
Abyste si mohli vytvořit vlastní hru, musíte ovládat alespoň jeden z dostupných (na Unity) programovacích jazycích: C#, JavaScript nebo Boo.

Bude skvělé, když budete znát např. 3Ds max, to vám při tvorbě hry hodně pomůže.Pokud jde o mě, musel jsem zvládnout 3Ds max na základní úrovni, protože jsem nemohl najít model domu potřebujete kdekoli. V každém případě budete potřebovat nainstalovaný 3Ds max na vašem počítači, pokud budete importovat hotové 3D modely, protože většinou jsou potřebné modely ve formátu projektu, tj. budete je muset vyrenderovat ve vhodném formátu pro Unity3d např. v *.3DS a teprve poté importujte do Unity, jinak vyhodí chybu.

Část 2: Začínáme

Podpůrná literatura
Pojďme se podívat na literaturu, která nám pomůže prostudovat Unity3d, konkrétně Unity 3.x Game Development Essentials. Pokud dáváte přednost bezplatnému obsahu, můžete bezplatnou knihu najít na Googlu.
O čem je tato kniha? Snad o všem, co potřebujete k vytvoření plnohodnotné hry. Vřele doporučuji si tuto knihu zakoupit a nastudovat si ji sami.
Pár slov o hře a obsahu knihy. Váš hráč se ocitne na pustém ostrově, potřebuje uniknout, k tomu plní různé úkoly a doufejme, že je zachráněn. Hru lze dohrát za pár minut, ale vytvoření hry netrvá ani pár minut, možná ani pár hodin.
Kniha obsahuje velmi podrobný návod na vytvoření hry od začátku. Pokrývá mnoho z toho, co budete pravděpodobně potřebovat k vytvoření hry.

Kniha je psána v angličtině; pro ty, kdo neumí anglicky, nebude těžké intuitivně odhadnout, co se říká, protože kniha je psána bez zvláštní moudrosti.

To stojí za pozornost
NB!
Zde je několik tipů pro vytvoření hry v Unity3d.

º Urychlovače
Co je to - srážeč? Kolider je prostorová oblast, při interakci se kterou se provádějí určité skripty a akce. Abyste lépe pochopili, co to je, představte si, jak jdete k automaticky se otevírajícím dveřím obchodního domu. Pár metrů od dveří se spustí senzor a dveře se před vámi otevřou, ale když ujdete tři metry, nic se nestane. Collider je přesně zóna, ve které funguje pohybový senzor zodpovědný za otevírání dveří. Vstoupíte do zóny – dveře se otevřou, zónu opustíte – a senzor již nebude reagovat na vaši přítomnost. Ve hře je to stejné.
Takže o srážkách. Řekněme, že jsme do našeho projektu importovali auto a chceme pro něj vygenerovat urychlovač. Můžete automaticky vygenerovat srážeč pro celé auto, ale pak pro každý autodíly - světlomety, těsnění, zrcátka, pneumatiky - vygeneruje se vám vlastní srážeč.

To absolutně není optimální. Samozřejmě nepotřebujeme generovat tak velký počet urychlovačů, stačí se omezit na jeden!

Vezměte prosím na vědomí, že toto Ne jemnost. Měli byste se snažit šetřit paměť všude. Máte ve hře nějaké místo, kam se hráč nemůže dostat? Pro toto místo vůbec negenerujte žádné urychlovače. Máte dveře, které jste do projektu importovali z 3Ds max? Pravděpodobně jsou velmi dobře nakresleny (sám jsem se setkal s tím, že i šrouby dveří byly nakresleny jako samostatný objekt), proto vytvořte jeden narážeč krabic pro celé dveře - Ušetříte spoustu paměti! Věřte mi, že tato uložená paměť se vám bude velmi, velmi hodit.

º Optimální zpracování scén
Pojďme se bavit o optimalizaci scén, ale o scénách samotných bude řeč dále.
Představte si následující situaci: máme „domovskou“ scénu – když je hráč v budově a „pouliční“ scénu – když hráč opouští budovu na ulici. Přirozeně z druhé scény můžeme vidět dům, tzn. část první scény a naopak (pokud má budova samozřejmě okna). V tomto případě je optimální následující konstrukce scény. V první scéně musí být vše, co se týká ulice (tedy místa, kam se nedostaneme, aniž bychom přešli na další scénu), co nejvíce zjednodušeno. Jinými slovy, musíme ponechat pouze vzhled pohledu z okna a vykuchat celou výplň. Tito. odstranit všechny srážeče, rozlišení atd. minimalizovat. Proč by se vlastně měl procesor obtěžovat zpracováním oblasti, kterou nemůžeme navštívit? Totéž uděláme s druhou scénou („ulice“). V tomto případě můžeme z domu úplně odstranit vše a nechat jen jeho „krabici“.
Chcete vytvořit minimapu? Jen se prosím zbavte všech kolidérů a snižte rozlišení, v tomto případě bude vaše hra optimální.
Takto se práce se scénami stává optimální. Ještě jednou podotýkám, že to nejsou jemnosti, to jsou vážné věci, které vyžadují pozornost tvůrce.

Scény
Hotová hra je souborem vzájemně propojených scén (stejně jako život je soubor dní). Nyní budeme hovořit o optimálním herním designu.
Před vytvořením projektu si rozmyslete, co by měl obsahovat (jaké scény). Udělejte si seznam scén (na papír), promyslete si, co která scéna bude obsahovat. Nyní zkuste každou scénu rozdělit na dílčí scény, čím více jich bude, tím to bude pro váš CPU jednodušší. Samozřejmě byste to neměli přehánět s počtem scén. Řekněme, že váš hráč je v budově a nikdy ji neopustí, budova má například pár pater, střechu a v každém patře jsou tři místnosti. V tomto případě by dle mého názoru bylo optimální stavbu „rozdělit“ na dvě scény – dvě patra a střechu. Rozdělení každého patra na scény s místnostmi není optimální. To prostě není nutné, pokud je každá z místností málo zatížená. Jinými slovy, paměť procesoru musíte využívat moudře, ale neměli byste zapomínat ani na to, abyste si hru užili.
Ladění
Pamatujte, že dobrý tvůrce musí počítat s tím, že jeho hra nebo aplikace bude používána na různých počítačích, což znamená, že jejich obsah je potřeba odladit, aby se dal použít na různých zařízeních. Nejviditelnějším a nejdůležitějším bodem ladění je optimalizace aplikace pro různá rozlišení obrazovky. To je důležitý bod a tvůrce hry tomu musí věnovat pozornost, jinak může být s výsledkem své práce spokojený jen on.
Strukturování
Při navrhování hry je důležité pamatovat na strukturování dat – důležitý aspekt. To znamená, že vše by mělo být na svém místě. Vytváříte skripty? - vytvořte složku pro skripty a uložte je tam, s vysokou pravděpodobností budete mít skriptů více, rozházet je po projektu není dobré, později budete trpět. Z vlastní zkušenosti mohu říci, že určitě budete potřebovat vytvořit složky se skripty, zvukovými soubory, GUI texturami, materiály, animacemi, možná prefabrikáty a vlastními modely (importované z 3Ds max) a je lepší ukládat objekty do poslední složku, abyste nerozházeli všechny modely po projektu v chaotickém pořadí). Když vytváříte konkrétní skript, pamatujte, že názvy proměnných, tříd atd. by měly mluvit samy za sebe. Pokud chcete vytvořit skript u inventáře (vyzvednout předmět, použít předmět), pak je lepší všechny skripty monotónních akcí (například vyzvednutí) spouštět klíčovým slovem, například: Chytit<имя предмета>; Použití<имя предмета>, v tomto případě pro vás bude navigace v projektu jednodušší a vypadá mnohem lépe. Pamatujte na zlaté pravidlo: dobrý program není ten, který je napsán nemotorně a odladěný až na hranici možností, dobrý program je ten, který je napsán správně hned a vyžaduje minimální „náklady“ na ladění. Pokud použijete toto pravidlo, pak pro vás bude vše mnohem lepší než pro ty, kteří toto pravidlo nepoužívají.
Psaní skriptů
Bohužel, tento pododdíl bude velmi krátký. Zkuste si nejprve představit, co chcete implementovat, pak zkuste algoritmus popsat slovy a poté se pokuste slova převést do funkčního kódu. S použitím výše diskutované knihy je nepravděpodobné, že se budete muset hodně zapotit u vývoje kódů a dalších věcí; opakuji, že kniha popisuje téměř vše, co byste mohli potřebovat, a vše, co není popsáno, snadno zjistíte sami.
Video lekce
Ke sledování doporučuji následující kanály YouTube:

Softwarový produkt Unity je naštěstí neustále aktualizován, ale video tutoriály to bohužel samy nezvládnou. Ukazuje se, že velké množství videí, která byla relevantní před rokem, ztrácí svou relevanci a stávají se jednoduše zbytečnými.
1 - zde vždy najdete aktuální videonávody, srozumitelná vysvětlení, detailní rozbor skriptů a všech akcí. Nic lepšího než tento kanál jsem zatím nenašel. Pokud nemáte vůbec ponětí o vytvoření hry, pak se rozhodně musíte podívat na tento kanál. 2 - seriózní tým, jsou zde pouze videonávody, bohužel méně než 1. 3 - jsou tam užitečné věci, jen škoda, že videonávody se staly téměř irelevantními.

Odstraňování problémů
Unity3d je takový engine, že pokud máte chyby v psaní skriptů, vaše hra se nespustí. Pokud nejsou žádné zjevné chyby, hra se spustí, pokud se něco pokazí, konzole vás na to určitě upozorní.
Toto jsou varování, jednoduše vám řeknou o možných nedostatcích a nedostatcích:

Toto jsou chyby, pokud existují, hra se nespustí:

Část 4: Vypnutí

závěry
Unity3d je velmi flexibilní engine, který uživateli poskytuje velkou svobodu jednání. Chcete-li usnadnit život vývojářům i spotřebitelům, existuje několik kroků, kterými můžete svůj projekt optimalizovat.
Nyní, s položenou znalostní základnou, můžeme bezpečně začít vytvářet naši ultra-populární aplikaci!
Publikování hry
Hotovou hru můžete publikovat na jedné z herních služeb, například na www.kongregate.com
*Optimalizace
Pokud čtete tuto podsekci, tak vás buď prostě zajímá, co je zde napsáno, nebo jste nečetli NB! ze sekce 2. Doufejme, že spadáte do první kategorie. V této podsekci bych chtěl ještě jednou upozornit, že je potřeba okamžitě napsat optimální hru a ne ji nějak napsat a teprve potom odladit - to je katastrofální cesta a neměli byste to dělat. Pokud jde o optimalizaci, podívejte se znovu na druhou část.

Oddíl 5. Další informace

Teorie grafiky
Praxe bez teorie není příliš zajímavá, proto vám doporučuji seznámit se s teorií počítačové grafiky. www.intuit.ru/department/graphics/graphalg/lit.html
Zde si můžete ověřit své teoretické znalosti

Vývojář dětského mobilního puzzle Fold the Adventure, Alexey Galkin, napsal pro CPU sloupek o tom, na co byste měli věnovat pozornost při vývoji mobilní hry na platformě Unity: jak vybrat správné prostředky z Asset Store, ve kterém služba pro ukládání dat o pokroku uživatele a kde získat zvuky pro hry.

Do záložek

Start

K vytvoření dobré hry potřebujete dobrý nápad. Ale i když máte nápad, vytvořit na jeho základě slušnou hru není vůbec jednoduché. Kromě prostého štěstí existuje obrovské množství věcí, se kterými se musíte vypořádat. Ve velmi omezeném čase je třeba učinit nekonečné množství rozhodnutí. Koneckonců, čas jsou peníze a rozpočet projektu má tendenci mizet dříve, než se udělá cokoliv, co by stálo za demolici (natož uvolnění).

Toto je příběh o tom, jak náš malý indie tým vytvořil hru Fold the Adventure na základě originálního nápadu. S vydáním hry se můžeme nadechnout a ohlédnout se za třemi měsíci strávenými vývojem. Přestože máme dlouholeté zkušenosti v herním průmyslu, vytvoření Fold the Adventure nám dalo hodně práce kvůli nepředvídatelným zvratům událostí a velmi omezeným zdrojům. Vítejte v našem dobrodružství!

Výběr motoru: Unity

Abych řekl pravdu, nemuseli jsme vybírat motor. Unity jsme hned vzali a nelitovali jsme. Naším primárním cílem bylo vytvořit relativně malou hru a spustit ji na co největším počtu platforem. Zároveň jsem se chtěl vyhnout zmatkům s programováním v Objective C a Javě. S Unity jsme uspěli. A přestože vše nebylo tak jednoduché a plynulé, jak se očekávalo, motor nás potěšil.

Podle našeho názoru je Unity nejlepší herní engine pro indie vývoj právě teď. Jeho softwarová architektura je promyšlená, editor je dobře udělaný a s každou verzí se zlepšuje. S Unity je snadné začít, ale zkušeným vývojářům to může zpočátku připadat neintuitivní. Začátečníci i profesionálové však pravděpodobně narazí na stejná úskalí.

  • Je nutné strávit čas od samého začátku učením se základní architektuře Unity, včetně herních objektů, skriptovatelných objektů, scén, prefabrikátů, aktiv, metod událostí a jejich pořadí volání, korutin, časování, zpracování vstupů, serializace. Unity se může zdát jako snadno použitelný engine, ale bez pochopení základů můžete strávit nekonečné hodiny laděním a refaktorováním.
  • Od samého začátku formulujte pravidla pro strukturování a také pojmenování aktiv a herních objektů. I malá hra má tendenci se bez pořádné organizace proměnit v chaos. Této problematice je věnováno mnoho článků. Můžete se také zaměřit na projekty publikované vývojáři v Unity Assets Store.
  • Programujte co nejméně. Místo toho aktivně využívejte možnosti WYSIWYG (What You See Is What You Get) editoru Unity. Díky snadné rozšiřitelnosti vám Unity editor umožňuje proměnit vámi vyvíjenou hru v pohodlný designér, který může používat i ten, kdo neumí programovat. A to výrazně zjednodušuje a zrychluje tvorbu herního obsahu.
  • Vyhněte se používání obvyklých postupů, které se nehodí k ideologii Jednoty. Jakkoli může být lákavé umístit všechny herní objekty do jedné scény nebo uložit parametry herní mechaniky do souborů XML, takový přístup výrazně zkomplikuje život později ve vývoji.
  • Při používání systémů správy verzí buďte opatrní a pozorní. Unity má tendenci nepředvídatelně měnit soubory. Například provádění změn v prefabrikátu znamená úpravu všech souborů scén, ve kterých je použit, ale až poté, co jsou následně uloženy. Vždy používejte vynucený text jako režim serializace majetku a pečlivě sledujte soubory, které nahráváte na server, abyste nezničili práci vašich kolegů.
  • Otestujte hru na co největším počtu platforem. Nezapomeňte však, že nastavení lze definovat pro každou platformu zvlášť. Bez takového testování můžete stejně jako my zjistit, že se vaše hra ve webovém přehrávači pro Windows a OS X chová jinak.

Aktiva: vytvořit nebo koupit

Pokud máte malý tým s velmi omezeným časem a rozpočtem, pak je vytvoření velkého množství vysoce kvalitních herních aktiv od nuly téměř nemožné. Musíme uklidnit velkolepé ambice a minimalizovat množství toho, co je potřeba. Ale i když je minimalizováno, musíte zanechat něco, na co by se hráč rád podíval.

Pokud může aktiva pro hru vytvořit tým, je to o jeden problém méně (s největší pravděpodobností). Stále však existuje fáze prototypování, která také vyžaduje aktiva, která budou pravděpodobně vyhozena. Proto téměř každý tým vyžaduje aktiva, která nemůže nebo nechce vytvořit. Otázkou je, kde je získat.

První a nejzřejmější odpovědí pro nás jako vývojáře Unity byl Unity Assets Store. Bez ohledu na to, jak lákavá se tato příležitost může zdát, přináší také řadu obtíží:

  • Aktiva v Unity Assets Store jsou dostupná všem bez výjimky. Nikdo však nechce, aby jejich hra byla jako ostatní. Alespoň jsme to opravdu nechtěli.
  • Koupit jeden asset pack, který by uspokojil všechny potřeby projektu, je téměř nemožné a nastává problém stylové kompatibility. Pro Fold the Adventure jsme koupili několik balení, z nichž jsme spotřebovali méně než polovinu.
  • Navzdory skutečnosti, že celkový počet aktiv v Unity Assets Store je poměrně velký, najít mezi nimi něco vhodného pro konkrétní potřeby může být velmi obtížné. Kvalita však často ponechává hodně být požadovaný. Strávili jsme hodiny hledáním, ne vždy jsme byli schopni zhodnotit kvalitu balení, aniž bychom si ho koupili.

Druhou možností byl outsourcing aktiv. Tato cesta samozřejmě zabere více času a peněz, než pouhé nákupy něčeho z Unity Assets Store. Pokud však vše dobře dopadne, výsledná aktiva jsou jedinečná a kvalitnější.

Existovala také možnost nákupu aktiv z jiných zdrojů, než je Unity Assets Store. Vyskytl se však problém s kompatibilitou s Unity a rozhodli jsme se od takových experimentů upustit.

Když jsme se rozhodovali, která aktiva si vyrobíme a která ne, začali jsme jejich kategorizací. Jak se ukázalo, bylo relativně málo aktiv, která byla jedinečná pro naši hru a odlišovala ji od ostatních. Rozhodli jsme se, že si je uděláme sami, kde je to možné, uchýlíme se k outsourcingu. Zbytek byl zakoupen z obchodu Unity Assets Store.

Zde je několik jednoduchých pravidel, na která jsme přišli při vyhledávání a nákupu aktiv v Unity Assets Store

  • Abyste se vyhnuli stylistickým rozdílům, je vhodné zakoupit aktiva stejného typu od stejného autora. To vám nebrání kupovat modely z jednoho studia a částice z jiného, ​​ale musíte zajistit kompatibilitu stylů.
  • Vyhněte se používání aktiv ve formě, ve které byly zakoupeny. Stačí provést drobné změny (například mírně překreslit textury, restrukturalizovat částice) nebo nestandardně využívat aktiva.
  • Pokud plánujete vydat hru na mobilní platformy, ujistěte se, že zakoupená aktiva jsou pro ně optimalizována.

Zvláštní pozornost si zaslouží hudba a zvuky. Málokdy je vytváří indie tým sám o sobě (pokud máte skladatele, pak máte buď velké štěstí, nebo už nejste indie). Naštěstí existuje velké množství služeb, které poskytují bezplatnou hudbu a zvuky, včetně obchodu Unity Assets Store. A je to velmi levné.

Nestačí si jen koupit hudbu a zvuky. Je potřeba dbát na to, aby ve hře zněly správně a nedráždily ucho. Pokud jste si jisti svými schopnostmi, můžete to zkusit sami. Obrátili jsme se o pomoc na studio, které se specializuje na hlasové hraní. Získaný výsledek byl výrazně lepší, než jaký jsme mohli udělat sami, a stál za ty peníze.

Kam ukládat data: Parse

I když stejně jako my vytváříte hru pro jednoho hráče, stále budete potřebovat místo pro ukládání dat o aktuálním postupu hráče, statistiky jeho akcí, uskutečněných nákupech a další informace. Nejjednodušším řešením by bylo použít k tomu třídu Unity PlayerPrefs. Data však šetří lokálně a zjevně se nehodí pro citlivé věci, jako jsou nákupy ve hře.

Při hledání lepšího řešení jsme objevili Parse. Parse je multiplatformní služba BaaS (Backend as a Service – backend-as-a-service platforma, která poskytuje infrastrukturu cloudového serveru pro všechny typy aplikací – pozn. red.), která umožňuje aplikaci ukládat data v cloudu, podporuje autorizaci uživatelů, funkce serveru, push notifikace a analýzy. Toto není vyčerpávající seznam funkcí, ale poskytuje obecnou představu o tom, co je Parse.

Jedním z důvodů, proč jsme zvolili Parse, byla jeho integrace s Facebookem (první verze Fold the Adventure byla vytvořena speciálně pro Facebook). A přestože se později těžiště vývoje přesunulo na mobilní platformy, pokračovali jsme v používání Parse.

Další příjemnou vlastností Parse je jeho cenová politika. Zpočátku to vypadá trochu divně, ale po zamyšlení a výpočtech se to ukazuje jako více než úspěšné. V podstatě jste omezeni počtem požadavků za sekundu. Dobrou zprávou je, že 30 požadavků za sekundu je zdarma. Možná se to nezdá, ale ve skutečnosti to na podporu tisíců uživatelů stačí. Pokud budete tyto dotazy používat moudře.

V Parse děláte vše prostřednictvím dotazů. Chcete-li získat a změnit datová pole, vytvořit vztahy mezi tabulkami, vytvořit výběr - vše vyžaduje dotaz. Na první pohled by měl být počet požadavků poměrně velký, ale ve skutečnosti lze většinu základních operací spojit do jednoho požadavku pomocí metody ParseObject.SaveAllAsync. Parse navíc vyvolá výjimku, pokud je překročen limit požadavků za sekundu. Nic vám ale nebrání chvíli počkat a požadavek provést znovu. A přestože se hra v tomto případě může uživateli zdát zamrzlá, lze tomuto problému snadno předejít drobnými úpravami uživatelského rozhraní a logiky ukládání a čtení dat.

Jediná věc, na kterou by se Parse neměl používat, je vytvoření herního serveru. I když vyvíjíte tahovou hru, účel Parse je zásadně odlišný. Existují i ​​jiná řešení, která jsou pro tyto účely výrazně vhodnější.

Použití Parse v Unity není nijak zvlášť obtížné a je dobře zdokumentováno. V podstatě si musíte stáhnout Parse SDK, nastavit hru na serveru Parse a projektu Unity a trochu programovat. Jedno zřejmé upozornění: Parse nebudete moci používat, pokud zařízení, na kterém je vaše hra nainstalována, nemá přístup k internetu.

Pokud je potřeba podporovat offline režim a aktualizovat data v Parse, když je k dispozici síťové připojení, budete si pro to muset napsat malý samostatný systém. K tomu jsme použili třídu PlayerPrefs. Systém ukládá data lokálně a nahraje je do Parse, jakmile detekuje připojení k internetu.

Počítač vs. mobil: kompromisy

Navzdory postupné konvergenci v posledních letech se desktopové a mobilní platformy od sebe stále velmi liší. To je zřejmé, když se snažíte, aby "hezké" shadery fungovaly přijatelně (nemluvě o tom, aby běžely rychle) na všech zařízeních, na kterých má hra běžet. Unity tento proces značně zjednodušuje, ale bohužel neřeší všechny problémy.

Článků věnujících se optimalizaci Unity her pro mobilní platformy je obrovské množství, takže zde na toto téma bude řečeno jen málo.

  • Pokud plánujete spuštění na mobilních platformách a použití stínů, omezte se na režim dopředného osvětlení. Navzdory vypálení osvětlení a snížení počtu objektů, které vrhají stíny, jsme nebyli schopni dosáhnout přijatelného výkonu v režimu odloženého osvětlení. Možná jsme se dostatečně nesnažili, ale fóra Unity s námi v této otázce většinou souhlasí.
  • Minimalizujte počet losovacích hovorů. Velký počet polygonů v modelech neovlivní výkon tolik jako další volání losování. Plánovali jsme velkou optimalizaci zaměřenou na snížení počtu losovacích hovorů, abychom lépe podpořili starší modely mobilních zařízení, ale bohužel se nám to v napjatých termínech nepodařilo.
  • Nepoužívejte nadměrně načítání textur v shaderech. To může vést k výraznému poklesu výkonu. V naší hře jsme byli nuceni použít několik speciálních shaderů místo jednoho univerzálního – právě z tohoto důvodu.

Kromě výkonnostních rozdílů a hardwarových omezení existuje ještě jeden důležitý rozdíl mezi desktopovými a mobilními platformami. A tímto rozdílem je vstupní režim. Hra navržená pro ovládání pomocí klávesnice a myši se nedá dobře převést na vícedotykové ovládání a ovládání akcelerometru. Naučili jsme se to vlastní trpkou zkušeností. Za prvé, Unity odděluje myš a vícedotykové zpracování. Proto bylo nutné vytvořit systém, který by tento aspekt sjednotil. Pro tyto účely jsme použili vstupní systém od NGUI, který se po drobných úpravách ukázal jako velmi dobrý. Také nám to umožnilo vyřešit problém s distribucí vstupu mezi uživatelské rozhraní a ovládací prvky hry, což nám v té době způsobovalo určité potíže.

Uživatelské rozhraní jako celek vyžadovalo řadu úprav, aby správně podporovalo mobilní zařízení. Například místo rolování kolečkem myši a držení tlačítek jsme museli zavést vícedotyková gesta. Některé úpravy by mohly být potenciálně snazší pomocí hotových řešení z Unity Assets Store. Ale v našem případě to byla jednoduchá špetka, a proto jsme se rozhodli napsat to za hodinu od nuly, místo abychom trávili dny připojováním a laděním systému, který „udělá všechno a ještě víc“.

Nejvíce problémů způsobilo ovládání ve hře. Začali jsme s tradičním nastavením ASWD + myši pro ovládání postavy a kamery a plánovali jsme použití joysticku na obrazovce na mobilních zařízeních. Ale věci nefungovaly tak, jak jsme očekávali: hra se stala téměř neovladatelnou. Museli jsme naléhavě změnit ovládání ve hře a zároveň provést změny i v herních mechanismech. Pomocí pokusů a omylů jsme se shodli na ovládání typu point-n-click, které je na mobilních zařízeních intuitivní.

Lokalizace: čím jednodušší, tím lepší

Pokud chcete, aby vaše hra byla úspěšná v globálním měřítku, pak je bezpochyby nutné ji lokalizovat. A lokalizace je další součástí vývoje, kterou nezávislý tým téměř nikdy nemůže udělat sám. To znamená jediné: budete muset zaplatit za lokalizaci.

Vše, co souvisí s lidskou řečí, je potřeba lokalizovat. Tedy texty, řeč, nápisy na texturách – to vše musí být lokalizováno. Tento proces se může rychle stát velmi časově náročným a nákladným. Proto je nesmírně důležité omezit množství lokalizovaného obsahu na minimum.

Popiskům na texturách je lepší se vyhnout a použít například textová pole NGUI. Pokud je ve hře vyžadována řeč, budou pravděpodobně vyžadovány titulky, protože lokalizace řeči je nejen drahá, ale také náročná na prostor, který hra zabírá.

Ale minimalizace lokalizovaného obsahu je jen začátek. Další fází je příprava samotné hry na lokalizaci. Špatnou zprávou je, že Unity (v době psaní tohoto článku) nemá pro tyto účely vestavěné mechanismy. A přestože v Unity Assets Store existuje řada specializovaných řešení (například l2 Localization), rozhodli jsme se použít lokalizační systém, který je součástí NGUI.

Lokalizační systém NGUI je jednoduchý a přímočarý na použití. Je postaven na jediném souboru CSV obsahujícím sloupec pro každý jazyk. Mít takový soubor je velmi výhodné pro odeslání řetězců k překladu (existuje na to velké množství specializovaných služeb) a následné vložení přeložené verze.

Napsat

Docela populární. Jestliže dříve byly počítačové hry pouze zábavou pro úzký okruh fanoušků, nyní se tato oblast dostává na zcela novou úroveň. O počítačové hry se zajímá stále více lidí a neustále vycházejí projekty vhodné pro určité věkové a cílové skupiny (například rodinné hry).

Samozřejmě za tím někdo stojí – ve většině případů se jedná o celou společnost skládající se z několika poboček, z nichž každá se zabývá vlastní činností. Společně vytvářejí nejvýraznější a nejatraktivnější počítačové hry naší doby. Je však třeba poznamenat, že v poslední době se objevilo velké množství nezávislých her - projektů od nezávislých vývojářů. Může to být jeden člověk, nebo malá skupina stejně smýšlejících lidí, ale nejdůležitější je, že nemají obrovský rozpočet, stovky pracovníků s vysoce specializovaným vzděláním. A nyní si každý může napsat svou vlastní hru, protože existují jak speciální pracovní prostředí, tak i hotová jádra, například herní engine Unity. V tomto článku se dozvíte, co to je a proč je to potřeba.

Jádro hry

Stojí za to začít ne tím, co konkrétně je herní engine Unity, ale tím, co je v principu engine. Představte si, že píšete počítačovou hru – potřebujete napsat úplně všechen kód od nuly, úplně všechny sebemenší pohyby postav, pohyby protivníků, interakce s prostředím a tisíce dalších detailů. Neuvěřitelně těžké, že? Engine vám může značně usnadnit proces tvorby.

To je jádro projektu, které obsahuje všechny základní skripty. To znamená, že místo vytváření hry od nuly si můžete vzít hotové jádro a postavit na něm tolik vrstev obsahu, kolik chcete. Není třeba se obávat, že by to bylo nelegální – jádro neukradnete, ale jen jej používáte jako miliony jiných. Používání herních enginů vytvořených jinými je velmi běžná technika, pouze ty největší společnosti mají prostředky a možnosti k vytvoření vlastního herního enginu ve velkém měřítku. Pokud na to nemáte rozpočet, je lepší použít herní engine Unity. Ale proč právě on?

Proč Unity?

Existuje obrovské množství různých motorů, které jsou k dispozici online buď částečně zdarma, nebo zcela placené. Umožní vám vytvářet projekty ve 2D i 3D, umožní vám přístup k různým funkcím a tak dále. Proč byste si ale mezi nimi měli vybrat herní engine Unity a ne žádný jiný?

K takové volbě vás vlastně nikdo nenutí – existuje například velmi dobré jádro UDK, které mnoho lidí používá i k tvorbě 3D her. Pokud nemáte zájem o 3D obraz, můžete snadno vytvořit 2D projekt s příslušným enginem. Unity je ale nejpopulárnější a nejkvalitnější 3D engine, který je dnes k dispozici, takže jeho použití rozhodně zvažte. Herní engine Unity 3D má oproti ostatním řadu vážných výhod, o kterých bude řeč níže.

Výhody jednoty

Unity je nový engine pro vytváření 3D her. Mnoho lidí si klade otázku, proč by si jej měli vybrat. Jak již bylo zmíněno, nikdo vás nenutí si to vybrat. Nyní však zjistíte, proč se tolik odlišuje od ostatních.

Za prvé se jedná o vývojové prostředí – máte k dispozici mimořádně pohodlné a funkční IDE, které současně obsahuje editor scén, editor objektů a dokonce i malý editor skriptů. Co se týče posledně jmenovaného, ​​toto plus je zvláště patrné ve srovnání s ostatními, protože většina enginů již má svůj vlastní skriptovací jazyk, který musíte v každém případě používat. V případě Unity můžete použít buď místní jazyk, nebo jakýkoli jiný.

Samostatně stojí za zmínku úroveň grafiky, kterou lze ve hře vytvořit - ta je ve srovnání s většinou ostatních enginů poměrně vysoká. A samozřejmě stojí za zmínku nejvyšší úroveň fyziky - můžete vytvořit projekt, který není horší než jakékoli moderní mistrovské dílo, samozřejmě s náležitou dovedností.

Na závěr stojí za zmínku náklady - s tím se potýká mnoho začínajících vývojářů. V tomto případě není příliš vysoká - pouze jeden a půl tisíce dolarů. Pokud si přejete, můžete použít bezplatnou verzi - je plně funkční, ale nemá určitý počet užitečných funkcí. Hotový projekt bude také během hry neustále zobrazovat logo Unity. Nyní chápete, proč je Unity 3D populární herní engine. Ale opravdu to nemá nějaké stinné stránky? Nyní si o tom promluvme.

Nevýhody Jednoty

Mnozí se snažili najít nedostatky v tomto enginu, ale s obtížemi se hromadily stížnosti pouze na jednu věc - uzavřený zdrojový kód. V jistém smyslu jsou to opravdu nevýhody - můžete používat pouze jádro, které vám vývojář nabízí, nemůžete v něm provádět žádné změny, i když víte, jak na to. A i když vezmeme v úvahu skutečnost, že jste zaplatili jeden a půl tisíce dolarů, licence vám stále neumožňuje přístup k samotnému jádru. Když se ale podíváte z druhé strany, téměř žádný moderní engine vám přístup ke kódu jádra neposkytne, takže toto mínus lze považovat za vážnou nevýhodu. A v tomto úžasném motoru nemůžeme najít žádné další nedostatky.

Pomocí Unity

Použití tohoto enginu již bylo zmíněno dříve - IDE pro něj je prostě vynikající. Málokdy se najde tak funkční vývojové prostředí, které není přetížené zbytečnými detaily, není úplně holé a nepohodlné. V Unity je vše v pořádku - můžete okamžitě přistupovat k editoru herních scén, herním objektům a dokonce i skriptům, které se na ně vztahují. Úryvek z toho, na čem jste pracovali, můžete vidět v reálném čase přímo v IDE. V tomhle Unity prostě nemá konkurenty – tenhle motor je skvělý.

Ruská jednota

Pokud neumíte anglicky, nebojte se, Unity můžete stále používat. Herní engine v ruštině existuje a je aktivně podporován, takže můžete snadno vytvářet herní mistrovská díla v přeložené verzi. Navíc existuje obrovská rusky mluvící online komunita věnovaná tomuto motoru - tam se můžete dozvědět nejnovější zprávy, přečíst si názory zkušených uživatelů a položit otázky, které vás zajímají. Unity3D v ruštině je docela možné.

Přidávání skriptů

Již bylo řečeno výše, že nebudete moci změnit kód jádra. Zároveň však můžete přidávat své vlastní skripty a také stahovat skripty vytvořené jinými uživateli.