Creați un joc gratuit de aruncare a baschetului cu unitatea

Ce veți crea

Introducere

Î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:

  • Configurarea unui proiect 3D în Unity
  • Implementarea controalelor de robinet
  • Integrarea fizicii
  • Crearea prefabricatelor

1. Creați un proiect de unitate nouă

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.


2. Construiți setările

Î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.


3. Dispozitive

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.

iOS

  • iPad: 1024px x 768px
  • iPad Retina: 2048px x 1536px
  • 3.5 "iPhone / iPod Touch: 320 x 480 pixeli
  • 3.5 "iPhone / iPod Retina: 960px x 640px
  • 4 "iPhone / iPod Touch: 1136px x 640px

Android

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.

  • Tableta Asus Nexus 7: 800px x 1280px, 216ppi
  • Motorola Droid X: 854px x 480px, 228ppi
  • Samsung Galaxy s3: 720px x 1280px, 306ppi

Windows Phone

  • Nokia Lumia 520: 400px x 800px, 233ppi
  • Nokia Lumia 1520: 1080px x 1920px, 367ppi

Mure

  • Blackberry Z10: 720px x 1280px, 355ppi

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.


5. Interfață utilizator unitate

Î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.


6. Interfața jocurilor

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.


7. Limba de programare

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.


8. Efecte de sunet

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.


9. Modele 3D

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.


10. Importați active

Înainte de a începe codarea, trebuie să adăugăm activele noastre la proiectul Unity. Puteți face una din următoarele căi:

  • Selectați Importați un nou activ de la bunuri meniul.
  • Adăugați elementele în dosarul de materiale al proiectului dvs..
  • Glisați și plasați activele în fereastra proiectului.

După finalizarea acestui pas, ar trebui să vedeți activele din proiectul dvs. bunuri dosar în Proiect panou.


11. Creați scenă

Suntem gata să creăm scena jocului prin glisarea obiectelor către Ierarhie sau Scenă panou.


12. Contextul 2D

Î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.


13. Hoop

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.


14. Lumină

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.


15. Colizorul cu buclă

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.


16. Materialul fizic al sariturilor

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.


17. Collider de coș

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.


18. Collider de ochi de inel

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.


19. Hoop Sound

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.


20. Ball

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.


21. Ball RigidBody

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.


22. Hoop Sprite

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.


23. Scor text

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.

24. Forța de măsurare

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.


25. Ball Sprite

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.


26. Scriptul de coș

Î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.

27. Trageți Script

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.

28. Variabile

Î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 

29. Creșteți gravitatea

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);  

30. Comportamentul contorului de forță

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; 

31. Trage mingea

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

32. Scoateți mingea

Î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 

33. Verificați fotografii disponibile

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); 

34. 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); 

35. Testarea

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.


36. Setările playerului

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.


37. Icoane și imagini splash

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.

38. Construiți și jucaț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.

Concluzie

Î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.

Cod