În acest tutorial, veți învăța cum să creați un joc 3D mobil utilizând C # și Unity. Obiectivul jocului este să înscrieți cât mai multe puncte posibil. Veți învăța următoarele aspecte ale dezvoltării jocului Unity:
Deschideți Unitatea și selectați Proiect nou de la Fişier meniu pentru a deschide dialogul de proiect nou. Spuneți unității unde doriți să salvați proiectul și setațiConfigurați valorile prestabilite pentru: meniu la 3D.
În pasul următor, vă prezentați interfața de utilizator a Unity. Setați proiectul pentru dezvoltarea mobilă, alegând Construiți setările de la Fişier și selectați platforma preferată. Am ales Android pentru acest tutorial.
Primul lucru pe care trebuie să-l facem după selectarea platformei pe care o vizăm este alegerea mărimii operelor de artă pe care le vom folosi în joc. Am enumerat cele mai importante dispozitive pentru fiecare platformă de mai jos și am inclus rezoluția ecranului și densitatea pixelilor.
Deoarece Android este o platformă deschisă, există multe dispozitive diferite, rezoluții ale ecranului și densități de pixeli. Câteva dintre cele mai obișnuite sunt enumerate mai jos.
Rețineți că codul utilizat pentru acest tutorial poate fi utilizat pentru a viza oricare dintre platformele de mai sus.
4. Export Graphics
În funcție de dispozitivele pe care le vizați, este posibil să fie necesar să convertiți operele de artă pentru joc la dimensiunea și rezoluția recomandate. Puteți face acest lucru în editorul dvs. de imagine preferat. Am folosit-o Reglați dimensiunea ... funcția în cadrul Unelte în meniul OS X previzualizare cerere.
Înainte de a începe, asigurați-vă că faceți clic pe 3D buton în Scenă panou. De asemenea, puteți modifica rezoluția care este afișată în Joc panou.
Interfața jocului nostru va fi simplă. Imaginea de mai sus vă oferă o idee despre opera de artă pe care o vom folosi și despre modul în care interfața jocului se va sfârși. Puteți găsi opere de artă și resurse suplimentare în fișierele sursă ale acestui tutorial.
Puteți folosi una dintre cele trei limbi de programare atunci când utilizați Unity, C #, UnityScript, o variantă de JavaScript și nuu. Fiecare limbaj de programare are avantajele și dezavantajele sale și depinde de tine să decideți care dintre ele preferați. Preferința mea personală este limba limbajului de programare C #, deci este limba pe care o folosesc în acest tutorial.
Dacă vă decideți să utilizați un alt limbaj de programare, asigurați-vă că ați aruncat o privire asupra exemplei Unity's Script Reference.
Voi folosi o serie de sunete pentru a îmbunătăți experiența audio a jocului. Efectele sonore folosite în acest tutorial au fost obținute de la as3sfxr și Soungle.
Pentru a ne crea jocul, trebuie mai întâi să obținem modelele 3D. Vă recomandăm 3Docean pentru modele de înaltă calitate, texturi și multe altele, dar dacă testați sau continuați să învățați, modelele gratuite ar putea fi un loc bun pentru a începe.
Modelele din acest tutorial au fost descărcate de la SketchUp 3D Warehouse unde puteți găsi o varietate bună de modele de tot felul.
Deoarece Unity nu recunoaște formatul de fișier SketchUp, trebuie să convertim fișierele SketchUp într-un format de fișier pe care Unity îl poate importa. Începeți prin descărcarea versiunii gratuite SketchUp, SketchUp Make.
Deschideți modelul 3D în SketchUp Faceți și selectați Export> Model 3D de la Fişier meniu și alegeți Collada (* .dae) din lista opțiunilor.
Alegeți un nume, selectați un director și faceți clic pe Export. Se va crea un fișier și un dosar pentru modelul 3D. Fișierul conține datele obiectului 3D și folderul texturile utilizate de model. Acum puteți importa modelul în Unitate așa cum este explicat în pasul următor.
Înainte de a începe codarea, trebuie să adăugăm activele noastre la proiectul Unity. Puteți face una din următoarele căi:
După finalizarea acestui pas, ar trebui să vedeți activele din proiectul dvs. bunuri dosar în Proiect panou.
Suntem gata să creăm scena jocului prin glisarea obiectelor către Ierarhie sau Scenă panou.
Începeți prin tragerea și plasarea fundalului în Ierarhie panou. Ar trebui să apară în mod automat în Scenă panou. Ajustează Transforma valori în Inspector după cum se arată în următoarea captură de ecran.
Obiectivul jocului este aruncarea mingii prin cerc. Trageți-l din bunuri panou la Scenă și schimba-l Transforma proprietăți, după cum se arată în captura de ecran de mai jos.
După cum probabil ați observat, buzunarul de baschet este cam prea întunecat. Pentru a rezolva acest lucru, trebuie să adăugăm o Ușoară la scena noastră. Mergi la GameObject> Creați altul și selectați Lumină direcțională. Acest lucru va crea un obiect care va produce un fascicul de lumină. Schimbă-l Transforma valorile afișate în următoarea captură de ecran, astfel încât să lumineze bara de baschet.
Cu bufonul de baschet luminat corespunzător, timpul său pentru a adăuga un collider, astfel încât mingea să nu treacă prin loviturile din zona albă.
Apasă pe Adăugați componenta buton în Inspector panou, selectați Fizică> Collider de casetă, și modificați valorile sale așa cum se arată în următoarea imagine de ecran.
Veți vedea o margine verde în jurul cercului de baschet în Scenă panoul reprezentând colizorul casetei pe care tocmai l-am adăugat.
Dacă am arunca o minge în ringul de baschet, ar fi oprit de către cutia de acostare, dar s-ar opri fără să se repete așa cum v-ați aștepta să se întâmple în lumea reală. Pentru a remedia acest lucru avem nevoie de a Fizica Material.
După selectare Creați> Materialul fizicii de la bunuri meniul,ar trebui să vedeți că apar în bunuri panou. Am schimbat numele BounceMaterial.
Schimbați proprietățile în Inspector pentru a se potrivi cu cele de pe ecranul de mai jos.
Apoi, selectați colizorul de casetă al cercului de baschet și faceți clic pe punctul mic din partea dreaptă a butonului Material text, ar trebui să apară o fereastră în care să puteți selecta materiale fizice.
Vom folosi un alt colizator pentru a detecta când mingea trece prin cerc. Acesta ar trebui să fie un collator de declanșare pentru a vă asigura că detectează coliziunea fără a interacționa cu corpul fizicii.
Creați un nou agitator pentru cerc așa cum este prezentat în pasul 15 și actualizați valorile acestuia, după cum se arată în următoarea imagine de ecran.
Aceasta va plasa colizorul sub inelul în care mingea nu se poate întoarce în sus, ceea ce înseamnă că a fost făcut un coș. Asigurați-vă că verificați Este declanșator bifați caseta de selectare ca pe un declanșator de declanșare.
Este timpul să adăugați un collider la inelul însuși. Pentru că avem nevoie de mingea să treacă prin centrul inelului, nu putem avea o sferă sau o coliziune a cutiei, în schimb vom folosi o Mesh Collider.
A Mesh Collider ne permite să folosim forma obiectului 3D ca un ciocnitor. După cum prevede documentația, Mesh Collider își construiește reprezentarea de coliziune din plasa atașată la GameObject.
Selectați cercul din Ierarhie panou, faceți clic pe triunghiul din stânga pentru a extinde ierarhia, pentru a extinde group_17, și selectați elementul numit Inel.
Adăugați un colizor așa cum am văzut la pasul 15, dar asigurați-vă că ați selectat Mesh Collider. Unitatea va detecta automat forma modelului și va crea un collider pentru acesta.
Pentru a reda un sunet când mingea lovește buclă, trebuie mai întâi să o atașăm. Selectați-l din Ierarhie sau Scenă vizualiza, faceți clic pe Adăugați componenta buton în Inspector și selectați Sursă audio în Audio secțiune.
Debifați Joacă pe Trezeste și faceți clic pe micul punct din partea dreaptă, sub pictograma roată, pentru a selecta sunetul pe care doriți să îl redați.
Să ne concentrăm acum pe baschet. Trageți-l din bunuri și plasați-o în scenă. Nu vă faceți griji pentru poziția mingii pentru moment, pentru că o vom converti la a prefabricat mai tarziu.
Pentru a face mingea să detecteze atunci când lovește buclă, trebuie să adăugăm o componentă, a Spiriacterul pentru a fi precis. Selectați mingea în scenă, deschideți Inspector panou și faceți clic pe Adăugați componenta. Din lista de componente, selectați Spiriacterul de la Fizică și actualizați proprietățile sale, după cum se arată mai jos.
Pentru a detecta o coliziune cu baschet, cel puțin unul dintre obiectele de coliziune trebuie să aibă a Corp rigid componenta atașată la acesta. Pentru a adăuga unul la minge, selectați Adăugați componenta în Inspector și selectați Fizică > Corp rigid.
Lăsați setările la valorile lor implicite și trageți mingea de la Ierarhie panou la bunuri panou pentru ao converti la a prefabricat.
Pentru a reprezenta coșurile deja realizate de player, vom folosi o versiune 2D a ringului de baschet. Trageți-l din panoul Dispozitive și plasați-l pe scena, după cum se arată mai jos.
Sub bușteni 2D, afișăm numărul de coșuri pe care le-a marcat până acum. Selectați GameObject> Creați altul> Text GUI pentru a crea un obiect text, așezați-l în partea de jos a buzelor de baschet și schimbați textul în Ierarhie panou la 0.
Aveți posibilitatea să încorporați un font personalizat importând-l în bunuri dosarul și modificarea Font proprietatea textului în Inspector.
Contorul de forță este o bară care va arăta forța utilizată pentru a trage mingea. Acest lucru va adăuga un alt nivel de dificultate la joc. Trageți spritele pentru contorul de forță de la bunuri panou la Scenă și poziționați-le așa cum se arată în imaginea de mai jos.
De asemenea, adăugăm un indicator la interfață, care arată câte fotografii a părăsit jucătorul. Pentru a finaliza acest pas, urmați aceiași pași folosiți pentru a afișa scorul curent al jucătorului.
În cele din urmă este timpul să scriem un cod. Primul script pe care îl vom crea este Coş
script care verifică dacă mingea trece prin inel sau lovește bordul.
Selectați buclă și faceți clic pe Adăugați componenta buton în Inspector panou. Selectați Script nou și numește-o Coş
. Nu uitați să schimbați limba în C #. Deschideți fișierul nou creat și adăugați următorul fragment de cod.
utilizând UnityEngine; utilizând System.Collections; coș de clasă publică: MonoBehavior public GameObject score; // referință la obiectul de joc ScoreText, setat în coșul public al publicației AudioClip; // trimitere la coșul de sunet void OnCollisionEnter () // dacă mingea atinge bordul audio.Play (); // joacă sunetul plăcii hit void OnTriggerEnter () // dacă mingea lovește colaționarea coșului int currentScore = int.Parse (score.GetComponent ().) + 1; // adăugați 1 la scorul score.GetComponent (). text = currentScore.ToString (); AudioSource.PlayClipAtPoint (coș, transformare); // juca sunetul coșului
În acest script, am setat două variabile publice care reprezintă obiecte pe Scenă și în bunuri pliant. Reveniți la editor și faceți clic pe punctul mic din partea dreaptă a variabilelor pentru a selecta valorile descrise în comentarii.
Jucăm un sunet atunci când mingea lovește bara de baschet și verifică dacă mingea trece prin inel. Analiza
metoda va converti textul din GUI Text obiect de joc la un număr astfel încât să putem crește scorul și apoi setați-l din nou ca text folosind toString
. În final, jucăm coş
sunet.
Trage
clasa se ocupă de restul interacțiunii jocului. Vom rupe conținutul scenariului în jos pentru a face mai ușor de digerat.
Începeți prin selectarea aparat foto și faceți clic pe Adăugați componenta buton în Inspector panou. Selectați Script nou și numește-o Trage
.
În următorul fragment de cod, am enumerat variabilele pe care le vom folosi. Citiți comentariile din fragmentul de cod pentru clarificare.
utilizând UnityEngine; utilizând System.Collections; clasa publică Shoot: MonoBehour public GameObject ball; // referință la prefabricarea mingii, setată în editorul privat Vector3 throwSpeed = Vector3 nou (0, 26, 40); // Această valoare este un coș sigur, vom modifica acest lucru folosind Vector3 ballPos; // începe poziția mingii private bool thrown = false; // daca mingea a fost aruncata, previne 2 sau mai multe mingi private GameObject ballClone; // nu folosim publicul original prefabricat GameObject availableShotsGO; // ScoreText referință obiect joc privat int availableShots = 5; instrumentul public GameObject; // referințe la indicatorul de forță GameObject public; săgeată privată floatSpeed = 0.3f; // Dificultate, valoare mai mare = mișcare mai rapidă a săgeții privat bool dreapta = adevărat; // folosit pentru a inversa săgeată mișcare publică GameObject gameOver; // joc peste text
Apoi, vom crea start
metoda în care am stabilit forța de gravitație -20
pentru a face mingea să scadă mai repede.
void Start () / * Creșterea gravității * / Physics.gravity = Vector3 nou (0, -20, 0);
Pentru a trata interacțiunile cu motorul fizicii, implementăm FixedUpdate
metodă. Diferența dintre această metodă și cea obișnuită Actualizați
metoda este aceea FixedUpdate
rulează pe baza unor etape fizice în locul fiecărui cadru, ceea ce ar putea cauza probleme dacă dispozitivul este lent din cauza lipsei de memorie, de exemplu.
În FixedUpdate
, deplasăm săgeata contorului de forță folosind dreapta
variabilă pentru a detecta momentul în care se inversează mișcarea săgeții.
void FixedUpdate () / * Mutare Arrow Meter * / if (arrow.transform.position.x < 4.7f && right) arrow.transform.position += new Vector3(arrowSpeed, 0, 0); if (arrow.transform.position.x >= 4.7f) dreapta = fals; dacă (dreapta == false) arrow.transform.position - = vector3 nou (arrowSpeed, 0, 0); dacă (arrow.transform.position.x <= -4.7f) right = true;
Baschetul este aruncat atunci când jucătorul interceptează ecranul. Ori de câte ori ecranul este lovit, vom verifica mai întâi dacă există deja o minge în aer și dacă jucătorul are fotografii disponibile. Dacă aceste cerințe sunt îndeplinite, actualizăm valorile, creăm o nouă instanță a mingii și aruncăm folosind addForce
metodă.
/ * Trageți mingea pe Atingeți * / dacă (Input.GetButton ("Fire1") &&! Thrown && availableShots> 0) thrown = true; availableShots--; disponibilShotsGO.GetComponent (). text = disponibilShots.ToString (); ballClone = Instantiate (minge, mingePos, transform.rotation) ca GameObject; throwSpeed.y = throwSpeed.y + arrow.transform.position.x; throwSpeed.z = throwSpeed.z + arrow.transform.position.x; ballClone.rigidbody.AddForce (throwSpeed, ForceMode.Impulse); audio.Play (); // redare sunet
În următorul bloc de coduri, testăm dacă mingea ajunge la podea și se elimină atunci când are loc. Ne pregătim, de asemenea, pentru următoarea aruncare prin resetarea variabilelor.
/ * Scoateți mingea când atinge podeaua * / dacă (ballClone! = Null && ballClone.transform.position.y < -16) Destroy(ballClone); thrown = false; throwSpeed = new Vector3(0, 26, 40);//Reset perfect shot variable
După eliminarea mingii, vom verifica dacă jucătorul are fotografii rămase. Dacă nu este cazul, atunci vom termina jocul și vom apela repornire
.
/ * Verificați dacă din fotografii * / if (availableShots == 0) arrow.renderer.enabled = false; Instantiate (gameOver, vectorul Vector3 (0.31f, 0.2f, 0), transform.rotation); Invocați ("reporniți", 2);
repornire
repornire
metoda rulează două secunde după ce jucătorul a ieșit din fotografii, repornind jocul invocând LoadLevel
.
void restart () Application.LoadLevel (Application.loadedLevel);
Este timpul să testați jocul. presa Command-P pentru a juca jocul în Unitate. Dacă totul funcționează așa cum era de așteptat, atunci sunteți pregătiți pentru pașii finali.
Când sunteți mulțumit de jocul dvs., este timpul să selectați Construiți setările de la Fişier meniu și faceți clic pe Setările playerului buton. Acest lucru ar trebui să aducă Setările playerului în Inspector panou în care puteți seta parametrii pentru aplicația dvs..
Setările sunt aplicații și includ creatorul sau compania, rezoluția aplicației și modul de afișare, modul de redare, compatibilitatea dispozitivului etc. Setările vor diferi în funcție de platforma și dispozitivele pe care aplicația dvs. le vizează și de asemenea să păstreze cerințele magazinului pe care îl publicați în minte.
Folosind opera de arta pe care ați creat-o mai devreme, puteți crea acum o pictogramă plăcută și o imagine splash pentru jocul dvs. Unitatea vă arată dimensiunile necesare, care depind de platforma pe care o construiți.
Odată ce proiectul dvs. este configurat corect, este timpul să revizuiți Construiți setările și faceți clic pe Construi Buton. Asta e tot ce este nevoie pentru a vă construi jocul pentru testare și / sau distribuție.
În acest tutorial, am învățat despre modelele 3D, colizoarele de plasă, materialele fizice, detectarea coliziunilor și alte aspecte ale dezvoltării jocului Unity. Vă încurajez să experimentați rezultatul și să personalizați jocul pentru a-l creați. Sper că ți-a plăcut acest tutorial și l-am găsit de ajutor.