Programiranje igre z enotnostjo: Vodnik za začetnike

Programiranje igre z enotnostjo: Vodnik za začetnike
Ta priročnik je na voljo za prenos kot brezplačen PDF. Prenesite to datoteko zdaj . Kopirajte in delite to s prijatelji in družino.

Presenetljiva lastnost internetnega gospodarstva je porast neodvisnih video iger. Nekoč ekskluzivno področje studiev s tri milijoni dolarjev in več milijonov dolarjev, je bilo razvitih več naborov orodij, ki prinašajo sodobne vire za razvoj iger v roke posameznikov ali majhnih, priložnostnih zbirk programerjev in oblikovalcev. Pred tem smo razpravljali o najboljših neodvisnih igrah, zato si oglejte nekaj navdiha, kaj je mogoče doseči z orodji, kot je Unity.





Te ekipe za razvoj neodvisnih iger so pokazale agilnost in toleranco do tveganja, ki jim v mnogih primerih omogoča, da hitreje spodbujajo inovacije v igranju iger kot njihovi veliki proračunski kolegi. V zadnjih letih so premierno uprizorili številne šokantno uspešne indie naslove, med drugim tudi Minecraft , Limbo , in Super mesni fant , in tudi če vam za ustvarjanje takšnih iger ni potrebno znanje, lahko z Buildboxom naredite igro.





V hitro razvijajočem se okolju razvoja neodvisnih iger, Enotnost se je izkazal kot standard de facto: zaradi nizkih stroškov, enostavne uporabe in širokega nabora funkcij je idealen za hiter razvoj iger. Enotnost je tako prilagodljiva, da jo lahko celo izdelajte lastne krmilnike iger po meri z malo DIY know how!





Tudi veliki studii, kot je CCP (Developers of Eve na spletu ) uporabite za hitro izdelavo prototipov konceptov iger. Unity ponuja 'mehanizem za igre v škatli' - mehanizem za fiziko in upodabljanje s kljukami za več skriptnih jezikov, prilagodljiv skoraj vsem žanrom video iger.

Čeprav Unity ponuja vizualni urejevalnik za manipulacijo z igralnim okoljem, Unity ni orodje za ustvarjanje iger z ničelnim programiranjem. Od vas zahteva, da programirate, da dobite rezultate, hkrati pa vam daje veliko bolj prilagodljivo in zmogljivo orodje, kot bi ga lahko imel kateri koli program za ustvarjanje iger.



Unity vam ne bo opravil dela, vendar bistveno zniža oviro za vstop. Če začnemo popolnoma iz nič s C ++ in OpenGL, lahko traja nekaj dni, da pridemo do točke, ko je na zaslonu dejansko nekaj upodobljenega. Z uporabo Unity traja približno deset sekund. Unity na hiter in intuitiven način daje v roke začetnikom programerje osnovne elemente ustvarjanja iger.

Danes vas bom vodil skozi vse, kar morate vedeti za igro Unity, ki je razdeljena na deset glavnih poglavij:





§1 - Različice enotnosti

§2 - Namestitev Unityja





§3-Kratek uvod v objektno usmerjeno paradigmo

§4 - Osnove enotnosti

§5 – Primer: Osnovni elementi igre

§6 - Skriptiranje v enotnosti

§7 - Primer: Skriptni pong

§8 - Raziskovanje dokumentacije / Več o tem

§9 - Izgradnja vaše igre / Prevajanje v samostojno aplikacijo

§10-Zaključna besedila

1. Različice enotnosti

Unity ima dva osnovna okusa: profesionalno in brezplačno različico. Obstaja a število razlik , na splošno pa različica pro podpira številne vizualne izboljšave (kot so mehke sence v realnem času in naknadna obdelava) ter veliko relativno majhnih funkcij, ki so izredno v pomoč pri bolj zapletenih igrah.

Kljub temu je za večino razmeroma preprostih iger, ki bi jih morda želeli zgraditi, brezplačna različica Unity popolnoma ustrezna. Spodaj bomo za tiste, ki jih zanima, podrobneje razčlenili ključne razlike.

1.1 Cene

Brezplačna različica Unity je seveda brezplačna. Vendar pa obstaja nekaj omejitev: brezplačne različice Unity ni mogoče licencirati nobenemu podjetju z letnim prihodkom več kot 100.000 dolarjev . Čeprav te organizacije presegajo obseg tega priročnika, če sumite, da bi lahko postali takšna organizacija, je verjetno pametno, da se odločite za različico Pro.

Pro različica Unity je 75 dolarjev mesec, oz 1500 USD za stalno licenco in nima omejitev glede tega, kaj lahko počnete z igrami, ustvarjenimi z njim. Na voljo je tudi 30-dnevni brezplačni preskus, ki ga bomo uporabili v tem priročniku, da vam omogočimo čim bolj popoln pregled razpoložljivih funkcij. Enoletna študentska licenca je na voljo tudi prek Študij za 129 dolarjev .

1.2 Lastnosti

V brezplačni različici Unity ni veliko funkcij. Najpomembnejše razlike pa so naslednje: v brezplačni različici Unity manjkajo številne možnosti upodabljanja, ki omogočajo lepše in hitrejše izvajanje iger (podpora LOD, naknadna obdelava prostora na zaslonu, napredne senčnike, mehka programska oprema v realnem času sence in odloženo upodabljanje). Manjka tudi polno mehanski animacijski sistem , in nekaj orodij AI.

Na splošno velja, da je za zapletene, obsežne projekte ali projekte, pri katerih je grafična zmogljivost pomembna, koristna različica pro. Uporabljam profesionalno različico, ker razvijam igre navidezne resničnosti za Oculus Rift, za pravilno interakcijo s slušalkami pa je potrebna podpora za naknadno obdelavo prostora na zaslonu.

2. Namestitev Unityja

Unity je enostavno namestiti. Izvedljivo datoteko lahko prenesete iz Unity3d.com/get-unity/download .

Ko ga naložite, ga zaženite in sledite navodilom namestitvenega programa. Ko je namestitev končana, se prikaže okno z naslovom 'aktiviraj licenco Unity'. Potrdite polje »aktiviraj brezplačno 30-dnevno preskusno različico Unity Pro« in nato »V redu«.

Čestitamo! Zdaj imate 30-dnevno preskusno različico Unity Pro. Ko poskusni rok poteče, če ne želite kupiti profesionalne različice, lahko preklopite na brezplačno različico in obdržite obstoječo vsebino.

Brezplačno si oglejte film brez prijave

3. Kratek uvod v objektno usmerjeno paradigmo

Preden začnete z Unityjem, je pomembno, da malo preučite osnove. Unity podpira oboje C # in JavaScript za programiranje iger ; za to vadnico bomo delali s C#.

Najprej, če še niste programirali, pustite to vadnico ob strani in preživite nekaj dni v Microsoftovih Primer jezika C # dokler se ne počutite udobno pri uporabi jezika za preprosta opravila.

Če želite nekaj drugačnega od C# (vendar ne nujno jezika, ki ga lahko uporabljate v Unity), si oglejte naš vodnik po šestih najlažjih programskih jezikih za začetnike.

Če ste že prej programirali v imperativnem ali objektno naravnanem jeziku, kot sta C ali Java, prebrskajte primer in se seznanite s tem, kako se C# razlikuje od drugih jezikov, ki ste jih uporabljali v preteklosti. Kakor koli, ne nadaljujte z vadnico, dokler se ne počutite udobno pri reševanju preprostih težav s C# (na primer, če bi vas prosil, da napišete program, ki natisne prvih sto prostih števil, bi morali ta program napisati brez posvetovanje z Googlom).

Najpomembnejši koncept za razumevanje je objektno usmerjena paradigma (skrajšano kot ODPRTO ). V objektno naravnanih jezikih so programi razdeljeni v funkcionalne enote, imenovane Predmeti . Vsak predmet ima svoje zasebne spremenljivke in funkcije. Kličejo se objektno specifične funkcije metode .

Zamisel tukaj je modularnost: če imate vsak objekt izoliran in s svojimi metodami prisilite druge objekte k interakciji z njim, lahko zmanjšate število možnih nenamernih interakcij - in s podaljšanjem tudi hrošče. Ustvarite lahko tudi predmete, ki jih lahko pozneje znova uporabite brez sprememb. V Unityju boste te objekte gradili in jih pritrjevali entitete iger (s svojim vedenjem bodo upravljali).

Objekti se ustvarjajo iz razredov : razred je le datoteka, ki določa definicijo vašega predmeta. Torej, če želite a mook predmet, ki v vaši igri obravnava AI za sovražnika, bi napisali razred 'Mook' in nato priložili to datoteko na vsako sovražnikovo entiteto. Ko zaženete igro, bo vsak sovražnik opremljen s kopijo predmeta 'Mook'.

Pritrditev novega skripta na predmet izgleda tako:

Prvič, izberite predmet in pojdite na Inšpektor . Kliknite na Dodaj komponento gumb.

Pojdi do nov scenarij , vnesite želeno ime in kliknite ustvarite in dodajte .

Zdaj imate nov skript, ki ga lahko uredite tako, da ga dvokliknete!

Datoteka razreda izgleda nekako takole:

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 */
}
}
}

Razčlenimo tole:

  • Uporaba UnityEngine: Ta vrstica pove C#, da želimo uporabljati knjižnice Unity, ki nam omogočajo povezavo z igralnim mehanizmom Unity.
  • Javni razred Mook: Mono Vedenje: Ta vrstica navaja razred in njegovo ime - mook .
  • Zasebno zdravje plovcev: Ta razglasi spremenljivko zasebnega razreda (ki jo je mogoče spremeniti samo znotraj razreda). Spremenljivka dobi vrednost v Začni .
  • Začetek praznine (): Ta razglasi metodo, imenovano Začni . Start je posebna metoda, ki se zažene le enkrat, ko se igra najprej zažene.
  • Posodobitev ničnosti (): Posodobitev je še ena posebna metoda, ki deluje na vsakem okvirju. Večina vaše logike igre bo tukaj.
  • // če na cesti naletite na igralca, ga ubijte: Ta vrstica je komentar (C#zanemari vsako vrstico, ki se začne z dvojno poševnico). Komentarji se uporabljajo, da se spomnite, kaj počnejo določeni deli kode. V tem primeru se ta komentar uporablja za označevanje bolj zapletenega bloka kode, ki dejansko počne tisto, kar opisuje komentar.

Skupaj z Začni in Nadgradnja , lahko ustvarite lastne metode s skoraj katerim koli imenom. Vendar pa se metode, ki jih ustvarite, ne bodo izvajale, če niso poklicane. Razglasimo metodo za hipotetični razred, imenovano addTwoNumbers ki sešteje dve številki:

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

Ta razglasi javno (dostopno drugim objektom) metodo, ki vrne float, imenovan addTwoNumbers , ki za vhod vzame dva plavajoča elementa (imenovano do in b ). Nato kot izhod vrne vsoto dveh vrednosti.

Klicanje te metode iz istega razreda (recimo od znotraj Nadgradnja ) izgleda takole:

float result = addTwoNumbers(1, 2);

Klicanje metode iz drugega razreda je podobno:

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

Še enkrat, to samo ustvari primerek našega razreda, dostopa do ustrezne metode in jo vnese v številke, ki jih želimo dodati, nato pa rezultat shrani v rezultat . Enostavno.

Če je vaš skript pritrjen na predmet, ki ima posebne lastnosti (na primer oddajnik delcev), do katerega ni mogoče dostopati v okviru običajnega nabora parametrov GameObject, ga lahko obravnavate kot drugo vrsto entitete igre z uporabo GetComponent metoda.

Sintaksa tega izgleda takole:

GetComponent().Play();

Če vam kaj od tega ni znano, se vrnite in pojdite skozi primer C#. Prihranili boste veliko frustracij, ko nadaljujemo.

4. Osnove enotnosti

V tem razdelku se bomo potrudili skozi osnovno mehaniko motorja Unity. Potek dela v Unity je približno tak:

  1. Ustvarite entiteto, ki bo igrala vlogo v igri (prazno GameObjects lahko uporabite za abstraktne logične naloge).
  2. Napišite ali poiščite datoteko razreda in jo dodajte entiteti kot skript (z uporabo Dodaj komponento gumb v inšpektor pogled.
  3. Teči > preskus > odpravljanje napak > ponovite dokler ne deluje in pojdite na naslednji element igre.

Unity ima številne osnovne zavihke za ogled, ki jih lahko na različne načine razporedite po okusu uporabnika. Prvih pet je:

  1. Igra: prikaže delujoč primerek igre, s katerim lahko komunicirate in preizkusite.
  2. Scena: ponuja statično različico svet iger .
  3. Inšpektor: omogoča spreminjanje posameznih entitet v svetu iger tako, da jih izberete v urednik zavihek.
  4. Projekt: omogoča brskanje po datotekah projekta in povlečenje modelov, materialov in drugih virov v urednik zavihek, da jih postavite v svet iger.
  5. Hierarhija: na tem zavihku so prikazani vsi predmeti na svetu, ki vam omogočajo iskanje oddaljenih predmetov v prizoru in nadrejenih entitet med seboj s klikom in vlečenjem.

Za lokacije vseh teh stvari glejte spodnji diagram:

4.1 Entitete enotnosti

4.1.1 Mreže

Mreža so pot 3D geometrija je zastopan v Unityju. Uporabite lahko vgrajeno Unity primitivno predmete (kocke, krogle, valje itd.) ali uvozite svoje lastne 3D modele iz paketa za modeliranje, kot je Mešalnik ali Maja . Unity podpira različne formate 3D, vključno z .fbx , in .3ds .

Osnovna orodja za manipulacijo očes so gumbi za prilagajanje, vrtenje in prevajanje v zgornjem levem kotu vmesnika. Ti gumbi dodajo nadzorne ikone modelom v pogledu urejevalnika, ki jih lahko nato uporabite za upravljanje z njimi v vesolju. Če želite spremeniti teksturo ali fizikalne lastnosti predmeta, jih izberite in uporabite inšpektor pogled za analizo material in trdno telo elementi.

4.1.2 Elementi grafičnega vmesnika

Tradicionalne sprite in besedilo grafičnega vmesnika lahko prikažete s pomočjo GUI besedilo in GUI tekstura GameObjects v urejevalniku. Vendar je močnejši in realnejši način ravnanja z elementi uporabniškega vmesnika uporaba 3D besedilo in Quad GameObjects (s prozornimi teksturami in neosvetljenim prozornim senčnikom) za postavitev elementov HUD v svet iger kot entitet.

V hierarhijo pogled, lahko te elemente igranja povlečete na glavno kamero, da postanejo otroci, s čimer zagotovite, da se premikajo in vrtijo s kamero.

Elemente grafičnega vmesnika (besedilo in teksture) je mogoče prilagoditi z ustreznimi polji na zavihku Inšpektor.

4.1.3 Materiali

Materiali so kombinacije tekstur in senčnikov in jih je mogoče povleči neposredno na predmete igre z zavihka projekta. Veliko število senčnikov prihaja z Unity Pro, teksturo, ki jim je pritrjena, pa lahko prilagodite z zavihkom inšpektor za predmet, na katerega se nanašajo.

Če želite uvoziti teksturo, jo pretvorite v .jpg , .png , oz .bmp in ga povlecite v premoženje v imeniku projekta Unity (ki se prikaže v Moje dokumente privzeto). Po nekaj sekundah se v urejevalniku prikaže vrstica za nalaganje. Ko se konča, boste pod sliko našli sliko kot teksturo projekt zavihek.

4.1.5 Luči

Luči so GameObjects ki projicira sijaj v svet. Če na vaši sceni ni luči, so vsi poligoni narisani na isti ravni svetlosti, kar daje svetu raven, izpraznjen videz.

Luči lahko postavite, vrtite in imate več notranjih značilnosti, ki jih lahko prilagodite. The intenzivnost drsnik nadzoruje jakost svetlobe in obseg nadzoruje, kako hitro izgine.

Smernice v pogled na sceno prikaže največji obseg osvetlitve. Igrajte se z obema nastavitvama, da dosežete želeni učinek. Prilagodite lahko tudi barvo svetlobe, vzorec ( piškotek na površini, na katero je usmerjena svetloba, in kakšen odsev se pojavi na zaslonu, ko gledate neposredno v svetlobo. Piškotek lahko uporabite za ponarejanje bolj realističnih svetlobnih vzorcev, ustvarjanje dramatičnih lažnih senc in simulacijo projektorjev.

Tri glavne vrste svetlobe so spot , točka , in usmerjeno .

Spot luči imajo lokacijo v 3D prostoru in svetlobo projicirajo samo v eno smer v stožcu s spremenljivim kotom. Te so dobre za svetilke, reflektorje in na splošno vam omogočajo natančnejši nadzor osvetlitve. Spot luči lahko zasenčijo.

Točkovne luči imajo lokacijo v 3D prostoru in enakomerno oddajajo svetlobo v vse smeri. Točkovne luči ne mečejo senc.

Usmerjene luči končno se uporabljajo za simuliranje sončne svetlobe: projicirajo svetlobo v smer, kot da je od neskončno daleč. Usmerjene luči vplivajo na vsak predmet v sceni in lahko ustvarijo sence.

4.1.6 Sistemi delcev

TO Sistem delcev je GameObject ki hkrati ustvarja in nadzira stotine ali tisoče delcev. Delci so majhni, optimizirani 2D predmeti, prikazani v 3D prostoru. Sistemi delcev uporabljajo poenostavljeno upodabljanje in fiziko, vendar lahko v realnem času prikažejo na tisoče entitet brez jecljanja, zaradi česar so idealni za dim, ogenj, dež, iskre, čarobne učinke in drugo.

Za dosego teh učinkov lahko spremenite veliko parametrov, do katerih lahko dostopate tako, da v sistemu razmnožite delce. urejevalnik komponent > izbira sistema delcev > odpiranje zavihka inšpektor . Spremenite lahko velikost, hitrost, smer, vrtenje, barvo in teksturo vsakega delca in nastavite večino teh parametrov, da se sčasoma spreminjajo.

Pod trčenje atribut, če ga omogočite in nastavite simulacijski prostor na svet dobili boste delce, ki bodo trčili v predmete na svetu, kar lahko uporabite za številne realne učinke delcev, vključno z dežjem, premikajočo se vodo in iskricami.

5. Primer: Osnovni elementi igre

Za to vadnico bomo naredili preprosto igro Pong - nekaj, kar smo v DIY že večkrat obravnavali:

  • Arduino klasični pong
  • Arduino OLED Pong

V tem razdelku bomo pregledali urejanje osnovnih elementov - vadnica o skriptiranju bo prišla kasneje.

Najprej razčlenimo igro Ponga na njene osnovne komponente. Najprej potrebujemo dve vesli in žogo. Žoga leti zunaj zaslona, ​​zato želimo mehanizem za ponastavitev. Prav tako želimo, da besedilo prikaže trenutni rezultat, in zaradi prikaza vseh osnovnih elementov Unityja, bomo želeli domišljijski učinek delcev, ko boste zadeli žogo. Celotno igro bo treba dramatično osvetliti.

To se razdeli na a krogelni predmet (krogla), a drstilec , dva rekvizita z oddajniki delcev priložen, a 3D-besedilna entiteta , in a ospredje . Za to vadbo bomo uporabili privzeti fizikalni material odskočiti , s odbijalni kombajn nastavljena pomnožiti . Takole izgleda nastavitev na desetih posnetkih zaslona:

Najprej ustvarite kockasta podpora za veslo.

Ustrezno ga prilagodite, podvoji , in postavite a krogla med lopaticama za žogo.

Nato ustvarite Objekt 3DText in lestvici in položaj pravilno, spreminjanje velikost pisave atribut, da dobite manj slikovno sliko.

Nato ustvarite dva sistemi delcev , izberite lastnosti, ki jih želite, in jih pritrdite na vesla.

Nato boste želeli postavite in zavrtite fotoaparat tako da pravilno uokviri prizor. Ko je izbrana kamera, si lahko v spodnjem desnem kotu ogledate majhen predogled pogleda kamere.

Preden končamo, moramo ustvariti dve dodatni kocki, ki bosta odbijača, da preprečimo, da bi žoga odskočila iz igralnega prostora. Lahko jih naredimo nevidne, če počistite polje upodabljalec mrež v zavihek inšpektor .

Če pritisnete play, lahko zdaj vidite osnovne elemente naše igre. Ne bodo še nič naredili, a do tega bomo prišli!

Zdaj, ko imamo to nastavitev, se bomo pogovarjali o tem, kaj je vključeno v skriptiranje teh elementov za izdelavo igre.

6. Skriptiranje v Unity

Ko imate skript, priložen predmetu, ga lahko popravite tako, da ga dvokliknete v datoteki inšpektor . To se odpre MonoDevelop , privzeto razvojno okolje za Unity. Monodevelop je v bistvu urejevalnik besedil s funkcijami, ki so posebej optimizirane za programiranje.

Ključne besede in komentarji so označeni v modra in zelena , številčne vrednosti in nizi pa se prikažejo v mreža . Če ste uporabili Mrk ali drugih IDE, MonoDevelop je zelo podoben. Ti lahko graditi vaše skripte v urejevalniku, da preverite sintaktične napake, na primer:

Na splošno, če želite, da vaš skript deluje z Unity, se morate sklicevati na elemente, ki jih ima predmet, ki vsebuje skript (seznam teh elementov si lahko ogledate pod inšpektor zavihek, ko je izbran ustrezen objekt). Nato lahko pokličete metode ali nastavite spremenljivke za vsakega od teh elementov, da uveljavite želene spremembe.

Če želite, da skript na objektu vpliva na lastnosti drugega predmeta, lahko ustvarite prazno GameObject spremenljivko v skriptu in uporabite datoteko inšpektor da ga dodelite drugemu objektu v prizoru.

Seznam elementov, ki bi jih lahko imel predmet, je naslednji (vzet iz pogleda inšpektorja enega od naših veslov v zgornjem primeru):

  1. Preoblikovati
  2. Kocka (mrežni filter)
  3. Box Collider
  4. Mesh Renderer

Na vsakega od teh vidikov predmeta je mogoče vplivati ​​iz skripta. Nato bomo natančno pogledali, kako.

6.1 Preoblikovanje

Funkcije preoblikovanja za GameObject v Unity nadzorujejo fizične parametre tega predmeta: njegove lestvici , njegova položaj , in njegova orientacijo . Do njih lahko dostopate iz skripta, kot je ta:

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

V zgornjih primerih so imenovane spremenljivke vrst, navedenih v imenih. Tukaj je nekaj ključnih podrobnosti: položaj in lestvica sta, kot bi pričakovali, shranjeni kot Vektor 3 . Dostopate lahko do X , IN , in Z sestavnih delov vsakega (na primer transform.position.y poda razdaljo predmeta nad ravnino nič).

Da bi se izognili ključavnica za gimbal , rotacije se obravnavajo kot Kvaternioni (štirikomponentni vektorji). Ker ročno manipuliranje kvaternionov ni intuitivno, lahko z rotacijo z Eulerjevimi koti upravljate z uporabo Quaternion.Euler metoda takole:

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

Če želite nemoteno premikati predmete z enega mesta na drugega, boste našli Slerp metoda za kvaterione in vektorje3 je v pomoč. Slerp upošteva tri argumente - trenutno stanje, končno stanje in hitrost spreminjanja ter med njimi pri določeni hitrosti nemoteno interpolira. Sintaksa izgleda takole:

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

6.2 Upodabljalnik

Funkcije upodabljalnika v Unityju omogočajo nadzor nad načinom upodabljanja površin rekvizitov na zaslonu. Teksturo lahko spremenite, spremenite barvo, senčilo in vidnost predmeta. Sintaksa izgleda takole:

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

Večina teh ima precej jasne funkcije. Prvi primer naredi zadevni predmet neviden: koristen trik v številnih situacijah. Drugi primer dodeljuje novo RGB barva (in sicer zeleno) do zadevnega predmeta. Tretji dodeli glavno razpršeno teksturo novi spremenljivki Texture. Zadnji primer spremeni senčilo materiala predmeta v novo definirano spremenljivko senčnika.

6.3 Fizika

Unity prihaja z integriranim fizikalnim motorjem - nekaj, kar vse uporabljajo fizikalne igre v peskovniku. To vam omogoča, da dodelite fizične lastnosti predmetov in pustite, da podrobnosti o njihovi simulaciji obravnavajo sami. Na splošno je namesto, da bi poskušali implementirati svojo fiziko z uporabo učbenika in sistema za preoblikovanje, enostavnejše in robustnejše uporabljati fizični motor Unity v največji možni meri.

Vsi fizikalni rekviziti zahtevajo trkalniki . Vendar pa dejansko simulacijo obravnava a trdno telo , ki jih lahko dodamo v inšpektor pogled. Trdna telesa so lahko kinematično ali nekinematično .

Rekviziti kinematične fizike trčijo v rekvizite nekinematične fizike (in učinkujejo okoli njih), vendar sami trki nanje ne vplivajo. Statični kinematični rekviziti so pregovorno nepremični predmeti, premikajoči se kinematični objekti pa pregovorno neustavljiva sila (za zapisnik, ko se trčijo, preprosto gredo drug skozi drugega).

Poleg tega lahko prilagodite kotni upor predmeta (koliko energije potrebuje, da ga zavrtite), spremenite njegovo maso, narekujete, ali nanjo vpliva gravitacija ali ne, in nanjo uporabite sile.

Primeri:

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

Vse to je precej samoumevno. Edino, kar je treba omeniti, je uporaba preoblikovati.naprej . Vsi Vector3 imajo vse tri komponente ( .naprej , .vzgor , in .prav ), povezane z njimi, do katerih lahko dostopate in se z njimi vrtijo ( naprej je smer modre puščice v urejevalniku). The preoblikovati.naprej ključna beseda je preprosto vektor naprej za trenutni objekt z magnitudo 1. Lahko ga pomnožimo s plavajočim, da ustvarimo večjo silo na objektu. Lahko se tudi sklicujete transform.up in transformiraj.naravnost , in jih zanikati, da bi dobili obratno.

6.4 Trčenje

Pogosto bi pri sestavljanju igre želeli, da bi pri trku prišlo do spremembe stanja v vaši kodi, poleg simulacije fizike. Za to boste potrebovali a metoda odkrivanja trkov .

Za odkrivanje trkov v Unityju je potrebno nekaj pripravljalnega dela. Prvič, vsaj eden od predmetov v trčenju potrebuje a nekinematično trdno telo pritrjen nanj. Oba predmeta morata imeti pravilne trkalnike, nastavljene na sprožilce. Skupna hitrost obeh predmetov mora biti dovolj nizka, da se dejansko trčita, namesto da preprosto skočita drug skozi drugega.

Če ste poskrbeli za vse, lahko preverite trk tako, da v skript, priložen predmetu, s katerim želite preveriti trk, postavite posebno metodo odkrivanja trkov. Metoda bo videti tako:

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

Ta metoda se bo samodejno zagnala med prvim okvirjem, ko se drugi predmet dotakne vašega predmeta. Entiteta trka drugo je sklic na predmet, ki ste ga zadeli. Lahko se na primer sklicujete nanjo gameobject , trdno telo , in preoblikovati značilnosti za manipulacijo na različne načine. Medtem OnCollisionEnter je verjetno najpogostejša funkcija, ki jo boste uporabljali, lahko tudi uporabite OnCollisionExit in OnCollisionStay (s sicer enako sintakso in uporabo), ki se aktivirajo med prvim okvirjem, ko prenehate trčiti s predmetom, in med vsakim okvirjem, ki ga trčite s predmetom.

Včasih je lahko koristno tudi narediti tako imenovano oddajanje žarkov . Pri oddajanju žarkov je neskončno tanka črta (a žarek ) se vrti po svetu iz nekega izvora, vzdolž nekega vektorja, in ko zadeva nekaj, se vrne položaj in druge podrobnosti prvega trka. Koda za raycast izgleda tako:

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

Ta vrže žarek s položaja trenutnega predmeta vzdolž -Vector3.up (naravnost navzdol) in poveže spremenljivko zadeti do prvega predmeta, s katerim trči. Ko je vaš žarek nekaj udaril, lahko dostopate hit.distance ugotoviti, kako daleč je, oz hit.GameObject za manipulacijo predmeta, ki ste ga zadeli.

Takšne oddaje se lahko uporabijo za strelce, da ugotovijo, na kaj je pištola usmerjena, ali da izberejo predmete, ko jih kamera pogleda, ali za določene sloge mehanike gibanja.

6.5 Časovna korekcija

Eden pomembnih dejavnikov, ki jih morate upoštevati pri takšnem manipuliranju s predmeti, je povezan z hitrost sličic . Ne glede na to, kako natančno optimizirate, se hitrost sličic vedno spreminja in ne želite, da se hitrost igre ustrezno spreminja. Če nekdo drug izvaja vašo igro na hitrejšem računalniku, kot ste ga razvili, ne želite, da se igra izvaja z dvojno hitrostjo.

To popravite tako, da pomnožite vrednosti, ki jih uporabljate, s časom, potrebnim za upodabljanje zadnjega okvirja. To se naredi z uporabo Time.deltaTime . To učinkovito spremeni hitrost katere koli spremenljivke, iz katere povečujete vsak okvir sprememba na okvir do sprememba na sekundo , in verjetno bi morali to spremembo spremeniti v katero koli vrednost, ki jo povečujete ali zmanjšujete za vsak okvir.

6.6 Zvočni viri in poslušalci

Zdaj, ko smo obravnavali, kako ustvarjati, upodabljati in nadzorovati predmete, se pogovorimo o drugem občutku, ki mu lahko služijo računalniške igre: in sicer zvok . Unity podpira dve vrsti zvokov: 2D in 3D zvoki. 3D zvoki spreminjajo svojo glasnost glede na razdaljo in se med premikanjem glede na kamero popačijo; 2D zvoki ne.

2D zvoki so primerni za glasovne posnetke in glasbo v ozadju, 3D zvoki pa za zvoke, ki jih ustvarijo dogodki v svetu. Če želite spremeniti, ali je zvok 3D, ga izberite v projekt pogled, preklopite na inšpektor pogled in v spustnem meniju izberite ustrezno možnost, nato pritisnite ponovni uvoz gumb.

Če želite dejansko predvajati zvok, morate priložiti datoteko avdio vir na rekvizit (rekvizit, iz katerega želite, da zvok izvira, v primeru 3D zvoka). Nato morate odpreti zvočni posnetek polje in izberite zvočno datoteko.

kako najti naslov IP v sistemu Windows 10 z ukaznim pozivom

Lahko uporabiš myAudioSource.Pause () in myAudioSource.Play () za nadzor teh zvočnih datotek. Prilagodite lahko vedenje padca, glasnost in dopplerjevo premikanje zvokov pod inšpektor zavihek za avdio vir.

6.7 Vhod

Igra, ki od uporabnika ne vzame nobenega vložka, ni prav nič. Obstaja veliko različnih vrst vnosov, ki jih lahko preberete, in skoraj vsi so dostopni prek Vnos in Koda ključa predmetov. Spodaj je nekaj vzorčnih vhodnih stavkov (katerih vrednosti so ovrednotene v vsakem okvirju).

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

Funkcije teh vrstic so večinoma samoumevne. S temi tremi vrstami vhodnih referenc lahko rekonstruirate krmilne sheme večine sodobnih 3D računalniških iger.

6.8 Odpravljanje napak v skriptu

Recimo, da skript ne deluje. Kot pravi dober zdravnik, se vam lahko zgodijo dojenčki in prekinitve. Če pri vašem jeziku C#obstajajo dokončne sintaktične napake, se igra na splošno zavrne, ko pritisnete play, in prikaže se nekaj dokaj uporabnih sporočil o napakah, če graditi skripte v urejevalniku. Glej spodaj:

Te napake običajno ni najtežje popraviti. Še bolj problematične so subtilne pomenske napake, v katerih ste uspešno napisali datoteko, polno veljavnega C# - samo ne tiste, ki bi naredila tisto, kar ste mislili. Če imate eno od teh napak in imate težave pri iskanju, lahko nekaj stvari poskusite izboljšati.

Prvi je zaustavitev izvajanja igre in preverjanje konzole. Igro lahko zaustavite s klikom na pavza v zgornjem srednjem delu urejevalnika in nato izberite konzola z dna okno meni (ali pritisnite Ctrl > Premik > C ). Tudi če ni napak, lahko opozorila še vedno pomagajo dati namige o tem, kaj bi lahko bilo narobe.

Če to ne deluje, lahko poskusite dobiti tudi predstavo o stanju skripta tako, da natisnete stanje notranjih spremenljivk, da potrdite, da program počne tisto, kar mislite, da počne. Lahko uporabiš Debug.Log (niz) za tiskanje vsebine niza v konzolo, ko izvedba programa zadene to vrstico. Na splošno, če delate nazaj od tistega, kar mislite, da bi se moralo zgoditi, skozi stvari, ki bi morale to uresničiti, boste sčasoma prišli do točke, ko vaši napisi za odpravljanje napak ne naredijo tega, kar od njih pričakujete. Tu je vaša napaka.

7. Primer: Skriptni pong

Če želimo zgraditi Pong, razčlenimo igro na njene osnovne elemente: potrebujemo žogo, ki z naraščajočo hitrostjo rikošeta naprej in nazaj med vesli, potrebujemo tablo, ki ve, kdaj so žogice prešle vesla, in mehanizem za ponovni zagon žoge, ko se to zgodi. Dober prvi korak bi bil, če bi žogi dodali nekinematično trdno telo, dve kinematični togi telesi na vesla, vsem onemogočili gravitacijo in iz standardnih sredstev dodelili ustrezen fizikalni material ( odskočiti z odbijalni kombajn nastavljena pomnožiti ).

Spodaj si lahko ogledate scenarij za žogo z obrazložitvenimi komentarji. Žoga mora doseči nekaj osnovnih ciljev: odbijati se mora v zapletenem vzorcu, vedno ohranjati gibanje na obeh oseh in pospeševati v zahtevni, a ne nemogoči hitrosti v vodoravni smeri.

BallHandler.cs

Nato moramo napisati veslo, ki si ga lahko ogledate spodaj. Veslo se mora odzivati ​​na pritiske tipk (vendar ne zunaj določenih meja). Prav tako mora sprožiti sistem delcev, ko trči v nekaj.

PaddleHandler.cs

Nato potrebujemo sovražnikovo umetno inteligenco: nekaj, zaradi česar bo sovražnikovo veslo sledilo proti žogi s fiksno hitrostjo. Za to bomo za največjo preprostost uporabili Vector3.Slerp. Želeli bi tudi enako vedenje delcev, ki ga vidimo na svojem veslu.

EnemyAI.cs

Nazadnje potrebujemo skript za posodobitev semaforja in ponastavitev žoge, ko gre izven meja.

ScoreboardUpdater.cs

S priloženimi skripti in izpolnjenimi referencami med igranjem igre Pong doživimo igranje!

Ti lahko prenesite moj demo Pong , če bi radi videli vse, kar sem opisal. Deluje v sistemih Windows, Mac in Linux.

8. Raziskovanje dokumentacije / Več o tem

Unity je zapleten motor z veliko več funkcijami, kot bi jih bilo mogoče opisati v priročniku tega sloga, in to je še preden vključite široko paleto (brezplačnih in komercialnih) razširitev Unity, ki so na voljo v internetu. Ta priročnik vam bo zagotovil močno izhodišče za razvoj igre, vendar je samoizobraževanje pomembna veščina v vsakem prizadevanju, in to dvakrat tukaj.

Pomemben vir tukaj je Unity ScriptReference . ScriptReference je zbirka podatkov, ki jo je mogoče iskati, na voljo tako za C# kot za Javascript, ki ima seznam vseh ukazov in funkcij Unity z opisi njihovih funkcij in kratkimi primeri sintakse.

Če imate težave z urejevalnikom in vmesnikom Unity ali pa samo kot video vaje po želji, je na voljo dolg seznam visokokakovostnih Video vaje Unity na voljo. Bolj obsežno (vendar manj široko) besedilne vaje za Unity so na voljo tudi pri CatLikeCoding.

Nazadnje, če imate vprašanja, ki presegajo obseg dokumentacije ali vadnic, lahko zastavite posebna vprašanja na naslovu answer.Unity3d.com . Ne pozabite, da odgovore posredujejo prostovoljci, zato spoštujte njihov čas in najprej poiščite bazo podatkov, da se prepričate, da na vaše vprašanje še niste odgovorili.

9. Ustvarjanje igre / sestavljanje v samostojno aplikacijo

Ko zgradite nekaj, na kar ste ponosni (ali ste končali kloniranje našega rahlo zvijačnega pong primera za vadbo), je čas, da svojo igro premaknete iz urejevalnika in jo spremenite v nekaj, kar lahko objavite v internetu in vsilite prijatelji in družina za igranje. Če želite to narediti, morate zgraditi samostojno aplikacijo. Dobra novica je, da je to v Unityju zelo, zelo enostavno. Obstaja pa nekaj potencialnih kašlja, na katere morate biti pozorni.

Za začetek vedite, da lahko zgradite samo projekt brez napak. V ta namen se prepričajte, da je konzola odprta med gradnjo: obstaja nekaj pogojev napak, ki jih igra ne upošteva v urejevalniku, a bo vseeno prekinila poskus gradnje. To samo izpiše sporočila o napakah na konzolo, brez vidnih rezultatov na zaslonu, kar je lahko frustrirajuće, če pozabite preveriti. Ko sestavite igro brez napak, lahko izberete Nastavitve gradnje pod mapa meni ali pritisnite Ctrl > Premik

> B . To bo prikazalo preprosto pogovorno okno, ki vam omogoča, da svojo igro sestavite za več platform.

Postopek je samoumeven: izberite možnosti in pritisnite graditi ; igra vas bo pozvala, da namestite imenik, vanj pa bo nameščen tako izvršljivi kot podatkovni imenik. Ti dve datoteki sta lahko stisnjeni skupaj in razdeljeni (samo pazite, da ne zaračunavate igre, vgrajene v predstavitvi Unity, ker s tem kršite pogoje storitve).

10. Zaključna besedila

Kot pri vsakem orodju za razvoj iger je ključ do uspeha pri Unity -ju iterativni razvoj. Vzpostaviti morate obvladljive korake - vsekakor bodite ambiciozni, vendar bodite ambiciozni v majhnih kosih in jih razporedite tako, da boste, tudi če ne boste dosegli svojih končnih ambicij, vsaj dosegli skladno izdelek.

Najprej poiščite najpomembnejše elemente: imejte v mislih svojo idejo minimalno sposoben izdelek , najpreprostejša in najbolj gola kost, ki bi jo lahko ustvarili in se še vedno počutili, kot da ste dosegli nekaj vrednega. Pridite do tega minimalno izvedljivega projekta, preden nadaljujete z večjimi ambicijami.

Ta vadnica vam daje močno izhodišče, vendar je najboljši način, da se naučite Unity z izgradnjo igre. Začnite graditi igro, zapolnite vrzeli v svojem znanju, ko se bodo pojavile, in postopen tok znanja bo presenetljivo hitro odpravil stvari, ki jih ne poznate.

Če ste vse to prebrali in ste nekoliko preobremenjeni s kodiranjem, ki ga zahteva Unity, preverite, kako naučite se razvoja iger z Unity Learn in preberite tudi naš vodnik o tem, kako narediti video igre brez programiranja.

Unity je močno orodje in z malo raziskovanja lahko z njim gradite impresivne projekte hitreje, kot bi pričakovali. Sporočite nam, kaj ste zgradili v spodnjih komentarjih - radi bi videli!

Deliti Deliti Cvrkutati E-naslov 3 načini, kako preveriti, ali je e -pošta resnična ali lažna

Če ste prejeli e -poštno sporočilo, ki je videti nekoliko dvomljivo, je vedno najbolje preveriti njegovo pristnost. Tu so trije načini, kako ugotoviti, ali je e -poštno sporočilo resnično.

Preberite Naprej
Sorodne teme
  • Programiranje
  • Programiranje
  • Dolga oblika
  • Vodnik po dolgi obliki
O avtorju Andre Infante(131 objavljenih člankov)

Pisatelj in novinar s jugozahoda Andre jamči, da bo deloval do 50 stopinj Celzija in je vodotesen do globine dvanajst čevljev.

Več od Andre Infante

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti