Programiranje igre s jedinstvom: Vodič za početnike

Programiranje igre s jedinstvom: Vodič za početnike
Ovaj vodič je dostupan za preuzimanje kao besplatni PDF. Preuzmite ovu datoteku sada . Slobodno kopirajte i podijelite ovo sa svojim prijateljima i obitelji.

Iznenađujuća značajka internetske ekonomije je porast nezavisnih videoigara. Nekada ekskluzivna domena studija s više milijuna dolara, tri milijuna A, razvijeni su brojni alati koji donose suvremene resurse za razvoj igara u ruke pojedinaca ili malih, ad-hoc zbirki programera i dizajnera. Prije smo raspravljali o najboljim indie igrama, stoga provjerite da li ste u potrazi za inspiracijom o tome što se može postići pomoću alata poput Unityja.





Ovi timovi za razvoj indie igara pokazali su agilnost i toleranciju na rizik koji im, u mnogim slučajevima, omogućuje da potaknu inovacije u igranju brže od svojih kolega s velikim proračunom. Posljednjih godina premijerno je prikazan niz šokantno uspješnih indie naslova, uključujući Minecraft , Zaborav , i Super mesni dječak , pa čak i ako ne morate imati vještine za izradu ovakvih igara, možete napraviti igru ​​koristeći Buildbox.





U brzo razvijajućem okruženju razvoja nezavisnih igara, Jedinstvo se pojavio kao nešto što je de-facto standard: njegova niska cijena, jednostavnost korištenja i širok skup značajki čine ga idealnim za brzi razvoj igara. Jedinstvo je toliko fleksibilno da čak možete izradite vlastite kontrolere za igre uz malo DIY know how!





Čak i veliki studiji poput CCP -a (Developers of Eve Online ) upotrijebite ga za brzo stvaranje prototipa koncepata igara. Unity nudi 'engine za igre u kutiji' - mehanizam za fiziku i renderiranje s kukama za nekoliko skriptnih jezika, prilagodljiv gotovo svakom žanru videoigara.

Dok Unity pruža vizualni uređivač za manipuliranje okruženjem igara, Unity nije alat za kreiranje igara s nultim programiranjem. To zahtijeva od vas da programirate kako biste postigli rezultate, ali vam daje i mnogo fleksibilniji i moćniji alat nego što bi to mogao učiniti bilo koji program za izradu igara.



Unity neće obaviti posao umjesto vas, ali značajno smanjuje prepreku ulasku. Počevši potpuno ispočetka s C ++ i OpenGL -om, mogu proći dani da dođete do točke u kojoj se zapravo nešto prikazuje na ekranu. Koristeći Unity, potrebno je oko deset sekundi. Unity daje osnovne elemente stvaranja igara u ruke programerima početnicima na brz, intuitivan način.

Danas ću vas voditi kroz sve što trebate znati da napravite igru ​​u Unityju, koja je podijeljena na deset glavnih poglavlja:





§1 - Verzije jedinstva

§2 - Instaliranje Unityja





§3-Kratak uvod u objektno orijentiranu paradigmu

§4 - Osnove jedinstva

§5 – Primjer: Osnovni elementi igre

§6 - Skriptiranje u jedinstvu

§7 – Primjer: Skriptni pong

§8 - Istraživanje dokumentacije / Saznajte više

§9 - Izgradnja vaše igre / Prevođenje u samostalnu aplikaciju

§10-Završne napomene

1. Verzije jedinstva

Unity dolazi u dva osnovna okusa: profesionalna i besplatna verzija. Tamo su broj razlika , ali, općenito govoreći, pro verzija podržava brojna vizualna poboljšanja (poput mekih sjena u stvarnom vremenu i naknadnu obradu), te veliki broj relativno manjih značajki koje su iznimno korisne za složenije igre.

Ipak, za većinu relativno jednostavnih igara koje biste htjeli izgraditi, besplatna verzija Unityja savršeno je primjerena. U nastavku ćemo detaljnije razraditi ključne razlike za zainteresirane.

1.1 Cijene

Besplatna verzija Unitya je, naravno, besplatna. Međutim, postoji nekoliko ograničenja: besplatna verzija Unityja ne može se licencirati bilo kojoj tvrtki s godišnjim prihodom većim od 100.000 dolara . Iako su takve organizacije izvan dosega ovog vodiča, ako sumnjate da biste mogli postati takva organizacija, vjerojatno je pametno odlučiti se za Pro verziju.

Pro verzija Unityja je 75 USD mjesec dana, ili 1500 USD za stalnu licencu i nema ograničenja u pogledu toga što možete učiniti s igrama kreiranim s njom. Na raspolaganju je i 30-dnevno besplatno probno razdoblje koje ćemo koristiti za ovaj vodič kako bismo vam pružili što potpuniji pregled dostupnih značajki. Jednogodišnja studentska licenca dostupna je i putem Studija za 129 USD .

1.2 Značajke

Mnoge značajke nedostaju u besplatnoj verziji Unityja. Ipak, najvažnije razlike su sljedeće: besplatna verzija Unityja nema brojne mogućnosti iscrtavanja koje omogućuju bolje izgledajuće igre koje se brže izvode (podrška za LOD, naknadna obrada prostora na ekranu, napredne sjenčare, soft u stvarnom vremenu sjene i odgođeno iscrtavanje). Nedostaje i puna mehanički sustav animacije , i neki AI alati.

Općenito, za složene, velike projekte ili projekte gdje je grafička izvedba važna, profesionalna se verzija isplati. Koristim profesionalnu verziju jer razvijam igre virtualne stvarnosti za Oculus Rift, a podrška za naknadnu obradu prostora na ekranu potrebna je za ispravnu interakciju sa slušalicama.

2. Instaliranje Unityja

Unity je jednostavan za instalaciju. Izvršnu datoteku možete preuzeti s Unity3d.com/get-unity/download .

Nakon preuzimanja pokrenite ga, a zatim slijedite upute za instalaciju. Kad instalacija završi, pojavit će se prozor pod nazivom 'aktiviraj svoju Unity licencu'. Potvrdite okvir s oznakom 'aktiviraj besplatnu 30-dnevnu probnu verziju Unity Pro', a zatim 'U redu'.

Čestitamo! Sada imate 30-dnevno probno razdoblje za Unity Pro. Kad probni period istekne, ako ne želite kupiti profesionalnu verziju, možete se prebaciti na besplatnu verziju i zadržati postojeći sadržaj.

aplikaciju za besplatne telefonske pozive

3. Kratki uvod u objektno orijentiranu paradigmu

Prije nego počnete s Unityjem, važno je da malo prijeđemo na osnove. Unity podržava oboje C # i JavaScript za programiranje igara ; za ovaj ćemo vodič raditi s C#.

Prije svega, ako nikada prije niste programirali, ostavite ovaj vodič po strani i provedite nekoliko dana radeći kroz Microsoftove C # Language Primer dok se ne osjećate ugodno koristeći jezik za jednostavne zadatke.

Ako želite nešto malo drugačije od C# (ali ne nužno jezik koji možete koristiti u Unityju), onda pogledajte naš vodič kroz šest najlakših programskih jezika za početnike.

Ako ste već programirali u imperativnom ili objektno orijentiranom jeziku poput C -a ili Java -e, prelistajte početnu tablicu i upoznajte se s time kako se C# razlikuje od drugih jezika koje ste koristili u prošlosti. U svakom slučaju, nemojte nastaviti s vodičem sve dok vam ne bude ugodno rješavati jednostavne probleme s C# (na primjer, ako bih vas zamolio da napišete program koji ispisuje prvih stotinu prostih brojeva, trebali biste moći napisati taj program bez savjetovanje s Googleom).

Najvažniji koncept za razumijevanje ovdje je objektno orijentirana paradigma (skraćeno kao OTVORENA ). U objektno orijentiranim jezicima programi su podijeljeni u funkcionalne jedinice tzv Objekti . Svaki objekt ima svoje privatne varijable i funkcije. Zovu se funkcije specifične za objekt metodama .

Ovdje je ideja modularnost: izoliranjem svakog objekta i prisiljavanjem drugih objekata na interakciju s njim putem njegovih metoda, možete smanjiti broj mogućih nenamjernih interakcija - i, proširenjem, grešaka. Također možete stvoriti objekte koje možete kasnije ponovno koristiti bez izmjena. U Unityju ćete graditi te objekte i pričvršćivati ​​ih entiteti igre (čijim će ponašanjem upravljati).

Objekti se stvaraju iz klase : klasa je samo datoteka koja postavlja definiciju vašeg objekta. Dakle, ako želite a mook objekt koji obrađuje AI za neprijatelja u vašoj igri, napisali biste klasu 'Mook', a zatim tu datoteku pričvrstili na svaki neprijateljski entitet. Kad pokrenete igru, svaki neprijatelj bit će opremljen kopijom predmeta 'Mook'.

Prilaganje nove skripte objektu izgleda ovako:

Prvi, odaberite objekt i idite na Inspektor . Klikni na Dodajte komponentu dugme.

Ići novi scenarij , unesite željeno ime i kliknite stvarati i dodavati .

Sada imate novu skriptu koju možete urediti dvostrukim klikom na nju!

Datoteka klase izgleda otprilike ovako:

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

Razložimo ovo:

  • Korištenje UnityEngine: Ovaj redak govori C# -u da želimo koristiti Unityjeve knjižnice koje nam omogućuju povezivanje s Unity engineom za igre.
  • Javna klasa Mook: Monoponašanje: Ovaj redak deklarira klasu i njeno ime - mook .
  • Privatno zdravlje plutača: Ovo deklarira varijablu privatne klase (koja se može promijeniti samo unutar klase). Varijabli se daje vrijednost u Početak .
  • Nevažeći početak (): Ovo deklarira metodu tzv Početak . Start je posebna metoda koja se pokreće samo jednom, pri pokretanju igre.
  • Void Update (): Ažuriranje je još jedna posebna metoda koja se izvodi na svakom okviru. Većina vaše logike igre bit će ovdje.
  • // ako naiđete na igrača na cesti, ubijte ga: Ovaj redak je komentar (C#zanemaruje svaki redak koji počinje dvostrukom kosom crtom). Komentari se koriste da biste se podsjetili na to što pojedini dijelovi koda rade. U ovom slučaju, ovaj se komentar koristi kao zamjena za složeniji blok koda koji zapravo radi ono što komentar opisuje.

Zajedno s Početak i ažuriranje , možete stvoriti vlastite metode s gotovo bilo kojim imenom. Međutim, metode koje stvorite neće se izvoditi ako se ne pozovu. Proglasimo metodu za hipotetičku klasu tzv addTwoNumbers koji zbraja dva broja:

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

Ovim se deklarira javna (dostupna drugim objektima) metoda koja vraća float, tzv addTwoNumbers , koji uzima dva plovka kao ulaz (tzv do i b ). Zatim vraća zbroj dviju vrijednosti kao izlaz.

Pozivanje ove metode iz iste klase (recimo iznutra) ažuriranje ) izgleda ovako:

float result = addTwoNumbers(1, 2);

Pozivanje metode iz druge klase je slično:

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

Opet, ovo samo stvara instancu naše klase, pristupa odgovarajućoj metodi i unosi je u brojeve koje želimo dodati, a zatim sprema rezultat u proizlaziti . Jednostavan.

Ako je vaša skripta priključena na objekt koji ima posebna svojstva (poput odašiljača čestica) kojem se ne može pristupiti pod normalnim skupom parametara GameObject, možete ga odabrati kao drugu vrstu entiteta igre koristeći GetComponent metoda.

Sintaksa za to izgleda ovako:

GetComponent().Play();

Ako vam bilo što od ovoga nije poznato, vratite se i prođite kroz C# primer. Uštedjet ćete mnogo frustracija dok nastavljamo.

4. Osnove jedinstva

U ovom odjeljku proći ćemo kroz osnovne mehanike Unity motora. Tijek rada u Unityju izgleda otprilike ovako:

  1. Izradite entitet koji će igrati ulogu u igri (prazno GameObjects mogu se koristiti za apstraktne logičke zadatke).
  2. Napišite ili pronađite datoteku klase i dodajte je u entitet kao skriptu (koristeći Dodajte komponentu gumb u inspektor pogled.
  3. Trčanje > test > otklanjanje pogrešaka > ponoviti dok ne uspije i prijeđite na sljedeći element igre.

Unity dolazi s brojnim osnovnim karticama prikaza koje se mogu postaviti na različite načine prema ukusu korisnika. Velika petorka je:

  1. Igra: prikazuje pokrenutu instancu igre s kojom možete komunicirati i testirati.
  2. Scena: pruža statičku, uređivu verziju svijet igre .
  3. Inspektor: omogućuje vam mijenjanje pojedinačnih entiteta u svijetu igara odabirom u urednik tab.
  4. Projekt: omogućuje vam pregledavanje datoteka projekta i povlačenje modela, materijala i drugih resursa u urednik karticu kako biste ih smjestili u svijet igara.
  5. Hijerarhija: ova kartica prikazuje sve objekte na svijetu, omogućujući vam da pronađete udaljene objekte u sceni i roditeljske entitete međusobno klikom i povlačenjem.

Lokacije svih ovih stvari pogledajte na donjem dijagramu:

4.1 Entiteti jedinstva

4.1.1 Mreže

Mreže su način 3D geometrija zastupljen je u Jedinstvu. Možete koristiti ugrađeni Unity primitivna objekata (kocke, kugle, cilindri itd.), ili uvezite vlastite 3D modele iz paketa za modeliranje, poput Miješalica ili Maja . Unity podržava različite 3D formate, uključujući .fbx , i .3ds .

Osnovni alati za manipuliranje mrežama su gumbi za skaliranje, rotaciju i prevođenje u gornjem lijevom kutu sučelja. Ovi gumbi dodaju ikone upravljanja modelima u prikazu uređivača, koje se zatim mogu koristiti za upravljanje njima u prostoru. Da biste promijenili teksturu ili fizička svojstva objekta, odaberite ih i upotrijebite inspektor pogled za analizu materijal i kruto tijelo elementi.

4.1.2 Elementi grafičkog sučelja

Tradicionalni GUI sprajtovi i tekst mogu se prikazati pomoću GUI tekst i GUI tekstura GameObjects u uređivaču. Međutim, robusniji i realniji način rukovanja elementima korisničkog sučelja je korištenje 3D tekst i Quad GameObjects (s prozirnim teksturama i neosvijetljenim prozirnim zasjenjivačem) za postavljanje HUD elemenata u svijet igre kao cjeline.

U hijerarhija pogled, ti se elementi igranja mogu povući na glavnu kameru kako bi postali djeca, osiguravajući njihovo kretanje i rotiranje s kamerom.

Elementi grafičkog korisničkog sučelja (tekst i teksture) mogu se prilagoditi veličinom i razmjerom pomoću odgovarajućih polja na kartici Inspector.

4.1.3 Materijali

Materijali su kombinacije tekstura i zasjenjivača, a mogu se povući izravno na objekte igre s kartice projekta. Uz Unity Pro dolazi veliki broj zasjenjivača, a teksturu pričvršćenu na njih možete prilagoditi pomoću kartice inspektor za objekt na koji se primjenjuju.

Da biste uvezli teksturu, pretvorite je u .jpg , .png , ili .bmp i povucite ga u imovina u direktoriju Unity projekta (koji se pojavljuje u Moji dokumenti prema zadanim postavkama). Nakon nekoliko sekundi u uređivaču će se pojaviti traka za učitavanje. Kad završi, moći ćete pronaći sliku kao teksturu ispod projekt tab.

4.1.5 Svjetla

Svjetla su GameObjects koji zrače sjajem na svijet. Ako u vašoj sceni nema svjetla, svi poligoni se iscrtavaju na istoj razini svjetline, dajući svijetu ravan, ispran izgled.

Svjetla se mogu postaviti, rotirati i imati nekoliko unutarnjih karakteristika koje možete prilagoditi. The intenzitet klizač kontrolira svjetlinu svjetla, a domet kontrolira koliko brzo nestaje.

Smjernice u prizor scene pokazati maksimalni raspon osvjetljenja. Igrajte se s obje postavke kako biste postigli željeni učinak. Također možete prilagoditi boju svjetla, uzorak ( kolačić Prikazana na površini svjetlo je usmjereno i kakva se bljeskalica pojavljuje na ekranu kada gledate izravno u svjetlost. Kolačić se može koristiti za lažiranje realističnijih svjetlosnih uzoraka, stvaranje dramatičnih lažnih sjena i simulaciju projektora.

Tri su glavne vrste svjetlosti mjesto , točka , i usmjeren .

Spot svjetla imaju mjesto u 3D prostoru i projiciraju svjetlo samo u jednom smjeru u konusu promjenjivog kuta. Oni su dobri za svjetiljke, reflektore i općenito vam daju precizniju kontrolu osvjetljenja. Spot svjetla mogu bacati sjene.

Svjetla točka imaju mjesto u 3D prostoru i ravnomjerno bacaju svjetlo u svim smjerovima. Svjetla točka ne bacaju sjene.

Usmjerena svjetla Konačno, koriste se za simuliranje sunčeve svjetlosti: projiciraju svjetlost u smjeru kao da je iz beskonačno daleko. Usmjerena svjetla utječu na svaki objekt u sceni i mogu stvoriti sjene.

4.1.6 Sustavi čestica

DO Sustav čestica je GameObject koji istovremeno stvara i kontrolira stotine ili tisuće čestica. Čestice su mali, optimizirani 2D objekti prikazani u 3D prostoru. Sustavi čestica koriste pojednostavljeno iscrtavanje i fiziku, ali mogu prikazati tisuće entiteta u stvarnom vremenu bez mucanja, što ih čini idealnim za dim, vatru, kišu, iskre, čarobne efekte i drugo.

Postoji mnogo parametara koje možete prilagoditi kako biste postigli ove učinke, a možete im pristupiti tako što ćete stvoriti sustav čestica pod uređivač komponenti > odabir sustava čestica > otvaranje kartice inspektor . Možete promijeniti veličinu, brzinu, smjer, rotaciju, boju i teksturu svake čestice te postaviti većinu tih parametara da se mijenjaju i tijekom vremena.

Ispod sudar atribut, ako ga omogućite i postavite prostor simulacije na svijet dobit ćete čestice koje će se sudariti s objektima u svijetu, što se može koristiti za brojne realne učinke čestica, uključujući kišu, pokretnu vodu i iskre.

5. Primjer: Osnovni elementi igre

Za ovaj vodič napravit ćemo jednostavnu igru Pong - nešto što smo već nekoliko puta obradili u DIY-u:

  • Arduino klasični pong
  • Arduino OLED Pong

U ovom odjeljku ćemo prijeći na uređenje osnovnih elemenata - vodič za skriptiranje doći će kasnije.

Prvo, raščlanimo igru ​​Pong na njezine osnovne komponente. Prvo, trebaju nam dva vesla i lopta. Lopta leti izvan ekrana, pa ćemo htjeti mehanizam za njezino resetiranje. Također želimo da tekst prikazuje trenutni rezultat, a radi prikaza svih osnovnih elemenata Unityja poželjet ćemo otmjeni efekt čestica kada udarite loptu. Cijela igra morat će biti dramatično osvijetljena.

To se razlaže na a kuglasti predmet (sfera), a mrijestitelj , dva veslačka rekvizita sa emiteri čestica u prilogu, a Entitet 3D teksta , i a spot svjetlo . Za ovaj vodič koristit ćemo zadani fizikalni materijal odskakivati , s odskočiti kombajn postavljen pomnožiti . Evo kako izgleda postavljanje, na deset snimaka zaslona:

Prvo stvorite a kockasti rekvizit za veslo.

Prilagodite ga na odgovarajući način, duplicirati ga , i stavite a sfera između lopatica za loptu.

Zatim stvorite 3DText objekt i razmjera i položaj ispravno, mijenjajući veličina fonta atribut za dobivanje manje pikselirane slike.

Zatim stvorite dva sustavima čestica , odaberite karakteristike koje želite i pričvrstite ih na vesla.

Zatim ćete htjeti postavite i okrenite kameru tako da pravilno uokviri scenu. Dok je kamera odabrana, u donjem desnom kutu možete vidjeti mali pregled prikaza kamere.

Prije nego završimo, moramo stvoriti dvije dodatne kocke koje će biti odbojnici, kako bismo spriječili da lopta odskoči iz prostora za igru. Možemo ih učiniti nevidljivima poništavanjem oznake mrežni renderer u kartica inspektor .

Ako pritisnete play, sada možete vidjeti izložene osnovne elemente naše igre. Neće još ništa učiniti, ali doći ćemo do toga!

Sada kada imamo tu postavku, razgovarat ćemo o tome što je uključeno u skriptiranje ovih elemenata za izradu igre.

6. Skriptiranje u jedinstvu

Nakon što ste skriptu priključili na objekt, možete je revidirati dvostrukim klikom na nju u inspektor . Ovo se otvara MonoDevelop , zadano razvojno okruženje za Unity. U osnovi, Monodevelop je uređivač teksta sa značajkama posebno optimiziranim za programiranje.

Ključne riječi i komentari istaknuti su u plava i zelena , a numeričke vrijednosti i nizovi pojavljuju se u neto . Ako ste koristili Zasjeniti ili drugih IDE -ova, MonoDevelop je vrlo sličan. Možeš izgraditi vaše skripte iz uređivača da biste provjerili ima li sintaksičkih grešaka, na sljedeći način:

Općenito, da bi vaša skripta stupila u interakciju s Unityjem, morat ćete referencirati elemente koje objekt koji sadrži skriptu posjeduje (popis ovih elemenata možete vidjeti pod inspektor karticu kada je odabran odgovarajući objekt). Zatim možete pozvati metode ili postaviti varijable za svaki od ovih elemenata kako biste donijeli željene promjene.

Ako želite da skripta na objektu utječe na svojstva drugog objekta, možete stvoriti prazan GameObject varijablu u skripti i koristite inspektor dodijeliti ga drugom objektu u sceni.

Popis elemenata koje objekt može imati je sljedeći (preuzet iz pregleda inspektora jedne od naših lopatica u gornjem primjeru):

  1. Transformirati
  2. Kocka (mrežasti filter)
  3. Box Collider
  4. Mesh Renderer

Na svaki od ovih aspekata objekta može se utjecati iz skripte. Zatim ćemo pogledati kako točno.

6.1 Pretvorba

Funkcije pretvaranja za GameObject u Unityju kontroliraju fizičke parametre tog objekta: njegove razmjera , njegova položaj , I je orijentacija . Možete im pristupiti iz skripte poput ove:

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

U gornjim primjerima imenovane varijable su tipova navedenih u imenima. Ovdje postoji nekoliko ključnih pojedinosti: položaj i ljestvica su, kako biste očekivali, pohranjeni kao Vektor3 . Možete pristupiti datoteci x , I , i S komponente svakog (na primjer, transformirati.pozicija.y daje vam udaljenost objekta iznad ravnine nule).

Međutim, kako bi se izbjeglo bravica za kardan , rotacije se obrađuju kao Kvaternioni (četverokomponentni vektori). Budući da ručno upravljanje kvaternionima nije intuitivno, možete upravljati rotacijama pomoću Eulerovih kutova pomoću Quaternion.Euler metoda ovako:

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

Ako želite glatko premještati objekte s jednog mjesta na drugo, pronaći ćete Slerp metoda za kvaternione i vektore3 korisna. Slerp uzima tri argumenta - trenutno stanje, konačno stanje i brzinu promjene te glatko interpolira između njih pri zadanoj brzini. Sintaksa izgleda ovako:

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

6.2 Renderer

Funkcije renderera u Unityju omogućuju vam da kontrolirate način prikazivanja površina rekvizita na ekranu. Možete ponovno dodijeliti teksturu, promijeniti boju te promijeniti sjenilo i vidljivost objekta. Sintaksa izgleda ovako:

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

Većina njih ima prilično jasne funkcije. Prvi primjer čini predmetni predmet nevidljivim: koristan trik u brojnim situacijama. Drugi primjer dodjeljuje novi RGB boja (naime, zelena) dotičnom objektu. Treći dodjeljuje glavnu difuznu teksturu novoj tekstualnoj varijabli. Posljednji primjer mijenja sjenilo materijala materijala u novo definiranu varijablu sjenčanja.

6.3 Fizika

Unity dolazi s integriranim fizikalnim strojem - nešto što sve igre za fiziku koriste. To vam omogućuje da dodijelite fizička svojstva objekata i dopustite da se radi s pojedinostima njihove simulacije. Općenito, umjesto da pokušavate implementirati vlastitu fiziku pomoću udžbenika i sustava transformacije, jednostavnije je i robusnije koristiti Unityjev fizički stroj u najvećoj mogućoj mjeri.

Svi fizikalni rekviziti zahtijevaju sudarači . Međutim, samom simulacijom upravlja a kruto tijelo , koji se može dodati u inspektor pogled. Kruta tijela mogu biti kinematički ili nekinematički .

Rekviziti kinematičke fizike sudaraju se (i stvaraju) rekvizite nekinematičke fizike oko njih, ali na njih sami sudari ne utječu. Statički kinematički rekviziti poslovično su nepomični objekti, a pokretni kinematički objekti poslovično nezaustavljiva sila (za zapisnik, kad se sudaraju, jednostavno prolaze jedan kroz drugi).

Osim toga, možete podesiti kutni otpor predmeta (koliko energije je potrebno za njegovo okretanje), promijeniti njegovu masu, diktirati utječe li na njega gravitacija ili ne i primijeniti sile na njega.

Primjeri:

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

Sve je to samo po sebi razumljivo. Jedino što ovdje treba primijetiti je uporaba preobraziti.naprijed . Svi Vector3 imaju tri komponente ( .naprijed , . gore , i .pravo ) povezane s njima, kojima se može pristupiti i rotirati s njima ( naprijed je smjer plave strelice u uređivaču). The preobraziti.naprijed ključna riječ jednostavno je vektor naprijed za trenutni objekt veličine 1. Može se pomnožiti s plovkom kako bi se stvorila veća sila na objekt. Također se možete uputiti transformirati.gore i preobraziti.desno , i negirati ih kako bi dobili obrnute rezultate.

6.4 Sudar

Često, pri izgradnji igre, želite da sudar rezultira promjenom stanja u vašem kodu, osim simulacije fizike. Za to će vam trebati a metoda otkrivanja sudara .

Potrebna je određena količina pripremnog rada za otkrivanje sudara u Unityju. Prvo, barem jedan od objekata u sudaru treba a nekinematičko kruto tijelo za nju pričvršćen. Oba objekta moraju imati ispravne sudarače, postavljene tako da se ne aktiviraju. Ukupna brzina oba objekta mora biti dovoljno niska da se stvarno sudare, umjesto da jednostavno preskaču jedan kroz drugi.

Ako ste se pobrinuli za sve, možete provjeriti sudar postavljanjem posebne metode otkrivanja sudara u skriptu pridruženu objektu s kojim želite provjeriti sudar. Metoda će izgledati ovako:

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

Ova metoda će se automatski pokrenuti tijekom prvog kadra kada drugi objekt dodirne vaš objekt. Entitet sudara drugo je referenca na objekt koji ste pogodili. Na primjer, možete se pozvati na njega gameobject , kruto tijelo , i transformirati karakteristike kojima se njime može manipulirati na različite načine. Dok OnCollisionEnter je vjerojatno najčešća funkcija koju ćete koristiti, a koju također možete koristiti OnCollisionExit i OnCollisionStay (s inače identičnom sintaksom i upotrebom), koje se aktiviraju tijekom prvog kadra u kojem prestanete sudariti s objektom i tijekom svakog kadra u sukobu s objektom.

Ponekad također može biti korisno učiniti ono što se zove zračenje . U zračenju, beskonačno tanka linija (a zraka ) se baca kroz svijet s nekog podrijetla, uz neki vektor, a kad pogodi nešto, vraćaju se položaj i drugi detalji prvog sudara. Kôd za raycast izgleda ovako:

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

Ovo baca zraku s položaja trenutnog objekta uz -Vector3.up (ravno prema dolje) i povezuje varijablu pogoditi do prvog objekta s kojim se sudari. Nakon što je vaša zraka udarila u nešto, možete joj pristupiti pogodak.daljenost kako bi se utvrdilo koliko je udaljeno, ili hit.GameObject manipulirati predmetom koji ste pogodili.

Ovakvi zračni zraci mogu se koristiti za strijelce da odrede na što je pištolj uperen, ili da odaberu objekte kad ih kamera gleda, ili za određene stilove mehanike kretanja.

6.5 Vremenska korekcija

Jedan važan faktor koji morate imati na umu kada na ovaj način manipulirate objektima ima veze s okvirna stopa . Bez obzira na to koliko pažljivo optimizirali, framerate će se uvijek razlikovati, a ne želite da se brzina igre u skladu s tim razlikuje. Ako netko drugi izvodi vašu igru ​​na bržem računalu nego što ste ga vi razvili, ne želite da se igra izvodi dvostrukom brzinom.

Način na koji to ispravite je množenjem vrijednosti koje koristite s vremenom potrebnim za iscrtavanje zadnjeg okvira. To se postiže korištenjem Vrijeme.deltaTime . To učinkovito mijenja brzinu bilo koje varijable s koje povećavate svaki okvir promjena po kadru do promjena u sekundi , i vjerojatno biste trebali promijeniti ovu vrijednost na bilo koju vrijednost koju povećavate ili smanjujete za svaki okvir.

6.6 Izvori zvuka i slušatelji

Sada kada smo razmotrili kako stvarati, iscrtavati i kontrolirati objekte, razgovarajmo o drugom smislu koji računalne igre mogu poslužiti: naime, zvuk . Unity podržava dvije vrste zvukova: 2D i 3D zvukovi. 3D zvukovi mijenjaju glasnoću ovisno o udaljenosti i iskrivljuju se dok se kreću u odnosu na kameru; 2D zvukovi ne.

2D zvukovi prikladni su za preslušavanje glasa i pozadinsku glazbu, a 3D zvukovi primjenjuju se na zvukove generirane događajima u svijetu. Da biste promijenili je li zvuk 3D, odaberite ga u projekt prikaz, prebacite se na inspektor pregledajte i odaberite odgovarajuću opciju s padajućeg izbornika, a zatim pritisnite ponovni uvoz dugme.

Da biste zapravo reproducirali zvuk, morate priložiti audioizvor na rekvizit (rekvizit iz kojeg želite da zvuk potječe, u slučaju 3D zvuka). Tada ćete morati otvoriti audioisječak polje i odaberite zvučnu datoteku.

nintendo prekidač neće se spojiti na WiFi

Možeš koristiti myAudioSource.Pause () i myAudioSource.Play () za kontrolu tih zvučnih datoteka. Možete prilagoditi ponašanja pada, jačinu i doplersko pomicanje zvukova ispod inspektor karticu za audioizvor.

6.7 Ulaz

Igra koja ne uzima ništa od korisnika nije baš neka igra. Postoji mnogo različitih vrsta unosa koje možete pročitati, a gotovo svi su dostupni putem Ulazni i Kôd ključa objekata. Neki uzorci ulaza (koji imaju vrijednosti procijenjene u svakom okviru) su dolje.

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

Funkcije ovih redaka uglavnom su jasne same po sebi. Pomoću ove tri vrste ulaznih referenci možete rekonstruirati sheme upravljanja većine modernih 3D računalnih igara.

6.8 Otklanjanje pogrešaka u skripti

Recimo da skripta ne radi. Kao što dobri liječnik kaže, može vam se dogoditi škripanje i vješanje. Ako s vašim C# -om postoje izravne sintaksičke pogreške, igra će se općenito odbiti pokrenuti kada pritisnete play, a dobit ćete i neke prilično korisne poruke o pogrešci ako izgraditi skripte iz uređivača. Pogledaj ispod:

Ove greške obično nije najteže popraviti. Ono što može biti problematičnije su suptilne semantičke pogreške u kojima ste uspješno napisali datoteku punu valjanog C# - samo ne onu koja radi ono što ste mislili da će biti. Ako imate jednu od ovih pogrešaka, a imate problema s pronalaskom, postoji nekoliko stvari koje možete pokušati poboljšati.

Prvi je pauziranje izvođenja igre i provjeravanje konzole. Možete pauzirati igru ​​klikom na pauza ikonu u gornjem srednjem dijelu uređivača, a zatim odabirom konzola s dna prozor izbornika (ili pritiskom na Ctrl > Pomicanje > C ). Čak i ako nema pogrešaka, upozorenja vam mogu pomoći dati neke naznake što bi moglo biti po zlu.

Ako ovo ne uspije, također možete pokušati steći neku ideju o stanju vaše skripte ispisujući stanje internih varijabli kako biste potvrdili da program radi ono što mislite da radi. Možeš koristiti Debug.Log (niz) za ispis sadržaja niza na konzolu kada izvršenje programa pogodi taj redak. Općenito, ako radite unatrag od onoga što mislite da bi se trebalo dogoditi kroz stvari koje bi to trebale dogoditi, na kraju ćete doći do točke u kojoj otisci za otklanjanje pogrešaka ne rade ono što očekujete da će učiniti. Tu je vaša greška.

7. Primjer: Skriptni pong

Da bismo izgradili Pong, raščlanimo igru ​​na njezine temeljne elemente: potrebna nam je lopta koja rikošetira naprijed -natrag između lopatica sve većom brzinom, treba nam tabla s rezultatima koja zna kada su loptice prošle vesla, a potreban nam je mehanizam za ponovno pokretanje lopte kada se to dogodi. Dobar prvi korak bio bi dodavanje ne-kinematičkog krutog tijela lopti, dva kinematička kruta tijela lopaticama, onemogućavanje gravitacije za sve njih i dodjeljivanje odgovarajućeg fizičkog materijala iz standardnih sredstava ( odskakivati s odskočiti kombajn postavljen pomnožiti ).

U nastavku možete pogledati scenarij za bal s komentarima objašnjenja. Lopta mora postići neke osnovne ciljeve: trebala bi odskakati u složenom uzorku, uvijek održavajući kretanje na obje osi, i trebala bi ubrzati izazovnim, ali ne i nemogućim tempom u vodoravnom smjeru.

BallHandler.cs

Zatim moramo ispisati naše veslo koje možete pogledati ispod. Veslo se mora pomicati gore -dolje kao odgovor na pritiske tipki (ali ne izvan određenih granica). Također treba pokrenuti sustav čestica kada se sudari s nečim.

PaddleHandler.cs

Zatim nam treba neprijateljska umjetna inteligencija: nešto zbog čega će neprijateljsko veslo krenuti prema lopti po fiksnoj stopi. Za to ćemo koristiti Vector3.Slerp za maksimalnu jednostavnost. Također bismo željeli isto ponašanje čestica koje vidimo na vlastitom veslu.

EnemyAI.cs

Konačno, potrebna nam je skripta za ažuriranje tablice i poništavanje lopte kada izađe iz okvira.

ScoreboardUpdater.cs

S priloženim skriptama i ispunjenim referencama, kada pokrenemo igru ​​Pong, doživljavamo igru!

Možeš preuzmite moj demo Pong , ako želite vidjeti sve što sam iznio na djelu. Radi na Windows, Mac i Linux sustavima.

8. Istražite dokumentaciju / saznajte više

Unity je složen stroj s mnogo više značajki nego što bi se moglo obuhvatiti vodičem za ovaj stil, a to je prije nego što uključite široki raspon (besplatnih i komercijalnih) Unity proširenja dostupnih na internetu. Ovaj će vam vodič dati snažno početno mjesto za razvoj igre, ali samoobrazovanje je važna vještina u svakom nastojanju, a ovdje dvostruko.

Ovdje je ključni resurs Unity ScriptReference . ScriptReference je baza podataka za pretraživanje, dostupna i za C# i za Javascript, koja ima popis svih Unity naredbi i značajki, s opisima njihovih funkcija i kratkim primjerima sintakse.

Ako imate problema s uređivačem i sučeljem Unityja, ili baš poput video tutorijala po želji, postoji dugačak popis visokokvalitetnih Video vodiči o jedinstvu dostupno. Opširnije (ali manje široko) tekstualni vodiči za Unity dostupni su i od CatLikeCoding.

Konačno, ako imate pitanja izvan opsega dokumentacije ili vodiča, možete postaviti posebna pitanja na adresi odgovori.Unity3d.com . Zapamtite da odgovore daju volonteri, stoga poštujte njihovo vrijeme i prvo pretražite bazu podataka kako biste bili sigurni da na vaše pitanje već nije odgovoreno.

9. Izgradnja igre / kompajliranje u samostalnu aplikaciju

Kad ste izgradili nešto na što ste ponosni (ili ste završili kloniranje našeg pomalo škakljivog pong primjera za vježbu), vrijeme je da svoju igru ​​premjestite iz uređivača i pretvorite u nešto što možete objaviti na internetu i natjerati prijatelji i obitelj za igru. Da biste to učinili, morat ćete izgraditi samostalnu aplikaciju. Dobra vijest je da je to u Unityju vrlo, vrlo jednostavno. Međutim, postoji nekoliko potencijalnih štucanja na koje morate paziti.

Za početak, znajte da možete izgraditi samo projekt bez grešaka. U tu svrhu provjerite je li konzola otvorena tijekom gradnje: postoje neki uvjeti pogreške koje će igra zanemariti u uređivaču, ali će ipak prekinuti pokušaj gradnje. Ovo samo ispisuje poruke o pogrešci na konzolu, bez vidljivih rezultata na zaslonu, što može biti frustrirajuće ako zaboravite provjeriti. Međutim, nakon što sastavite igru ​​bez grešaka, možete odabrati Postavke izrade ispod Datoteka izbornika ili pritisnite Ctrl > Pomicanje

> B . Ovo će otvoriti jednostavan dijalog koji vam omogućuje da svoju igru ​​izgradite za nekoliko platformi.

Postupak je objašnjiv sam po sebi: odaberite svoje opcije i pritisnite izgraditi ; igra će od vas zatražiti direktorij za instalaciju i tamo će smjestiti izvršni direktorij i direktorij s podacima. Ove se dvije datoteke mogu spojiti zajedno i distribuirati (samo pazite da ne naplaćujete igru ​​ugrađenu u demo Unity jer to krši uvjete usluge).

10. Završne riječi

Kao i kod svakog alata za razvoj igara, ključ uspjeha s Unityjem je iterativni razvoj. Morate ugraditi korake kojima se može upravljati - budite ambiciozni, svakako, ali budite ambiciozni u malim komadima i rasporedite te komade tako da, čak i ako ne uspijete u svojoj krajnjoj ambiciji, barem ćete završiti s koherentnim proizvod.

Prvo unesite najvažnije elemente: imajte na umu svoju ideju minimalno održiv proizvod , najjednostavnija i najgolja stvar koju ste mogli stvoriti i osjećati se kao da ste postigli nešto vrijedno. Prijeđite na taj minimalno održivi projekt prije nego prijeđete na veće ambicije.

Ovaj vam vodič daje snažno početno mjesto, ali najbolji način da naučite Unity je izgradnjom igre. Počnite graditi igru, popunite praznine u svom znanju dok se pojavljuju, a postupni tok znanja iznenađujuće će brzo ukloniti stvari koje ne znate.

Ako ste sve ovo pročitali i pomalo ste opterećeni kodiranjem potrebnim za Unity, provjerite kako naučite razvoj igara s programom Unity Learn i također pročitajte naš vodič o tome kako napraviti video igre bez ikakvog programiranja.

Unity je moćan alat, a uz malo istraživanja možete s njim izgraditi impresivne projekte brže nego što biste očekivali. Javite nam što ste izgradili u komentarima ispod - voljeli bismo vidjeti!

Udio Udio Cvrkut E -pošta 3 načina da provjerite je li e -poruka stvarna ili lažna

Ako ste primili e -poruku koja izgleda pomalo sumnjivo, uvijek je najbolje provjeriti njenu autentičnost. Evo tri načina da provjerite je li poruka prava.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Programiranje
  • Dugi oblik
  • Vodič za dugačke oblike
O autoru Andre Infante(131 objavljen članak)

Pisac i novinar sa jugozapada, Andre zajamčeno ostaje funkcionalan do 50 Celzijevih stupnjeva, a vodootporan je do dubine od dvanaest stopa.

Više od Andre Infante

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu