Programování hry s jednotou: Průvodce pro začátečníky

Programování hry s jednotou: Průvodce pro začátečníky
Tato příručka je k dispozici ke stažení jako bezplatný soubor PDF. Stáhnout tento soubor nyní . Neváhejte to zkopírovat a sdílet se svými přáteli a rodinou.

Překvapivým rysem internetové ekonomiky je vzestup nezávislých videoher. Kdysi se jednalo o výhradní doménu studií typu tri-A s tisíci muži a několika miliony dolarů, byla vyvinuta řada sad nástrojů, které přinášejí moderní zdroje pro vývoj her do rukou jednotlivců nebo malých ad-hoc sbírek programátorů a designérů. Dříve jsme diskutovali o nejlepších nezávislých hrách, takže se na ně podívejte, abyste získali inspiraci ohledně toho, čeho lze dosáhnout pomocí nástrojů, jako je Unity.





Tyto nezávislé týmy pro vývoj her prokázaly hbitost a toleranci rizika, které jim v mnoha případech umožňují posunout inovace hry rychleji než jejich velcí rozpočtoví kolegové. V posledních letech měla premiéru řada šokující úspěšných nezávislých titulů, včetně Minecraft , Předpeklí , a Super masový kluk , a i když k vytváření podobných her nepotřebujete dovednosti, můžete si hru vytvořit pomocí Buildboxu.





V rychle se rozvíjející krajině vývoje nezávislých her Jednota se ukázal jako de-facto standard: nízké náklady, snadné použití a široká sada funkcí z něj činí ideální nástroj pro rychlý vývoj her. Jednota je tak flexibilní, že můžete dokonce vytvořte si vlastní herní ovladače s trochou DIY know how!





I velká studia jako CCP (Developers of Eve online ) použít jej pro rychlé prototypování herních konceptů. Unity poskytuje „herní engine v krabici“ - fyzikální a vykreslovací engine s háčky pro několik skriptovacích jazyků, přizpůsobitelný prakticky jakémukoli žánru videohry.

Zatímco Unity poskytuje vizuální editor pro manipulaci s herním prostředím, Unity není nástroj pro vytváření her s „nulovým programováním“. Vyžaduje, abyste programovali, abyste dosáhli výsledků, ale také vám poskytne mnohem flexibilnější a výkonnější nástroj, než jaký by mohl jakýkoli program „tvůrce her“.



Unity nebude dělat práci za vás, ale podstatně sníží bariéru vstupu. Počínaje úplně od začátku s C ++ a OpenGL může trvat několik dní, než se dostanete do bodu, kdy je na obrazovce skutečně něco vykresleno. Pomocí Unity to trvá asi deset sekund. Unity vkládá základní prvky tvorby her do rukou začínajících programátorů rychlým a intuitivním způsobem.

Dnes vás provedu vším, co potřebujete vědět, abyste mohli hrát hru v Unity, která je rozdělena do deseti hlavních kapitol:





§1 - Verze jednoty

§2 - Instalace Unity





§3-Stručný úvod do objektově orientovaného paradigmatu

§4 - Základy jednoty

§5 - Příklad: Základní prvky hry

§6 - Skriptování v jednotě

§7 - Příklad: Skriptovací jazyk

§8 - Prozkoumání dokumentace / Další informace

§9 - Budování hry / kompilace do samostatné aplikace

§10-Závěrečné poznámky

1. Verze jednoty

Unity přichází ve dvou základních příchutích: pro verze a bezplatná verze. Existují a počet rozdílů , ale obecně řečeno, profesionální verze podporuje řadu vizuálních vylepšení (jako jsou měkké stíny v reálném čase a následné zpracování) a velké množství relativně malých funkcí, které jsou velmi užitečné pro složitější hry.

To znamená, že pro většinu relativně jednoduchých her, které byste mohli chtít stavět, je bezplatná verze Unity naprosto dostačující. Pro zájemce rozebereme níže níže klíčové rozdíly podrobněji.

1.1 Ceny

Bezplatná verze Unity je samozřejmě zdarma. Existuje však několik omezení: bezplatnou verzi Unity nelze licencovat žádné společnosti s ročním příjmem vyšším než 100 000 dolarů . Přestože takové organizace přesahují rámec této příručky, pokud máte podezření, že byste se takovou organizací mohli stát, je pravděpodobně moudré začít s verzí Pro.

Pro verze Unity je 75 dolarů měsíc, popř 1 500 $ pro trvalou licenci a neomezuje se na to, co můžete dělat s hrami s ní vytvořenými. K dispozici je také 30denní bezplatná zkušební verze, kterou pro tuto příručku použijeme, abychom vám poskytli co nejúplnější přehled dostupných funkcí. Prostřednictvím je k dispozici také roční studentská licence Studie pro 129 dolarů .

1.2 Funkce

Ve bezplatné verzi Unity mnoho funkcí chybí. Nejdůležitější rozdíly jsou však následující: bezplatná verze Unity postrádá řadu možností vykreslování, které by umožňovaly lépe vypadající, rychleji běžící hry (podpora LOD, postprocesing na obrazovce, pokročilé shadery, soft v reálném čase stíny a odložené vykreslování). Také tomu chybí naplno mechanický animační systém a některé nástroje AI.

Obecně platí, že pro komplexní, rozsáhlé projekty nebo projekty, kde je důležitý grafický výkon, se profi verze vyplatí. Používám verzi Pro, protože vyvíjím hry pro virtuální realitu pro Oculus Rift a podpora postprocesingu na obrazovce je nezbytná pro správnou interakci s náhlavní soupravou.

2. Instalace Unity

Instalace Unity je jednoduchá. Spustitelný soubor si můžete stáhnout z unity3d.com/get-unity/download .

Po stažení jej spusťte a postupujte podle pokynů instalačního programu. Po dokončení instalace se zobrazí okno s názvem „aktivujte licenci Unity“. Zaškrtněte políčko označené „aktivovat bezplatnou 30denní zkušební verzi Unity Pro“ a poté „OK“.

Gratulujeme! Nyní máte 30denní zkušební verzi Unity Pro. Když platnost zkušební verze vyprší, pokud si nechcete koupit profesionální verzi, můžete přepnout na bezplatnou verzi a ponechat si stávající obsah.

jak obnovit smazané zprávy na facebook messengeru

3. Stručný úvod do objektově orientovaného paradigmatu

Než začnete s Unity, je důležité, abychom si trochu prošli základy. Unity podporuje obojí C # a JavaScript pro programování her ; pro tento tutoriál budeme pracovat s C#.

Za prvé, pokud jste nikdy předtím neprogramovali, dejte tento návod stranou a strávte pár dní prací v Microsoftu Jazyk C # Primer dokud se necítíte pohodlně používat jazyk pro jednoduché úkoly.

Pokud byste chtěli něco trochu jiného než C# (ale ne nutně jazyk, který můžete použít v Unity), pak se podívejte na našeho průvodce šesti nejjednodušších programovacích jazyků pro začátečníky.

Pokud jste dříve programovali v imperativním nebo objektově orientovaném jazyce, jako je C nebo Java, projděte si základní nátěr a seznamte se s tím, jak se C# liší od ostatních jazyků, které jste v minulosti používali. Ať tak či onak, nepokračujte v tutoriálu, dokud se nebudete cítit pohodlně při řešení jednoduchých problémů s C# (například kdybych vás měl požádat o napsání programu, který vytiskne prvních sto prvočísel, měli byste být schopni tento program napsat bez konzultace s Googlem).

Nejdůležitějším konceptem, který je zde třeba pochopit, je objektově orientované paradigma (zkráceně jako OTEVŘENO ). V objektově orientovaných jazycích jsou programy rozděleny na funkční jednotky zvané Objekty . Každý objekt má své vlastní soukromé proměnné a funkce. Nazývají se funkce specifické pro objekt metody .

Myšlenkou je modularita: tím, že necháte každý objekt izolovat a donutíte ostatní objekty, aby s ním interagovaly prostřednictvím svých metod, můžete snížit počet možných neúmyslných interakcí - a potažmo chyb. Můžete také vytvářet objekty, které můžete znovu použít později bez úprav. V Unity budete stavět tyto objekty a připojovat je herní entity (čí chování budou řídit).

Objekty jsou vytvořeny z instancí třídy : třída je pouze soubor, který stanoví definici vašeho objektu. Pokud tedy chcete a mook objekt, který ve vaší hře zpracovává AI pro nepřítele, napíšete třídu „Mook“ a poté připojíte tento soubor ke každé nepřátelské entitě. Když spustíte hru, každý nepřítel bude vybaven kopií objektu „Mook“.

Připojení nového skriptu k objektu vypadá takto:

Za prvé, vyberte objekt a jděte do Inspektor . Klikněte na Přidat komponentu knoflík.

Jít do nový skript , zadejte požadované jméno a klikněte vytvořit a přidat .

Nyní máte nový skript, který můžete upravit dvojitým kliknutím!

Soubor třídy vypadá nějak takto:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Pojďme to rozebrat:

  • Použití UnityEngine: Tento řádek říká C#, že chceme používat knihovny Unity, které nám umožňují připojení k hernímu enginu Unity.
  • Veřejná třída Mook: Mono Chování: Tento řádek deklaruje třídu a její název - mook .
  • Soukromý plovák zdraví: To deklaruje proměnnou soukromé třídy (kterou lze změnit pouze zevnitř třídy). Proměnné je dána hodnota v Start .
  • Void Start (): To deklaruje metodu s názvem Start . Start je speciální metoda, která se spustí pouze jednou, když se hra původně spustí.
  • Zrušit aktualizaci (): Aktualizace je další speciální metoda, která běží na každém snímku. Zde půjde většina vaší herní logiky.
  • // pokud hráče potkáte na silnici, zabijte ho: Tento řádek je komentář (jakýkoli řádek začínající dvojitým lomítkem C#ignoruje). Komentáře slouží k připomenutí toho, co konkrétní bity kódu dělají. V tomto případě se tento komentář používá k označení složitějšího bloku kódu, který ve skutečnosti dělá to, co komentář popisuje.

Spolu s Start a Aktualizace , můžete vytvořit vlastní metody s téměř libovolným názvem. Metody, které vytvoříte, se však nespustí, pokud nebudou volány. Deklarujme metodu pro hypotetickou třídu s názvem addTwoNumbers který sčítá dvě čísla dohromady:

public float addTwoNumbers(float a, float b) {
return a+b;
}

To deklaruje veřejnou (přístupnou jiným objektům) metodu, která vrací float, nazvaný addTwoNumbers , který bere jako vstup dva plováky (tzv na a b ). Poté vrátí součet těchto dvou hodnot jako výstup.

Volání této metody ze stejné třídy (řekněme zevnitř Aktualizace ) vypadá takto:

float result = addTwoNumbers(1, 2);

Volání metody z jiné třídy je podobné:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

Znovu to vytvoří instanci naší třídy, přistupuje k příslušné metodě a přidá jí čísla, která chceme přidat, a výsledek uloží do výsledek . Jednoduchý.

Pokud je váš skript připojen k objektu, který má speciální vlastnosti (jako emitor částic), ke kterému nelze přistupovat v rámci normální sady parametrů GameObject, můžete se rozhodnout jej považovat za jiný druh herní entity pomocí GetComponent metoda.

Syntaxe pro to vypadá takto:

GetComponent().Play();

Pokud je vám něco z toho neznámé, vraťte se a projděte C# primer. Jak budeme pokračovat, ušetří vám to spoustu frustrace.

4. Základy jednoty

V této sekci se probereme základní mechanikou enginu Unity. Pracovní postup v Unity probíhá asi takto:

  1. Vytvořte entitu, která bude hrát roli ve hře (prázdné Objekty hry lze použít pro abstraktní logické úlohy).
  2. Napište nebo najděte soubor třídy a přidejte jej do entity jako skript (pomocí Přidat komponentu tlačítko v inspektor Pohled.
  3. Běh > test > ladit > opakovat dokud to nefunguje a přejít k dalšímu prvku hry.

Unity přichází s řadou základních karet zobrazení, které lze různě rozložit podle vkusu uživatele. Velká pětka je:

  1. Hra: zobrazuje spuštěnou instanci hry, se kterou můžete komunikovat a testovat ji.
  2. Scéna: poskytuje statickou, upravitelnou verzi herní svět .
  3. Inspektor: umožňuje upravovat jednotlivé entity v herním světě jejich výběrem v editor tab.
  4. Projekt: umožňuje procházet soubory projektu a přetahovat modely, materiály a další zdroje do souboru editor kartu a umístěte je do herního světa.
  5. Hierarchie: tato karta zobrazuje všechny objekty na světě, což vám umožňuje najít vzdálené objekty ve scéně a nadřazené entity k sobě navzájem kliknutím a přetažením.

Umístění všech těchto věcí najdete v níže uvedeném diagramu:

4.1 Jednotné entity

4.1.1 Oka

Cestou jsou oka 3D geometrie je zastoupena v Unity. Můžete buď použít vestavěný Unity primitivní objekty (kostky, koule, válce atd.), nebo importujte své vlastní 3D modely z modelovacího balíčku jako Mixér nebo Maya . Unity podporuje celou řadu 3D formátů, včetně .fbx , a .3ds .

Základní nástroje pro manipulaci se sítěmi jsou tlačítka pro změnu měřítka, otočení a překlad v levém horním rohu rozhraní. Tato tlačítka přidávají k modelům v zobrazení editoru ovládací ikony, s nimiž pak lze manipulovat v prostoru. Chcete -li změnit texturu nebo fyzikální vlastnosti objektu, vyberte je a použijte inspektor pohled analyzovat materiál a tuhé tělo elementy.

4.1.2 Prvky GUI

Tradiční skřítky a text GUI lze zobrazit pomocí Text GUI a GUI textura GameObjects v editoru. Robustnějším a realističtějším způsobem, jak zacházet s prvky uživatelského rozhraní, je použít 3D text a Quad GameObjects (s průhlednými texturami a neosvětleným průhledným shaderem) pro umístění prvků HUD do herního světa jako entit.

V hierarchie pohled, tyto herní prvky lze přetáhnout na hlavní kameru, aby se staly dětmi, a zajistit tak, že se budou pohybovat a otáčet s kamerou.

Prvkům GUI (text a textury) lze upravit velikost a měřítko pomocí příslušných polí na kartě inspektora.

4.1.3 Materiály

Materiály jsou kombinací textur a shaderů a lze je přetáhnout přímo na herní objekty z karty projektu. Unity Pro obsahuje velké množství shaderů a texturu, která je k nim připojena, můžete upravit pomocí karty inspektora u objektu, na který jsou aplikovány.

Chcete -li importovat texturu, převeďte ji na soubor .jpg , .png , nebo .bmp , a přetáhněte ji do aktiva složku v adresáři projektu Unity (která se zobrazí v Moje dokumenty ve výchozím stavu). Po několika sekundách se v editoru zobrazí lišta načítání. Až skončí, budete moci obrázek najít jako texturu pod ikonou projekt tab.

4.1.5 Světla

Světla jsou Objekty hry které promítají záření do světa. Pokud ve vaší scéně nejsou žádná světla, všechny polygony jsou vykresleny na stejné úrovni jasu, což dává světu plochý, vybledlý vzhled.

Světla lze polohovat, otáčet a mají několik vnitřních charakteristik, které si můžete přizpůsobit. The intenzita posuvník ovládá jas světla a rozsah určuje, jak rychle zmizí.

Pokyny v souboru zobrazení scény ukáže vám maximální dosah osvětlení. Hrajte s oběma nastaveními, abyste dosáhli požadovaného efektu. Můžete také upravit barvu světla, vzor ( cookie na povrchu je světlo namířeno a jaký druh vzplanutí se objeví na obrazovce při přímém pohledu na světlo. Soubor cookie lze použít k předstírání realističtějších světelných vzorů, vytváření dramatických falešných stínů a simulaci projektorů.

Tři hlavní druhy světla jsou bod , směřovat , a směrový .

Bodová světla mít umístění ve 3D prostoru a promítat světlo pouze v jednom směru v kuželu s proměnným úhlem. Jsou dobré pro baterky, světlomety a obecně vám poskytnou přesnější ovládání osvětlení. Bodová světla mohou vrhat stíny.

Bodová světla mít umístění ve 3D prostoru a vrhat světlo rovnoměrně ve všech směrech. Bodová světla nevrhají stíny.

Směrová světla Nakonec se používají k simulaci slunečního světla: promítají světlo ve směru, jako by byly nekonečně daleko. Směrová světla ovlivňují každý objekt ve scéně a mohou vytvářet stíny.

4.1.6 Částicové systémy

NA Systém částic je GameObject který generuje a kontroluje stovky nebo tisíce částic současně. Částice jsou malé, optimalizované 2D objekty zobrazené ve 3D prostoru. Částicové systémy používají zjednodušené vykreslování a fyziku, ale dokážou zobrazit tisíce entit v reálném čase bez koktání, což je ideální pro kouř, oheň, déšť, jiskry, magické efekty a další.

Existuje mnoho parametrů, které můžete vyladit, abyste dosáhli těchto efektů, a můžete k nim přistupovat vytvořením částicového systému pod editor komponent > výběr částicového systému > otevření karty inspektora . Můžete změnit velikost, rychlost, směr, rotaci, barvu a texturu každé částice a nastavit, aby se většina těchto parametrů měnila také v čase.

Pod kolize atribut, pokud jej povolíte a nastavíte prostor simulace na svět získáte částice, které se srazí s objekty na světě, které lze použít pro řadu realistických efektů částic, včetně deště, pohybující se vody a jisker.

5. Příklad: Základní prvky hry

Pro tento tutoriál uděláme jednoduchou hru Pong - něco, o čem jsme se v DIY několikrát zabývali:

  • Arduino Classic Pong
  • Arduino OLED Pong

V této části si projdeme uspořádání základních prvků - skriptovací tutoriál přijde později.

Nejprve rozebereme hru Pong na její základní součásti. Nejprve potřebujeme dvě pádla a míč. Míč letí mimo obrazovku, takže budeme chtít mechanismus k jeho resetování. Chceme také, aby text zobrazoval aktuální skóre, a abychom vám ukázali všechny základní prvky Unity, budeme chtít efektní efekt částic, když trefíte míč. Celá hra bude muset být dramaticky nasvícena.

To se rozpadá na a kuličkový předmět (koule), a spawner , dvě pádlové rekvizity s zářiče částic přiloženo, a 3D textová entita a bodové světlo . V tomto kurzu použijeme výchozí fyzikální materiál odskočit , s odrazit kombajn nastaven na násobit . Takto vypadá nastavení na deseti screenshotech:

Nejprve vytvořte a kostka prop pro pádlo.

Vhodně to upravte duplikovat to , a vložte a koule mezi pádly pro míč.

Poté vytvořte a Objekt 3DText a měřítko a pozice správně, změna velikost písma atribut pro získání méně pixelovaného obrázku.

Dále vytvořte dvě částicové systémy , vyberte požadované vlastnosti a připevněte je k pádlům.

Dále budete chtít umístěte a otočte fotoaparát tak, aby správně zarámoval scénu. Když je vybrána kamera, v pravém dolním rohu se zobrazí malý náhled pohledu kamery.

Než skončíme, musíme vytvořit další dvě kostky, které budou nárazníky, abychom zabránili odrazu míče z herní oblasti. Můžeme je zneviditelnit zrušením zaškrtnutí políčka síťový renderer v karta inspektora .

Pokud stisknete Play, můžete nyní vidět základní prvky naší hry. Zatím nic neudělají, ale k tomu se dostaneme!

Nyní, když máme toto nastavení, budeme hovořit o tom, co je součástí skriptování těchto prvků pro vytvoření hry.

6. Skriptování v jednotě

Jakmile máte k objektu připojený skript, můžete jej revidovat dvojitým kliknutím na něj v inspektor . Tím se otevře MonoVývoj , výchozí vývojové prostředí pro Unity. Monodevelop je v podstatě textový editor s funkcemi specificky optimalizovanými pro programování.

Klíčová slova a komentáře jsou zvýrazněny v modrý a zelená , a číselné hodnoty a řetězce se zobrazí v síť . Pokud jste použili Zatmění nebo jiné IDE, MonoDevelop je velmi podobný. Můžeš stavět vaše skripty zevnitř editoru, abyste zkontrolovali chyby syntaxe, například:

Obecně platí, že aby váš skript mohl komunikovat s Unity, budete muset odkazovat na prvky, které objekt, který skript vlastní, obsahuje (seznam těchto prvků můžete vidět pod inspektor když je vybrán příslušný objekt). Potom můžete zavolat metody nebo nastavit proměnné pro každý z těchto prvků, abyste provedli požadované změny.

Pokud chcete, aby skript na objektu ovlivnil vlastnosti jiného objektu, můžete vytvořit prázdný GameObject proměnnou ve vašem skriptu a použijte inspektor přiřadit k jinému objektu ve scéně.

Seznam prvků, které objekt může mít, je následující (převzato z pohledu inspektora jedné z našich pádel ve výše uvedeném příkladu):

  1. Přeměnit
  2. Kostka (síťový filtr)
  3. Box Collider
  4. Vykreslovač sítě

Každý z těchto aspektů objektu lze ovlivnit skriptem. Dále se podíváme na to, jak přesně.

6.1 Transformace

Transformační funkce pro GameObject v Unity řídí fyzické parametry tohoto objektu: its měřítko , své pozice , a jeho orientace . Můžete k nim přistupovat ze skriptu, jako je tento:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

Ve výše uvedených příkladech jsou pojmenované proměnné typů uvedených v názvech. Zde je několik klíčových podrobností: poloha a měřítko jsou, jak byste očekávali, uloženy jako Vector3s . Můžete přistupovat k X , A , a S součásti každého z nich (např. transformace.pozice.r udává vzdálenost objektu nad nulovou rovinou).

Nicméně, aby se zabránilo kardanový zámek , rotace jsou zpracovávány jako Kvaterniony (čtyřsložkové vektory). Protože ručně manipulující čtveřice je neintuitivní, můžete manipulovat s rotacemi pomocí eulerovských úhlů pomocí Quaternion.Euler metoda takto:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

Pokud si přejete hladce přesouvat předměty z jednoho místa na druhé, najdete Slerp užitečná metoda pro čtveřice a vector3s. Slerp přijímá tři argumenty - aktuální stav, konečný stav a rychlost změny a plynule mezi nimi interpoluje při dané rychlosti. Syntaxe vypadá takto:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Vykreslování

Funkce rendereru v Unity vám umožňují řídit způsob vykreslování povrchů rekvizit na obrazovce. Můžete přiřadit texturu, změnit barvu a změnit shader a viditelnost objektu. Syntaxe vypadá takto:

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

Většina z nich má docela jasné funkce. První příklad činí předmět neviditelným: užitečný trik v řadě situací. Druhý příklad přiřadí nový Barva RGB (jmenovitě zelená) příslušnému objektu. Třetí přiřadí hlavní difúzní texturu nové proměnné Texture. Poslední příklad změní shader materiálu objektu na nově definovanou proměnnou shaderu.

6.3 Fyzika

Unity přichází s integrovaným fyzikálním enginem - něco, co všechny hry využívající sandbox z fyziky používají. To vám umožní přiřadit fyzické vlastnosti objektů a nechat za sebe zpracovat detaily jejich simulace. Obecně platí, že namísto snahy implementovat vlastní fyziku pomocí učebnice a transformačního systému je jednodušší a robustnější použít fyzikální engine Unity v maximální možné míře.

Všechny fyzikální rekvizity vyžadují srážky . Vlastní simulaci však zpracovává a tuhé tělo , které lze přidat do souboru inspektor Pohled. Rigidbodies mohou být kinematický nebo nekinematický .

Rekvizity kinematické fyziky se střetávají s (a účinkem) rekvizitami nekinematické fyziky kolem sebe, ale nejsou ovlivněny samotnou kolizí. Statické kinematické rekvizity jsou příslovečné nepohyblivé objekty a pohyblivé kinematické objekty jsou příslovečnou nezastavitelnou silou (pro záznam, když se srazí, jednoduše procházejí navzájem).

Kromě toho můžete upravit úhlový odpor objektu (kolik energie potřebuje k jeho otočení), změnit jeho hmotnost, diktovat, zda je či není ovlivněn gravitací, a použít na něj síly.

Příklady:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

To vše je docela samozřejmé. Jediná věc, kterou je třeba poznamenat, je použití transformovat. vpřed . Všechny Vector3 mají tři komponenty ( .vpřed , .nahoru , a .že jo ), které jsou s nimi spojeny, ke kterým lze přistupovat a otáčet se s nimi ( vpřed je směr modré šipky v editoru). The transformovat. vpřed klíčové slovo je jednoduše vektor vpřed pro aktuální objekt o velikosti 1. Může být vynásoben plovákem, aby na objekt působil větší silou. Můžete také odkazovat transformace a transformovat. dobře , a negujte je, abyste získali obrat.

6.4 Kolize

Při vytváření hry byste často chtěli, aby kolize vyústila v změnu kódu ve vašem kódu, kromě pouhé simulace fyziky. K tomu budete potřebovat a metoda detekce kolizí .

K detekci kolizí v Unity je zapotřebí určité množství přípravné práce. Za prvé, alespoň jeden z objektů při srážce potřebuje a nekinematická pevná tělesa k tomu připojený. Oba objekty musí mít správné kolize, nastavené tak, aby nespouštěly. Celková rychlost obou objektů musí být dostatečně nízká, aby se ve skutečnosti srazily, místo aby mezi sebou jednoduše přeskakovaly.

Pokud máte vše, o co jste se postarali, můžete zkontrolovat kolizi umístěním speciální metody detekce kolize do skriptu připojeného k objektu, se kterým chcete kolizi zkontrolovat. Metoda bude vypadat takto:

void OnCollisionEnter(Collision other) {
//do things here
}

Tato metoda se automaticky spustí během prvního snímku, kterého se jiný objekt dotkne vašeho objektu. Kolizní entita jiný je odkaz na předmět, na který narazíte. Můžete na něj například odkazovat gameobject , tuhé tělo , a přeměnit vlastnosti, jak s ním různými způsoby manipulovat. Zatímco OnCollisionEnter je pravděpodobně nejběžnější funkcí, kterou budete používat, můžete také použít OnCollisionExit a Zůstaňte na OnCollision (s jinak identickou syntaxí a použitím), které se aktivují během prvního snímku, ve kterém přestanete kolidovat s objektem, a během každého rámce, ve kterém kolidujete s objektem.

Někdy může být také užitečné udělat to, co se nazývá raycasting . V raycastingu je nekonečně tenká čára (a paprsek ) je vrhán světem z nějakého původu, podél nějakého vektoru, a když na něco narazí, vrátí se poloha a další detaily první kolize. Kód pro raycast vypadá takto:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

To vrhá paprsek z polohy aktuálního objektu podél -Vector3.up (přímo dolů) a spojuje proměnnou udeřil k prvnímu objektu, se kterým se srazí. Jakmile váš paprsek něco zasáhne, máte přístup hit.distance určit, jak je to daleko, popř hit.GameObject manipulovat s předmětem, na který narazíte.

Raycasty, jako je tento, lze použít pro střelce k určení, na co zbraň míří, nebo k výběru předmětů, když se na ně kamera dívá, nebo pro určité styly mechaniky pohybu.

6.5 Korekce času

Jeden důležitý faktor, který je třeba mít na paměti při manipulaci s objekty tímto způsobem, souvisí s snímková frekvence . Bez ohledu na to, jak pečlivě optimalizujete, se snímkové frekvence vždy budou lišit a vy nechcete, aby se podle toho lišila i rychlost vaší hry. Pokud vaši hru provozuje někdo jiný na rychlejším počítači, než na kterém jste ji vyvíjeli, nechcete, aby hra běžela dvojnásobnou rychlostí.

Způsob, jakým to opravíte, je vynásobením hodnot, které používáte, časem potřebným k vykreslení posledního snímku. To se provádí pomocí Time.deltaTime . To efektivně mění rychlost jakékoli proměnné, ze které zvyšujete každý snímek změnit na snímek na změna za sekundu , a pravděpodobně byste měli provést tuto změnu na jakoukoli hodnotu, kterou zvyšujete nebo snižujete každý snímek.

6.6 Zdroje zvuku a posluchače

Nyní, když jsme se zabývali vytvářením, vykreslováním a ovládáním objektů, pojďme si promluvit o dalším smyslu, kterému mohou počítačové hry sloužit: konkrétně, zvuk . Unity podporuje dva druhy zvuků: 2D a 3D zvuky. 3D zvuky mění svou hlasitost na základě vzdálenosti a při pohybu vzhledem ke kameře zkreslují; 2D zvuky ne.

2D zvuky jsou vhodné pro hlasové přenosy a hudbu na pozadí a 3D zvuky platí pro zvuky generované událostmi ve světě. Chcete -li změnit, zda je zvuk 3D, vyberte jej v projekt zobrazení, přepněte na inspektor zobrazte a vyberte příslušnou možnost z rozevírací nabídky a poté stiskněte tlačítko zpětný import knoflík.

Abyste mohli zvuk skutečně přehrávat, musíte k němu připojit příponu zdroj zvuku na rekvizitu (rekvizita, ze které má zvuk pocházet, v případě 3D zvuku). Poté budete muset otevřít zvukový klip pole a vyberte zvukový soubor.

jak nainstalovat staré počítačové hry na Windows 10

Můžeš použít myAudioSource.Pause () a myAudioSource.Play () ovládat tyto zvukové soubory. Můžete upravit chování spadů, hlasitost a dopplerovské řazení zvuků pod inspektor kartu pro zdroj zvuku.

6.7 Vstup

Hra, která od uživatele nevyžaduje žádný vstup, není příliš velká. Existuje mnoho různých druhů vstupů, ve kterých si můžete přečíst, a téměř všechny jsou přístupné prostřednictvím Vstup a KeyCode předměty. Níže jsou uvedeny některé ukázkové vstupní příkazy (jejichž hodnoty jsou vyhodnoceny v každém rámci).

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

Funkce těchto řádků jsou většinou samozřejmé. Pomocí těchto tří druhů vstupních referencí můžete rekonstruovat řídicí schémata většiny moderních 3D počítačových her.

6.8 Ladění skriptu

Řekněme, že skript nefunguje. Jak říká dobrý lékař, může se vám stát, že se budete potýkat s problémy. Pokud jsou s vaším C#přímo chyby syntaxe, hra se obecně odmítne spustit, když stisknete Play, a pokud budete stavět skripty z editoru. Viz. níže:

Tyto chyby obvykle není nejjednodušší opravit. Problematičtější jsou jemné sémantické chyby, ve kterých jste úspěšně napsali soubor plný platného C# - jen ne takový, který by dělal to, co jste si mysleli. Pokud máte některou z těchto chyb a máte potíže se sledováním, existuje několik věcí, které můžete zkusit situaci zlepšit.

První je pozastavit provádění hry a zkontrolovat konzolu. Hru můžete pozastavit kliknutím na pauza ikonu v horní střední části editoru a poté vyberte řídicí panel ze spodní části okno (nebo stisknutím Ctrl > Posun > C ). I když neexistují žádné chyby, varování vám mohou pomoci poskytnout vodítka k tomu, co se může stát špatně.

Pokud to nefunguje, můžete se také pokusit získat představu o stavu skriptu vytištěním stavu interních proměnných, abyste ověřili, že program dělá to, co si myslíte, že dělá. Můžeš použít Debug.Log (String) vytisknout obsah řetězce do konzoly, když provádění programu narazí na tento řádek. Obecně platí, že pokud pracujete zpětně od toho, co si myslíte, že by se mělo dít prostřednictvím věcí, které by to měly dělat, nakonec dosáhnete bodu, kdy vaše ladicí výtisky nedělají to, co od nich očekáváte. V tom je vaše chyba.

7. Příklad: skriptovací pong

Abychom postavili Pong, rozdělme hru na její základní prvky: potřebujeme míč, který se ricochetuje tam a zpět mezi pádly při zvyšující se rychlosti, potřebujeme srovnávací tabulku, která ví, kdy míčky prošly pádly, a potřebujeme mechanismus pro restartování míče, když k tomu dojde. Dobrým prvním krokem by bylo přidat do míče nekininatické tuhé těleso, dvě kinematická tuhá tělesa na pádla, u všech vypnout gravitaci a přiřadit vhodný fyzický materiál ze standardních prostředků ( odskočit s odrazit kombajn nastaven na násobit ).

Níže si můžete prohlédnout scénář plesu s vysvětlujícími komentáři. Míč musí splnit několik základních cílů: měl by se odrazit komplikovaným způsobem, vždy udržovat pohyb na obou osách, a měl by zrychlovat náročným, ale ne nemožným tempem ve vodorovném směru.

BallHandler.cs

Dále musíme skriptovat naše pádlo, které si můžete prohlédnout níže. Pádlo se musí pohybovat nahoru a dolů v reakci na stisknutí kláves (ale ne mimo určité hranice). Také potřebuje spustit systém částic, když se s něčím srazí.

PaddleHandler.cs

Dále potřebujeme nepřátelskou AI: něco, co způsobí, že se nepřátelské pádlo bude pohybovat směrem k míči pevnou rychlostí. K tomu použijeme Vector3.Slerp pro maximální jednoduchost. Také bychom chtěli stejné chování částic, jaké vidíme na vlastním pádle.

EnemyAI.cs

Nakonec potřebujeme skript, který aktualizuje srovnávací tabulku a resetuje míč, když jde mimo hřiště.

ScoreboardUpdater.cs

S připojenými skripty a vyplněnými referencemi se při spuštění hry Pong dočkáme hraní!

Můžeš stáhněte si demo Pong „Pokud chcete vidět vše, co jsem nastínil, v akci. Funguje na systémech Windows, Mac a Linux.

8. Prozkoumání dokumentace / Další informace

Unity je komplexní engine s mnoha dalšími funkcemi, než by bylo možné v příručce tohoto stylu popsat, a to ještě před zahrnutím široké škály (bezplatných i komerčních) rozšíření Unity dostupných na internetu. Tato příručka vám poskytne silné výchozí místo pro rozvoj hry, ale sebevzdělávání je důležitou dovedností v každém úsilí, a dvojnásob zde.

Zásadním zdrojem je zde Unity ScriptReference . ScriptReference je prohledávatelná databáze, dostupná pro C# i Javascript, která obsahuje seznam všech příkazů a funkcí Unity s popisem jejich funkcí a stručnými příklady syntaxe.

Pokud máte potíže s editorem a rozhraním Unity, nebo máte rádi videonávody, je zde dlouhý seznam vysoce kvalitních Videonávody Unity k dispozici. Rozsáhlejší (ale méně široké) textové návody pro Unity jsou také k dispozici od CatLikeCoding.

Konečně, pokud máte otázky nad rámec dokumentace nebo výukových programů, můžete se na ně zeptat na konkrétní otázky odpovědi.Unity3d.com . Pamatujte, že odpovědi poskytují dobrovolníci, respektujte tedy jejich čas a nejprve prohledejte databázi, abyste se ujistili, že vaše otázka již nebyla zodpovězena.

9. Sestavení hry / kompilace do samostatné aplikace

Když jste vytvořili něco, na co jste hrdí (nebo jste dokončili klonování našeho mírně riskantního příkladu Pongu pro cvičení), je na čase přesunout vaši hru z editoru a přeměnit ji na něco, co můžete zveřejnit na internetu a vynutit si hrát vaši přátelé a rodina. K tomu budete muset vytvořit samostatnou aplikaci. Dobrou zprávou je, že v Unity je to velmi, velmi snadné. Existuje však několik potenciálních škytavek, na které si budete chtít dát pozor.

Pro začátek vězte, že můžete stavět pouze bezchybný projekt. Za tímto účelem se při sestavování ujistěte, že máte otevřenou konzolu: existují některé chybové podmínky, které hra v editoru ignoruje, ale přesto přeruší pokus o sestavení. Tím se do konzoly ukládají pouze chybové zprávy bez viditelných výsledků na obrazovce, což může být frustrující, pokud zapomenete zkontrolovat. Jakmile však budete mít kompilaci hry bez chyb, můžete si vybrat Nastavení sestavení pod Soubor nebo stiskněte Ctrl > Posun

> B . Otevře se jednoduché dialogové okno, které vám umožní vytvořit hru pro několik platforem.

Proces odtamtud je samozřejmý: vyberte své možnosti a stiskněte stavět ; hra vás vyzve k instalaci adresáře a umístí do něj spustitelný i datový adresář. Tyto dva soubory lze skomprimovat dohromady a distribuovat (jen se ujistěte, že neúčtujete poplatky za hru vytvořenou v demo Unity, protože to porušuje podmínky služby).

10. Závěrečné poznámky

Jako u každého nástroje pro vývoj her je klíčem k úspěchu s Unity iterativní vývoj. Musíte stavět ve zvládnutelných přírůstcích - být ambiciózní, všemi prostředky, ale být ambiciózní v malých kusech a uspořádat tyto kousky tak, aby, i když nedosáhnete svých konečných ambicí, dosáhnete alespoň soudržného produkt.

Nejprve si projděte nejdůležitější prvky: mějte na mysli svůj vlastní minimální životaschopný produkt „Nejjednodušší věc s nejčistšími kostmi, jakou byste mohli vytvořit, a přesto máte pocit, že jste dosáhli něčeho, co stojí za to. Než přejdete k větším ambicím, dostanete se k tomuto minimálnímu životaschopnému projektu.

Tento tutoriál vám poskytne silné výchozí místo, ale nejlepší způsob, jak se naučit Unity, je vytvořit hru. Začněte stavět hru, vyplňte mezery ve svých znalostech, jakmile se objeví, a postupný tok znalostí zničí věci, které neznáte, překvapivě rychle.

Pokud jste si tohle všechno přečetli a jste trochu zahlceni kódováním požadovaným pomocí Unity, podívejte se, jak naučte se vývoj her s Unity Learn a také si přečtěte našeho průvodce, jak vytvářet videohry bez jakéhokoli programování.

Unity je účinný nástroj a s trochou průzkumu s ním můžete vytvářet působivé projekty rychleji, než byste čekali. Dejte nám vědět, co jste vytvořili v níže uvedených komentářích - rádi to uvidíme!

Podíl Podíl tweet E-mailem 3 způsoby, jak zkontrolovat, zda je e -mail skutečný nebo falešný

Pokud jste obdrželi e -mail, který vypadá trochu pochybně, je vždy nejlepší zkontrolovat jeho pravost. Zde jsou tři způsoby, jak zjistit, zda je e -mail skutečný.

Číst dále
Související témata
  • Programování
  • Programování
  • Dlouhá forma
  • Longform Guide
O autorovi Andre Infante(131 publikovaných článků)

Andre, spisovatel a novinář se sídlem na jihozápadě, zaručeně zůstane funkční až do 50 stupňů Celsia a je vodotěsný do hloubky dvanácti stop.

Více od Andre Infante

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru