Programovanie hry s jednotou: Príručka pre začiatočníkov

Programovanie hry s jednotou: Príručka pre začiatočníkov
Táto príručka je k dispozícii na stiahnutie ako bezplatný súbor PDF. Stiahnite si tento súbor teraz . Neváhajte to skopírovať a zdieľať so svojimi priateľmi a rodinou.

Prekvapujúcou črtou internetového hospodárstva je nárast nezávislých videohier. Kedysi bolo výhradnou doménou štúdií Triple-A s tisíckami mužmi a miliónmi dolárov, bolo vyvinutých množstvo nástrojov, ktoré prinášajú zdroje moderného vývoja hier do rúk jednotlivcom alebo malým ad-hoc zbierkam programátorov a dizajnérov. Predtým sme diskutovali o najlepších nezávislých hrách, takže sa v nich najskôr inšpirujte, čo je možné dosiahnuť pomocou nástrojov, ako je Unity.





Tieto nezávislé tímy pre vývoj hier preukázali agilitu a toleranciu voči riziku, ktoré im v mnohých prípadoch umožňujú presadiť inovácie v oblasti hier rýchlejšie ako ich veľkí rozpočtoví kolegovia. V posledných rokoch malo premiéru niekoľko šokujúco úspešných nezávislých titulov, vrátane Minecraft , Limbo a Super mäsový chlapec , a aj keď na vytváranie podobných hier nepotrebujete zručnosti, môžete si hru vytvoriť pomocou Buildboxu.





V rýchlo sa rozvíjajúcej krajine vývoja nezávislých hier Jednota Ukázalo sa, že ide o de facto štandard: nízke náklady, jednoduché použitie a široká škála funkcií z neho robia ideálny nástroj pre rýchly vývoj hier. Jednota je taká flexibilná, že môžete dokonca vytvorte si vlastné herné ovládače s trochou DIY know how!





Aj veľké štúdiá ako CCP (Developers of Eve online ) použiť ho na rýchle prototypovanie herných konceptov. Unity poskytuje „herný engine v krabici“ - fyzikálny a vykresľovací engine s háčikmi pre niekoľko skriptovacích jazykov, prispôsobiteľný prakticky akémukoľvek žánru videohier.

Aj keď Unity poskytuje vizuálny editor na manipuláciu s herným prostredím, Unity nie je nástrojom na vytváranie hier s „nulovým programovaním“. Vyžaduje to, aby ste programovali, aby prinášal výsledky, ale zároveň vám ponúka oveľa flexibilnejší a výkonnejší nástroj, ako by mohol mať ktorýkoľvek program „tvorcov hier“.



Jednota za vás prácu neurobí, ale zásadne znižuje prekážku vstupu. Počínajúc úplne od začiatku s C ++ a OpenGL môže trvať niekoľko dní, kým sa dostanete do bodu, kde je skutočne niečo vykreslené na obrazovke. Použitie Unity trvá asi desať sekúnd. Unity vkladá základné prvky tvorby hier do rúk začínajúcim programátorom rýchlym a intuitívnym spôsobom.

Dnes vás prevediem všetkým, čo potrebujete vedieť o hre v hre Unity, ktorá je rozdelená do desiatich hlavných kapitol:





§1 - Verzie jednoty

§2 - Inštalácia jednotky





§3-Stručný úvod do objektovo orientovanej paradigmy

§4 - Základy jednoty

§5 - Príklad: Základné prvky hry

§6 - Skriptovanie v jednote

§7 - Príklad: Skriptovací jazyk

§8 - Preskúmanie dokumentácie / viac informácií

§9 - Zostavenie hry / Zostavenie samostatnej aplikácie

§10-Záverečné poznámky

1. Verzie jednoty

Unity sa dodáva v dvoch základných verziách: pro verzia a bezplatná verzia. Tam sú počet rozdielov , ale v zásade povedané, profesionálna verzia podporuje množstvo vizuálnych vylepšení (ako sú jemné tiene v reálnom čase a následné spracovanie) a veľké množstvo relatívne malých funkcií, ktoré sú mimoriadne užitočné pri zložitejších hrách.

To znamená, že pre väčšinu relatívne jednoduchých hier, ktoré by ste mohli chcieť postaviť, je bezplatná verzia Unity úplne dostačujúca. Pre záujemcov rozoberieme nižšie uvedené kľúčové rozdiely podrobnejšie.

1.1 Ceny

Bezplatná verzia Unity je samozrejme bezplatná. Existuje však niekoľko obmedzení: bezplatnú verziu Unity nemožno licencovať žiadnej spoločnosti s ročným príjmom vyšším ako 100 000 dolárov . Aj keď tieto organizácie presahujú rámec tejto príručky, ak máte podozrenie, že by ste sa takou organizáciou mohli stať, je pravdepodobne múdre začať s verziou Pro.

Pro verzia Unity je 75 dolárov mesiac, príp 1 500 dolárov o trvalú licenciu a nemá žiadne obmedzenia na to, čo môžete robiť s hrami vytvorenými s ním. K dispozícii je tiež 30-dňová bezplatná skúšobná verzia, ktorú v tejto príručke použijeme, aby sme vám poskytli čo najúplnejší prehľad o dostupných funkciách. Prostredníctvom je k dispozícii aj ročná študentská licencia Študovať pre 129 dolárov .

1.2 Vlastnosti

V bezplatnej verzii Unity veľa funkcií chýba. Najdôležitejšie rozdiely sú však tieto: bezplatná verzia Unity nemá množstvo možností vykresľovania, ktoré by umožňovali lepšie vyzerajúce a rýchlejšie spustené hry (podpora LOD, dodatočné spracovanie priestoru na obrazovke, pokročilé shadery, softvér v reálnom čase) tiene a odložené vykresľovanie). Tiež tomu chýba naplno mechanický animačný systém , a niektoré nástroje AI.

Vo všeobecnosti platí, že pre komplexné, rozsiahle projekty alebo projekty, kde je dôležitý grafický výkon, sa profesionálna verzia oplatí. Používam verziu pro, pretože vyvíjam hry pre virtuálnu realitu pre Oculus Rift a na správnu interakciu s náhlavnou súpravou je potrebná podpora následného spracovania priestorového priestoru.

2. Inštalácia Unity

Inštalácia Unity je jednoduchá. Spustiteľný súbor si môžete stiahnuť z unity3d.com/get-unity/download .

Po stiahnutí ho spustite a postupujte podľa pokynov inštalátora. Po dokončení inštalácie sa zobrazí okno s názvom „aktivujte svoju licenciu Unity“. Začiarknite políčko „aktivovať bezplatnú 30-dňovú skúšobnú verziu programu Unity Pro“ a potom „OK“.

Gratulujem Teraz máte 30-dňovú skúšobnú verziu Unity Pro. Po uplynutí skúšobnej doby, ak si nechcete kúpiť profesionálnu verziu, môžete prejsť na bezplatnú verziu a ponechať si existujúci obsah.

ako zmeniť ikony v systéme Windows 10

3. Stručný úvod do objektovo orientovanej paradigmy

Predtým, ako začnete s Unity, je dôležité, aby sme si trochu prešli základy. Unity podporuje oboje C # a JavaScript pre programovanie hier ; Na tomto návode budeme pracovať s jazykom C#.

Po prvé, ak ste nikdy predtým neprogramovali, odložte tento návod a strávte niekoľko dní prácou v programe Microsoft Základný jazyk C # kým sa necítite pohodlne používať jazyk na jednoduché úlohy.

Ak by ste chceli niečo trochu iné ako C# (ale nie nevyhnutne jazyk, ktorý môžete používať v Unity), pozrite sa na nášho sprievodcu šiestimi najľahšími programovacími jazykmi pre začiatočníkov.

Ak ste predtým programovali v imperatívnom alebo objektovo orientovanom jazyku, ako je C alebo Java, prezrite si základný náter a zoznámte sa s tým, ako sa C# líši od ostatných jazykov, ktoré ste v minulosti používali. Tak či onak, nepokračujte v návode, kým sa nebudete cítiť pohodlne pri riešení jednoduchých problémov s C# (ak by som vás napríklad požiadal o napísanie programu, ktorý vytlačí prvých sto prvočísel, mali by ste byť schopní napísať tento program bez konzultácia s Googlom).

Najdôležitejším pojmom, ktorý tu treba pochopiť, je objektovo orientovaná paradigma (skrátene ako OTVORENÉ ). V objektovo orientovaných jazykoch sú programy rozdelené na funkčné celky tzv Objekty . Každý objekt má svoje vlastné súkromné ​​premenné a funkcie. Nazývajú sa funkcie špecifické pre objekt metódy .

Ide tu o modularitu: tým, že necháte každý objekt izolovať a prinútite ostatné objekty, aby s ním interagovali prostredníctvom svojich metód, môžete znížiť počet možných neúmyselných interakcií - a v konečnom dôsledku aj chýb. Môžete tiež vytvárať objekty, ktoré môžete neskôr znova použiť bez úprav. V Unity budete tieto objekty stavať a pripájať k nim herné entity (ktorého správaniu sa budú riadiť).

Objekty sú vytvárané inštanciou z triedy : trieda je iba súbor, ktorý stanovuje definíciu vášho objektu. Ak teda chcete a mook objekt, ktorý vo vašej hre zvláda nepriateľa AI, napíšete triedu „Mook“ a potom tento súbor priložíte ku každému nepriateľskému subjektu. Keď spustíte hru, každý nepriateľ bude vybavený kópiou objektu „Mook“.

Pripojenie nového skriptu k objektu vyzerá takto:

Najprv, vyberte predmet a choďte do Inšpektor . Klikni na Pridajte komponent tlačidlo.

Ísť do nový skript , zadajte požadované meno a kliknite na tlačidlo vytvoriť a pridať .

Teraz máte nový skript, ktorý môžete upraviť dvojitým kliknutím na neho!

Súbor triedy vyzerá 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 */
}
}
}

Poďme to rozobrať:

  • Použitie UnityEngine: Tento riadok hovorí C#, že chceme používať knižnice Unity, ktoré nám umožňujú pripojiť sa k hernému enginu Unity.
  • Verejná trieda Mook: Mono Chovanie: Tento riadok deklaruje triedu a jej názov - mook .
  • Súkromné ​​zdravie plaváka: To deklaruje premennú súkromnej triedy (ktorú je možné zmeniť iba zvnútra triedy). Premennej je daná hodnota v Začnite .
  • Prázdny začiatok (): To deklaruje metódu nazvanú Začnite . Štart je špeciálna metóda, ktorá sa spustí iba raz, keď sa hra pôvodne spustí.
  • Zrušiť aktualizáciu (): Aktualizácia je ďalšou špeciálnou metódou, ktorá beží na každom rámci. Tu pôjde väčšina vašej logiky hry.
  • // ak stretnete hráča na ceste, zabite ho: Tento riadok je komentár (akýkoľvek riadok začínajúci dvojitým lomítkom C#ignoruje). Komentáre slúžia na pripomenutie toho, čo konkrétne kúsky kódu robia. V tomto prípade sa tento komentár používa na označenie komplikovanejšieho bloku kódu, ktorý v skutočnosti robí to, čo komentár popisuje.

Spolu s Začnite a Aktualizácia , môžete vytvárať vlastné metódy s takmer akýmkoľvek menom. Metódy, ktoré vytvoríte, sa však nespustia, pokiaľ nie sú zavolané. Deklarujme metódu pre hypotetickú triedu s názvom addTwoNumbers ktorý sčíta dve čísla:

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

To deklaruje metódu public (prístupnú iným objektom), ktorá vracia float, tzv addTwoNumbers , ktorý ako vstup používa dva plaváky (tzv do a b ). Potom vráti súčet týchto dvoch hodnôt ako svoj výstup.

Volanie tejto metódy z rovnakej triedy (povedzme zvnútra) Aktualizácia ) vyzerá takto:

float result = addTwoNumbers(1, 2);

Volanie metódy z inej triedy je podobné:

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

Opäť sa tým vytvorí inštancia našej triedy, pristupuje k príslušnej metóde a nakŕmi ju číslami, ktoré chceme pridať, a výsledok uloží do výsledok . Jednoduché.

Ak je váš skript pripojený k objektu, ktorý má špeciálne vlastnosti (ako napr. Žiarič častíc), ku ktorému nie je možné získať prístup pomocou normálnej sady parametrov GameObject, môžete sa rozhodnúť, že s ním budete zaobchádzať ako s iným druhom hernej entity. GetComponent metóda.

Syntax pre to vyzerá takto:

GetComponent().Play();

Ak je vám niečo z toho neznáme, vráťte sa a prejdite základným náterom C#. Ako budeme pokračovať, ušetrí vám to veľa frustrácie.

4. Základy jednoty

V tejto sekcii sa pozrieme na základnú mechaniku enginu Unity. Pracovný tok v Unity prebieha asi takto:

  1. Vytvorte entitu, ktorá bude hrať rolu v hre (prázdne Objekty hry môže byť použitý na abstraktné logické úlohy).
  2. Napíšte alebo nájdite súbor triedy a pridajte ho do entity ako skript (pomocou súboru Pridajte komponent tlačidlo v inšpektor vyhliadka.
  3. Utekaj > test > ladenie > opakovať kým to nebude fungovať a prejsť na ďalší prvok hry.

Unity prichádza s niekoľkými základnými záložkami zobrazenia, ktoré je možné rozložiť rôznymi spôsobmi podľa vkusu používateľa. Veľká päťka je:

  1. Hra: zobrazuje spustenú inštanciu hry, s ktorou môžete interagovať a testovať ju.
  2. Scéna: poskytuje statickú, upraviteľnú verziu herný svet .
  3. Inšpektor: umožňuje upravovať jednotlivé entity v hernom svete ich výberom v editor tab.
  4. Projekt: umožňuje prehľadávať súbory projektu a presúvať modely, materiály a ďalšie zdroje do súboru editor kartu a umiestnite ich do herného sveta.
  5. Hierarchia: táto karta zobrazuje všetky objekty na svete, čo vám umožňuje nájsť vzdialené objekty v scéne a nadradené entity k sebe navzájom kliknutím a ťahaním.

Umiestnenie všetkých týchto vecí nájdete na nižšie uvedenom diagrame:

4.1 Jednotné entity

4.1.1 Sieťky

Cestou sú siete 3D geometria je zastúpený v Unity. Môžete použiť vstavaný program Unity primitívny objekty (kocky, gule, valce atď.), Alebo importujte svoje vlastné 3D modely z modelovacieho balíka ako Mixér alebo Maya . Unity podporuje rôzne 3D formáty vrátane .fbx a .3ds .

Základnými nástrojmi na manipuláciu so sieťami sú tlačidlá zmeny mierky, otáčania a prekladu v ľavom hornom rohu rozhrania. Tieto tlačidlá pridávajú k modelom v zobrazení editora kontrolné ikony, s ktorými je potom možné manipulovať v priestore. Ak chcete zmeniť textúru alebo fyzikálne vlastnosti objektu, vyberte ich a použite príkaz inšpektor pohľad na analýzu materiál a tuhé telo prvky.

4.1.2 Prvky GUI

Tradičné sprity a text v GUI je možné zobraziť pomocou Text GUI a Textúra GUI GameObjects v editore. Robustnejším a realistickejším spôsobom spracovania prvkov používateľského rozhrania je však použitie 3D text a Quad GameObjects (s priehľadnými textúrami a neosvetleným priehľadným shaderom) na umiestnenie prvkov HUD do herného sveta ako entity.

V hierarchia Vzhľadom na to, že tieto herné prvky je možné pretiahnuť na hlavný fotoaparát, aby sa stali deťmi, zaisťujúc pohyb a otáčanie s kamerou.

Prvkom GUI (textu a textúr) je možné prispôsobiť veľkosť a mierku pomocou príslušných polí na karte inšpektora.

4.1.3 Materiály

Materiály sú kombináciou textúr a shaderov a je možné ich pretiahnuť priamo na herné objekty z karty projektu. S Unity Pro je dodávaný veľký počet shaderov a textúru, ktorá je k nim pripojená, môžete upraviť pomocou karty inšpektora pre objekt, na ktorý sú aplikované.

Ak chcete importovať textúru, preveďte ju na súbor .jpg , .png , alebo .bmp , a presuňte ho do aktíva priečinok v adresári projektu Unity (ktorý sa zobrazuje v Moje dokumenty predvolene). Po niekoľkých sekundách sa v editore zobrazí lišta načítania. Po dokončení budete môcť obrázok nájsť ako textúru pod ikonou projekt tab.

4.1.5 Svetlá

Svetlá sú Objekty hry ktoré premietajú vyžarovanie do sveta. Ak vo vašej scéne nie sú žiadne svetlá, všetky polygóny sú nakreslené na rovnakej úrovni jasu, čo dodáva svetu plochý, vyblednutý vzhľad.

Svetlá je možné polohovať, otáčať a majú niekoľko vnútorných charakteristík, ktoré si môžete prispôsobiť. The intenzita posuvník ovláda jas svetla a rozsah kontroluje, ako rýchlo sa stráca.

Pokyny v pohľad na scénu ukáže maximálny dosah osvetlenia. Hrajte s oboma nastaveniami, aby ste dosiahli požadovaný efekt. Môžete tiež nastaviť farbu svetla, vzor ( cookie na povrchu je svetlo nasmerované a na aký druh vzplanutia sa objaví pri priamom pohľade na svetlo. Cookie je možné použiť na falšovanie realistickejších svetelných vzorov, vytváranie dramatických falošných tieňov a simuláciu projektorov.

Tri hlavné druhy svetla sú miesto , bod a smerový .

Bodové svetlá majú umiestnenie v 3D priestore a projektujú svetlo iba v jednom smere v kužele s premenlivým uhlom. Sú vhodné pre baterky, reflektory a vo všeobecnosti vám poskytujú presnejšie ovládanie osvetlenia. Bodové svetlá môžu vrhať tiene.

Bodové svetlá majú umiestnenie v 3D priestore a vrhajú svetlo rovnomerne vo všetkých smeroch. Bodové svetlá nevrhajú tiene.

Smerové svetlá Nakoniec sa používajú na simuláciu slnečného svetla: premietajú svetlo v smere akoby nekonečne ďaleko. Smerové svetlá ovplyvňujú každý objekt v scéne a môžu vytvárať tiene.

4.1.6 Systémy častíc

TO Systém častíc je a GameObject ktorý súčasne generuje a riadi stovky alebo tisíce častíc. Častice sú malé, optimalizované 2D objekty zobrazené v 3D priestore. Časticové systémy používajú zjednodušené vykresľovanie a fyziku, ale môžu zobrazovať tisíce entít v reálnom čase bez koktania, vďaka čomu sú ideálne pre dym, oheň, dážď, iskry, magické efekty a ďalšie.

Existuje mnoho parametrov, ktoré môžete vyladiť, aby ste dosiahli tieto efekty, a môžete k nim získať prístup umiestnením časticového systému pod editor komponentov > výber časticového systému > otvorenie karty inšpektora . Môžete zmeniť veľkosť, rýchlosť, smer, rotáciu, farbu a textúru každej častice a nastaviť, aby sa väčšina týchto parametrov menila aj v priebehu času.

Pod Zrážka atribút, ak ho povolíte a nastavíte priestor simulácie na svet získate častice, ktoré sa zrazia s predmetmi na svete, ktoré je možné použiť na množstvo realistických efektov častíc vrátane dažďa, pohybujúcej sa vody a iskier.

5. Príklad: Základné prvky hry

V tomto návode si vytvoríme jednoduchú hru Pong - niečo, o čom sme sa už niekoľkokrát zaoberali pri kutilstve:

  • Arduino Classic Pong
  • OLED Pong Arduino

V tejto časti sa pozrieme na usporiadanie základných prvkov - skriptovací tutoriál príde neskôr.

Najprv si rozoberieme hru Pong na jej základné súčasti. Najprv potrebujeme dve pádla a loptičku. Lopta letí mimo obrazovku, takže budeme chcieť mechanizmus, ktorý ju resetuje. Chceme tiež, aby text zobrazoval aktuálne skóre, a aby sme vám ukázali všetky základné prvky Unity, budeme chcieť efektný efekt častíc, keď odpálite loptu. Celá hra bude musieť byť dramaticky nasvietená.

To sa rozpadá na a guľový predmet (sféra), a spawner , dve pádlové rekvizity s žiariče častíc priložený, a 3D textová entita a a bodové svetlo . V tomto návode použijeme predvolený fyzikálny materiál odraziť sa , s odraziť kombajn nastavený na znásobiť . Takto vyzerá nastavenie na desiatich snímkach obrazovky:

Najprv vytvorte a kocka prop pre pádlo.

Vhodne to škálovať, duplikovať to , a vložte a sféra medzi lopatkami pre loptu.

Potom vytvorte a Objekt 3DText a mierka a pozíciu správne, zmena veľkosť písma atribút, aby ste získali menej pixelový obrázok.

Ďalej vytvorte dve časticové systémy , vyberte požadované vlastnosti a pripevnite ich k pádlam.

Ďalej budete chcieť umiestnite a otočte fotoaparát aby správne zarámoval scénu. Keď je vybratý fotoaparát, v pravom dolnom rohu môžete vidieť malú ukážku jeho pohľadu.

Predtým, ako skončíme, musíme vytvoriť dve ďalšie kocky, ktoré budú nárazníkmi, aby sa zabránilo odrážaniu lopty z hracej plochy. Môžeme ich zneviditeľniť zrušením začiarknutia políčka sieťový renderer v karta inšpektora .

Ak kliknete na tlačidlo hrať, môžete teraz vidieť rozložené základné prvky našej hry. Zatiaľ nič neurobia, ale k tomu sa dostaneme!

Teraz, keď máme toto nastavenie, budeme hovoriť o tom, čo je súčasťou skriptovania týchto prvkov, aby bola hra.

6. Skriptovanie v jednote

Keď máte k objektu skript pripojený, môžete ho zrevidovať dvojitým kliknutím na položku v inšpektor . Toto sa otvára MonoDevelop , predvolené vývojové prostredie pre Unity. Monodevelop je v podstate textový editor s funkciami špeciálne optimalizovanými pre programovanie.

Kľúčové slová a komentáre sú zvýraznené v Modrá a zelená , a číselné hodnoty a reťazce sa zobrazia v čistý . Ak ste použili Zatmenie alebo iné IDE, MonoDevelop je veľmi podobný. Môžeš stavať vaše skripty z vnútra editora, aby ste skontrolovali chyby syntaxe, napríklad:

Vo všeobecnosti platí, že na to, aby váš skript interagoval s Unity, budete musieť odkazovať na prvky, ktoré má objekt, v ktorom je skript uložený (zoznam týchto prvkov nájdete pod inšpektor keď je vybratý príslušný objekt). Potom môžete zavolať metódy alebo nastaviť premenné pre každý z týchto prvkov, aby ste prijali požadované zmeny.

Ak chcete, aby skript na objekte ovplyvnil vlastnosti iného objektu, môžete vytvoriť prázdny GameObject premennú vo svojom skripte a použite príponu inšpektor priradiť k inému objektu v scéne.

Zoznam prvkov, ktoré môže objekt mať, je nasledujúci (prevzatý z pohľadu inšpektora na jednu z našich pádiel vo vyššie uvedenom príklade):

  1. Transformovať
  2. Kocka (sieťový filter)
  3. Box urýchľovač
  4. Vykresľovač sieťoviny

Každý z týchto aspektov objektu je možné ovplyvniť skriptom. Ďalej sa pozrieme na to, ako presne.

6.1 Transformácia

Transformačné funkcie pre GameObject v Unity riadia fyzické parametre tohto objektu: its mierka , jeho pozíciu , a jeho orientácia . Môžete k nim získať prístup pomocou skriptu, ako je tento:

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

Vo vyššie uvedených príkladoch sú pomenované premenné typov uvedených v názvoch. Tu je niekoľko kľúčových podrobností: poloha a mierka sú, ako by ste očakávali, uložené ako Vector3s . Máte prístup k X , A a S komponenty každého z nich (napr. transformácia.pozícia.r udáva vzdialenosť objektu nad nulovou rovinou).

Aby sa však vyhli kardanový zámok , rotácie sú riešené ako Štvrtohory (štvorzložkové vektory). Pretože ručné manipulácie s kvartérmi sú neintuitívne, môžete rotácie ovládať pomocou eulerovských uhlov pomocou Quaternion. Euler metóda takto:

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

Ak chcete hladko presúvať objekty z jedného miesta na druhé, nájdete Slerp užitočná metóda pre kvaterniony a vector3s. Slerp preberá tri argumenty - aktuálny stav, konečný stav a rýchlosť zmeny a plynule medzi nimi interpoluje pri danej rýchlosti. Syntax vyzerá takto:

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

6.2 Vykresľovač

Funkcie vykresľovania v Unity vám umožňujú ovládať spôsob vykresľovania povrchov rekvizít na obrazovke. Môžete znova priradiť textúru, zmeniť farbu a zmeniť shader a viditeľnosť objektu. Syntax vyzerá takto:

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

Väčšina z nich má celkom jasné funkcie. Prvý príklad robí predmetný predmet neviditeľným: užitočný trik v mnohých situáciách. Druhý príklad priradí nový Farba RGB (konkrétne zelená) k predmetnému objektu. Tretí priraďuje hlavnú difúznu textúru k novej premennej Texture. Posledný príklad zmení shader materiálu objektu na novo definovanú premennú shadera.

6.3 Fyzika

Unity prichádza s integrovaným fyzikálnym jadrom - niečím, čo všetky hry s fyzickým sandboxom používajú. To vám umožní priradiť fyzikálne vlastnosti objektov a nechať za seba spracovať detaily ich simulácie. Všeobecne platí, že namiesto toho, aby ste sa pokúšali implementovať svoju vlastnú fyziku pomocou učebnice a transformačného systému, je jednoduchšie a robustnejšie používať fyzikálny engine Unity v čo najväčšej možnej miere.

Všetky fyzikálne rekvizity vyžadujú zrážky . Samotnú skutočnú simuláciu však spracováva a tuhé telo , ktoré je možné pridať do súboru inšpektor vyhliadka. Tuhé telá môžu byť kinematický alebo nekinematický .

Rekvizity kinematickej fyziky narážajú na (a pôsobia) rekvizity nekinematickej fyziky okolo nich, ale nie sú ovplyvnené samotnou zrážkou. Statické kinematické rekvizity sú príslovečnými nehnuteľnými predmetmi a pohyblivé kinematické objekty sú povestnou nezastaviteľnou silou (pre záznam, keď sa zrazia, jednoducho navzájom prechádzajú).

Okrem toho môžete nastaviť uhlový odpor objektu (koľko energie potrebuje na roztočenie), zmeniť jeho hmotnosť, diktovať, či je alebo nie je ovplyvnený gravitáciou, a použiť naň sily.

Príklady:

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

To všetko je celkom samozrejmé. Jediná vec, ktorú je potrebné poznamenať, je použitie transformovať.pred . Všetky Vector3 majú tri komponenty ( .pred , .up a .správny ), ktoré sú s nimi spojené, ku ktorým je prístup a otáča sa s nimi ( dopredu je smer modrej šípky v editore). The transformovať.pred kľúčové slovo je jednoducho vektorom vpred pre aktuálny objekt s veľkosťou 1. Môže byť vynásobený plavákom, aby na objekt pôsobil väčšou silou. Môžete tiež odkazovať transformácia a transformovať. jasné , a negujte ich, aby dosiahli obrátky.

6.4 Zrážka

Pri vytváraní hry by ste často chceli, aby kolízia vyústila do určitej zmeny stavu v kóde, ktorá presahuje iba simuláciu fyziky. Na to budete potrebovať a metóda detekcie kolízií .

Na odhalenie kolízií v Unity je potrebné určité množstvo prípravných prác. Po prvé, najmenej jeden z predmetov pri zrážke potrebuje a ne kinematické tuhé teleso k nemu pripojené. Oba objekty musia mať správne zrážky nastavené tak, aby nespúšťali. Celková rýchlosť oboch predmetov musí byť dostatočne nízka, aby sa v skutočnosti zrazili, namiesto toho, aby medzi sebou jednoducho preskakovali.

Ak máte o všetko postarané, môžete skontrolovať kolíziu umiestnením špeciálnej metódy detekcie kolízie do skriptu pripojeného k objektu, s ktorým by ste chceli skontrolovať kolíziu. Metóda bude vyzerať takto:

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

Táto metóda sa automaticky spustí počas prvého rámca, keď sa iného objektu dotkne váš objekt. Kolízna entita iné je odkaz na predmet, na ktorý narazíte. Môžete naň napríklad odkazovať gameobject , tuhé telo a transformovať vlastnosti na manipuláciu s ním rôznymi spôsobmi. Kým OnCollisionEnter je pravdepodobne najbežnejšou funkciou, ktorú budete používať, môžete tiež použiť OnCollisionExit a OnCollisionStay (s inak identickou syntaxou a použitím), ktoré sa aktivujú počas prvého rámca, v ktorom prestanete kolidovať s objektom, a počas každého rámca, v ktorom narazíte na objekt, resp.

Niekedy môže byť tiež užitočné urobiť to, čo sa nazýva raycasting . Pri raycastingu je nekonečne tenká čiara (a lúč ) je vrhnutá svetom z nejakého pôvodu, pozdĺž nejakého vektora, a keď na niečo narazí, vráti sa poloha a ďalšie detaily prvej kolízie. Kód pre raycast vyzerá takto:

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

To vrhá lúč z polohy aktuálneho objektu pozdĺž -Vector3.up (priamo nadol) a spája premennú udrieť k prvému objektu, s ktorým sa zrazí. Akonáhle váš lúč niečo zasiahne, máte prístup hit.distance určiť, ako ďaleko je, príp hit.GameObject manipulovať s predmetom, na ktorý narazíte.

Raycasty, ako je tento, je možné použiť pre strelcov na určenie, na čo mieri zbraň, alebo na výber predmetov, keď sa na ne kamera pozerá, alebo pre určité štýly mechaniky pohybu.

6.5 Korekcia času

S tým súvisí aj jeden dôležitý faktor, ktorý by ste mali mať na pamäti pri manipulácii s predmetmi snímok za sekundu . Bez ohľadu na to, ako starostlivo optimalizujete, snímkové frekvencie sa budú vždy líšiť a nechcete, aby sa podľa toho líšila aj rýchlosť hry. Ak vašu hru spustí niekto iný na rýchlejšom počítači, než na akom ste ju vyvíjali, nechcete, aby hra bežala dvojnásobnou rýchlosťou.

Opravíte to tak, že hodnoty, ktoré používate, vynásobíte časom potrebným na vykreslenie posledného rámca. To sa vykonáva pomocou Time.deltaTime . To efektívne zmení rýchlosť akejkoľvek premennej, z ktorej zvyšujete každý rámec zmena podľa rámca do zmena za sekundu , a pravdepodobne by ste mali vykonať túto zmenu na akejkoľvek hodnote, ktorú zvyšujete alebo znižujete v každom rámci.

6.6 Zdroje zvuku a poslucháči

Teraz, keď sme sa zaoberali vytváraním, vykresľovaním a riadením objektov, porozprávajme sa o inom zmysle, akým môžu počítačové hry slúžiť: konkrétne, zvuk . Unity podporuje dva druhy zvukov: 2D a 3D zvuky. 3D zvuky menia svoju hlasitosť na základe vzdialenosti a pri pohybe vzhľadom na fotoaparát skresľujú; 2D zvuky nie.

2D zvuky sú vhodné pre hlasový prenos a hudbu na pozadí a 3D zvuky sa vzťahujú na zvuky generované udalosťami vo svete. Ak chcete zmeniť, či je zvuk 3D alebo nie, vyberte ho v projekt zobrazenie, prepnite na inšpektor zobrazte a v rozbaľovacej ponuke vyberte príslušnú možnosť a potom stlačte tlačidlo spätný import tlačidlo.

Aby ste mohli zvuk skutočne prehrávať, musíte k nemu pripojiť príponu zdroj zvuku na rekvizitu (rekvizita, z ktorej má zvuk pochádzať, v prípade 3D zvuku). Potom budete musieť otvoriť zvukový klip poľa a vyberte svoj zvukový súbor.

ako nájsť IP adresu v systéme Windows 10 pomocou príkazového riadka

Môžeš použiť myAudioSource.Pause () a myAudioSource.Play () ovládať tieto zvukové súbory. Môžete upraviť správanie spadov, hlasitosť a dopplerovské radenie zvukov pod inšpektor kartu pre zdroj zvuku.

6.7 Vstup

Hra, ktorá od používateľa nevyžaduje žiadny vstup, nie je príliš veľká. Existuje mnoho rôznych typov vstupov, v ktorých si môžete prečítať, a takmer všetky sú prístupné prostredníctvom súboru Vstup a KeyCode predmety. Niektoré vzorové vstupné vyhlásenia (ktorých hodnoty sú vyhodnotené v každom rámci) sú uvedené nižšie.

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

Funkcie týchto riadkov sú väčšinou samovysvetľujúce. Pomocou týchto troch typov vstupných referencií môžete zrekonštruovať schémy ovládania väčšiny moderných 3D počítačových hier.

6.8 Ladenie skriptu

Povedzme, že skript nefunguje. Ako hovorí dobrý lekár, môžu sa vám stať kľučky a kľučky. Ak sa v kóde C#vyskytnú úplné chyby syntaxe, hra sa po spustení hry odmietne spustiť a v prípade, že stavať skripty z editora. Pozri nižšie:

Tieto chyby zvyčajne nie je ťažké opraviť. Čo môže byť problematickejšie, sú jemné sémantické chyby, v ktorých ste úspešne napísali súbor plný platného C# - len nie taký, ktorý robí to, čo ste si mysleli. Ak máte jednu z týchto chýb a máte problémy s jej zistením, existuje niekoľko vecí, ktoré môžete skúsiť zlepšiť.

Prvým je pozastavenie vykonávania hry a kontrola konzoly. Hru môžete pozastaviť kliknutím na pauza ikonu v hornej strednej časti editora a potom vyberte konzola zo spodnej časti okno menu (alebo stlačením Ctrl > Smena > C. ). Aj keď nie sú žiadne chyby, varovania môžu napriek tomu poskytnúť určité informácie o tom, čo sa môže stať.

Ak to nefunguje, môžete sa tiež pokúsiť získať predstavu o stave svojho skriptu tak, že vytlačíte stav vnútorných premenných a overíte tak, že program robí to, čo si myslíte, že robí. Môžeš použiť Debug.Log (reťazec) vytlačiť obsah reťazca do konzoly, keď spustenie programu prejde na tento riadok. Všeobecne platí, že ak pracujete spätne od toho, čo by sa podľa vás malo diať, cez veci, ktoré by to mali robiť, nakoniec dospejete do bodu, kedy vaše ladiace výtlačky nerobia to, čo od nich očakávate. V tom je tvoja chyba.

7. Príklad: skriptovací jazyk

Aby sme postavili Pong, rozoberme hru na jej základné prvky: potrebujeme loptičku, ktorá sa pri zvyšujúcej sa rýchlosti odrazí medzi lopatkami tam a späť, potrebujeme tabuľku, ktorá vie, kedy loptičky prešli lopatkami, a potrebujeme mechanizmus na reštartovanie lopty, keď sa to stane. Dobrým prvým krokom by bolo pridať do loptičky ne kinematické tuhé teleso, dve kinematické tuhé telesá na lopatky, pre všetky z nich deaktivovať gravitáciu a priradiť vhodný fyzický materiál zo štandardných aktív ( odraziť sa s odraziť kombajn nastavený na znásobiť ).

Nasleduje scenár k plesu s vysvetľujúcimi komentármi. Lopta musí splniť niekoľko základných cieľov: mala by sa odrážať v komplikovanom vzore, pričom by mala vždy udržiavať pohyb na oboch osiach, a mala by zrýchľovať náročným, ale nie nemožným tempom v horizontálnom smere.

BallHandler.cs

Ďalej musíme skriptovať naše pádlo, ktoré si môžete pozrieť nižšie. Pádlo sa musí pohybovať hore a dole v reakcii na stlačenie klávesov (ale nie mimo určitých hraníc). Potrebuje tiež spustiť systém častíc, keď sa s niečím zrazí.

PaddleHandler.cs

Ďalej potrebujeme nepriateľskú AI: niečo, čo spôsobí, že nepriateľské pádlo bude smerovať k lopte pevnou rýchlosťou. Na to použijeme Vector3.Slerp pre maximálnu jednoduchosť. Tiež by sme chceli rovnaké správanie častíc, aké vidíme na vlastnom pádle.

EnemyAI.cs

Nakoniec potrebujeme skript na aktualizáciu výsledkovej tabule a vynulovanie lopty, keď prekročí hranicu hry.

Výsledková tabuľkaUpdater.cs

S priloženými skriptami a vyplnenými referenciami zažívame pri spustení hry Pong hranie!

Môžeš stiahnuť moje demo Pong , ak by ste chceli vidieť všetko, čo som načrtol v akcii. Beží na systémoch Windows, Mac a Linux.

8. Preskúmanie dokumentácie / viac informácií

Unity je komplexný engine s mnohými ďalšími funkciami, než by bolo možné pokryť v sprievodcovi týmto štýlom. Táto príručka vám poskytne silné východiskové miesto pre vývoj hry, ale samovzdelávanie je dôležitou zručnosťou v každom úsilí, a dvojnásobne tu.

Dôležitým zdrojom tu je Unity ScriptReference . ScriptReference je vyhľadávateľná databáza, dostupná pre C# aj Javascript, ktorá obsahuje zoznam všetkých príkazov a funkcií Unity s popisom ich funkcií a stručnými príkladmi syntaxe.

Ak máte problémy s editorom a rozhraním Unity, alebo máte radi videonávody, je tu dlhý zoznam vysokokvalitných Videonávody k službe Unity k dispozícii. Rozsiahlejšie (ale menej široké) textové návody pre Unity sú k dispozícii aj od CatLikeCoding.

Nakoniec, ak máte otázky presahujúce rámec dokumentácie alebo návodov, konkrétne otázky môžete položiť na odpovede.Unity3d.com . Nezabudnite, že odpovede poskytujú dobrovoľníci, rešpektujte preto ich čas a najskôr si vyhľadajte v databáze, aby ste sa uistili, že vaša otázka už nebola zodpovedaná.

9. Zostavenie hry / Zostavenie samostatnej aplikácie

Keď postavíte niečo, na čo ste hrdí (alebo ste dokončili klonovanie nášho mierne riskantného príkladu Pongu na cvičenie), je načase presunúť hru z editora a zmeniť ju na niečo, čo môžete zverejniť na internete a prinútiť vaši priatelia a rodina hrať. Na to budete musieť vytvoriť samostatnú aplikáciu. Dobrou správou je, že v Unity je to veľmi, veľmi jednoduché. Existuje však niekoľko potenciálnych hiccoughs, na ktoré by ste si mali dať pozor.

Na začiatok vedzte, že môžete postaviť iba bezchybný projekt. Za týmto účelom uistite sa, že máte konzolu pri vytváraní otvorenú: Existujú niektoré chybové podmienky, ktoré hra v editore ignoruje, ale napriek tomu pokazí zostavenie. Tým sa do konzoly vypúšťajú iba chybové správy bez viditeľných výsledkov na obrazovke, čo môže byť frustrujúce, ak zabudnete skontrolovať. Keď však budete mať kompiláciu hry bez chýb, môžete si vybrať Zostavte nastavenia pod Súbor menu, alebo stlačte Ctrl > Smena

> B . Zobrazí sa jednoduché dialógové okno, ktoré vám umožní zostaviť hru pre niekoľko platforiem.

Odtiaľ je tento proces samovysvetľujúci: vyberte svoje možnosti a kliknite na tlačidlo stavať ; hra vás vyzve na nainštalovanie adresára a umiestni do neho spustiteľný aj dátový adresár. Tieto dva súbory je možné skomprimovať a distribuovať (uistite sa, že neúčtujete poplatok za hru postavenú na ukážke Unity, pretože to porušuje zmluvné podmienky).

10. Záverečné poznámky

Ako každý nástroj na vývoj hier, kľúčom k úspechu s Unity je iteračný vývoj. Musíte stavať na zvládnuteľných prírastkoch - buďte ambiciózni v každom prípade, ale buďte ambiciózni v malých kúskoch a usporiadajte ich tak, aby aj keď nedosiahnete svoje konečné ambície, skončili ste aspoň s koherentným výrobok.

Najprv si urobte najdôležitejšie veci: myslite na to svoje minimálny životaschopný produkt „Najjednoduchšia vec s najľudnatejšími kosťami, akú ste mohli vytvoriť, a napriek tomu máte pocit, že ste dosiahli niečo, čo stojí za to. Pred prechodom na väčšie ambície sa dostanete k tomuto minimálne životaschopnému projektu.

Tento tutoriál vám poskytne silné východiskové miesto, ale najlepší spôsob, ako sa naučiť jednotu, je vytvoriť hru. Začnite stavať hru, vyplňte medzery vo svojich znalostiach hneď, ako sa objavia, a postupný tok znalostí prekvapivo rýchlo nahlodá veci, ktoré nepoznáte.

Ak ste si toto všetko prečítali a ste trochu zahltení kódovaním, ktoré vyžaduje Unity, prečítajte si, ako naučte sa vývoj hier s Unity Learn a tiež si prečítajte nášho sprievodcu, ako vytvárať videohry bez akéhokoľvek programovania.

Unity je účinný nástroj a s trochou prieskumu s ním môžete vytvárať pôsobivé projekty rýchlejšie, ako by ste mohli očakávať. Dajte nám vedieť, čo ste vytvorili, v nižšie uvedených komentároch - radi to uvidíme!

zdieľam zdieľam Tweet E -mail 3 spôsoby, ako skontrolovať, či je e -mail skutočný alebo falošný

Ak ste dostali e -mail, ktorý vyzerá trochu pochybne, je vždy najlepšie skontrolovať jeho pravosť. Toto sú tri spôsoby, ako zistiť, či je e -mail skutočný.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Programovanie
  • Dlhý formulár
  • Longform Guide
O autorovi Andre Infante(131 publikovaných článkov)

Andre, spisovateľ a novinár so sídlom na juhozápade, zaručene zostane funkčný do 50 stupňov Celzia a je vodotesný do hĺbky dvanástich stôp.

Viac od Andreho Infanteho

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber