În acest tutorial, veți învăța cum să creați un joc 3D mobil utilizând C # și Unity. Obiectivul jocului este de a arunca mingea în găuri cu ajutorul ecranului tactil.
Veți învăța despre următoarele aspecte ale dezvoltării jocului Unity în acest tutorial:
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 meniu și selectarea platformei dvs. de alegere.
Primul lucru pe care trebuie să-l facem după selectarea platformei țintă este alegerea dimensiunii operei de artă pe care o vom folosi în joc. Acest lucru ne va ajuta să selectăm o dimensiune adecvată pentru texturile 3D și pentru interfața grafică 2D, fără a face ca lucrarea să fie neclară sau să utilizeze texturi prea mari pentru dispozitivul țintă. De exemplu, operele de artă trebuie să aibă o rezoluție mai mare dacă direcționați un iPad cu un afișaj al retinei decât un Lumia 520.
Deoarece Android este o platformă deschisă, există o gamă largă de dispozitive, rezoluții de ecran și densități de pixeli. Câteva dintre cele mai obișnuite sunt enumerate mai jos.
Rețineți că codul pe care îl vom scrie în acest tutorial poate fi folosit pentru a viza oricare dintre platforme.
În funcție de dispozitivele pe care le vizați, este posibil să fie necesar să convertiți opera de artă la dimensiunea și densitatea pixelilor recomandată. 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ă 2D buton în Scenă panoul nu este evidențiat. De asemenea, puteți modifica rezoluția care este afișată în Joc panou.
Apoi sunteți prezentat cu panourile de spațiu de lucru, pe care le vom folosi și în acest tutorial. Ia-ți un moment să te uiți la panourile de interfață principale, cum ar fi Scenă, Joc, Ierarhie, Proiect, bunuri, și Inspector. Le vom folosi frecvent în acest tutorial.
Interfața de utilizare a jocului este simplă. Imaginea de mai jos vă oferă o imagine a lucrării pe care o vom folosi și a modului în care interfața finală a utilizatorului va sfârși. Puteți găsi opere de artă și resurse suplimentare în fișierele sursă ale tutorialului pe GitHub.
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 PlayOnLoop și Freesound.
Pentru a crea acest joc, trebuie mai întâi să obținem câteva modele 3D. Vă recomandăm 3docean pentru modele de înaltă calitate și texturi, dar dacă testați sau învățați, atunci modelele gratuite vor funcționa la fel de bine. Modelele din acest tutorial au fost descărcate de la SketchUp 3D Warehouse unde puteți găsi o gamă largă de modele 3D.
Deoarece Unity nu recunoaște formatul de fișier SketchUp, trebuie să îl convertim în ceva ce poate fi importat de Unity. Mai întâi trebuie să descărcăm versiunea gratuită a SketchUp, numită SketchUp Make.
Deschideți modelul 3D din SketchUp Make, selectați Export> Model 3D de la Fişier meniu și alegeți Collada (* .dae). Alegeți un nume și o locație și faceți clic pe Salvați. Acest lucru va crea un fișier și un dosar pentru modelul 3D. Fișierul conține datele pentru obiectul 3D în timp ce folderul conține texturile modelului. În etapa următoare, vom importa modelul în Unity.
Înainte de a începe codificarea, trebuie să adăugăm activele proiectului 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.
Înainte de a continua, să poziționăm camera principală pentru a crea vizualizarea dorită. Selectați camera principală din Ierarhie panou și reglați Transforma valori în Inspector pentru a se potrivi cu cele prezentate mai jos.
Nu vă faceți griji dacă nu vedeți nicio modificare. Nu am creat nimic pentru ca camera să vadă încă.
Pentru ca obiectele noastre să fie vizibile în lumea 3D, trebuie să adăugăm lumină în scenă. Selectați Creați altele de la GameObject meniu și selectați Lumină direcțională. Acest lucru va crea un obiect care produce un fascicul de lumină. Schimbă-l Transforma valorile afișate în următoarea captură de ecran pentru a ilumina zona.
Lumina trebuie să fie vizibilă pe scenă, după cum se arată în următoarea imagine.
Jucătorii de alei sunt principalele componente ale scenei jocului. Jucătorul va folosi ecranul tactil pentru a arunca o minge, urmărind unul dintre găuri.
Modelul folosit în acest tutorial a fost descărcat și importat utilizând metoda descrisă în Pasul 9.
Chiar dacă vom adăuga trei modele la scenă, jocul va interacționa doar cu cel din centru. Trageți și plasați o instanță a modelului pe Scenă sau Ierarhie panou și schimbați-l Transforma valori la cele afișate în imaginea de mai jos.
Utilizați aceeași metodă pentru a adăuga celelalte două instanțe sau duplicați prima instanță apăsând Command-D. Folosește Instrumente de transformare pentru a le poziționa după cum se arată mai jos.
Cu aleea principală în loc, este timpul să adăugăm aglomerații modelului pentru a ne ajuta să mutăm mingea pe suprafața sa. Deoarece acesta este un model complex cu multe grupuri și poligoane, ne-ar lua mult timp să identificăm diferitele forme și să adăugăm un ciocnire fiecăruia dintre ele. Pentru a face acest pas mai ușor, vom folosi un script de terță parte pentru a crea automat un collider care să se potrivească modelului nostru.
Scriptul va adăuga un nou element de meniu numit Wizards la meniul Unitate. Selectați modelul la care doriți să adăugați colizorul și selectați Adăugați Colliders Mesh de la Wizards meniul. Aceasta va aduce următoarea fereastră.
Clic Adăugați agenți de coliziune în partea dreaptă jos pentru a adăuga agenți de coliziune la model. Acest lucru va crea o Mesh Collider pentru fiecare grup sau obiect al modelului. Puteți verifica acest lucru prin extinderea ballbowler model în Ierarhie și selectarea unui element.
Am adăugat o sursă de lumină în lumea noastră 3D, dar avem nevoie de puțină lumină pentru a face scena mai interesantă. Facem acest lucru prin adăugarea unui număr de spoturi.
Selectați Creați altele de la GameObject meniu și selectați Reflector. Acest lucru va crea un obiect care produce un fascicul de lumină îndreptat către un punct. Primul reflector pe care îl adăugăm trebuie să ilumineze găurile. Schimbă-l Transforma valori după cum se arată în următoarea imagine de ecran.
Adăugați un al doilea spot folosind următoarele valori de transformare.
Mingea este cea mai importantă componentă a jocului. Jucătorul va folosi ecranul tactil pentru a încerca să obțină mingea într-unul dintre găuri.
Bilele vor fi simple Sferă primitiv. Selectați Creați Altele> Sferă de la GameObject meniu pentru a crea primitivul și a modifica Transforma valori în Inspector așa cum se arată mai jos.
Vom converti mingea la a prefabricat mai târziu, deoarece ne va ajuta să creăm instanțe ale codului. Dar mai întâi, să adăugăm a Corp rigid la el.
Pentru a detecta o coliziune cu mingea, trebuie să atașăm a Corp rigid la el. Pentru a adăuga una, selectați Adăugați componenta de la Inspector panou, urmat de Fizică > Corp rigid. Puteți lăsa setările la valorile implicite.
Trebuie să detectăm când mingea cade într-o gaură. Vom folosi Trigger Colliders în acest scop. Un collider de declanșare este un obiect fizic care detectează o coliziune cu un alt obiect fără a reacționa fizic. Acest lucru ne va ajuta să detectăm momentul în care mingea intră în gaură fără a face să se învârtă înapoi.
Deoarece nu avem nevoie de un model real sau de un grafic 2D pentru a face acest lucru, vom crea un Empty GameObject. Selectați GameObject> Creare gol din bara de meniu pentru ao crea. Apasă pe Adăugați componenta buton în Inspector și selectați Fizică> Collider de casetă.
Aceasta va adăuga un obiect de coliziune la obiectul jocului. Repetați acest proces pentru fiecare gaură și asigurați-vă că verificați trăgaci Caseta de bifat.
Poziționați coliziunea așa cum se arată în imaginea de mai jos.
Pentru a afișa tabloul de bord al jocului, vom folosi Texturile GUI ale Unity. Implicit, imaginile importate la bunuri folderul sunt convertite în Textură instanțe care pot fi aplicate obiectelor 3D. Trebuie să schimbăm aceste lucruri Textură cazuri la GUI Textura instanțe pentru imaginile pe care dorim să le folosim în interfața de utilizator a jocului.
Selectați imaginea pe care doriți să o convertiți în bunuri și deschideți Inspector. Selectați GUI de la Textură tip meniul.
Acum puteți glisa și fixa imaginea pe Scenă. Imaginea va apărea întotdeauna în fața fiecărui obiect de pe scenă și va fi tratată ca un element 2D.
În interiorul elementului GUI de pe tabloul de bord, vom afișa numerele care indică scorul jucătorului și numărul de bile pe care le-a lăsat jucătorul.
Selectați Creați alte> Text GUI de la GameObject pentru a crea un obiect text, așezați-l în centrul elementului GUI și modificați textul în Ierarhie panou la 00. Urmați același proces pentru textul bilelor pentru a completa tabloul de bord.
E timpul să scriem un cod. Cu interfața cu utilizatorul, putem începe să scriem codul necesar pentru a adăuga interacțiunea cu jocul. Facem acest lucru prin intermediul unor scripturi, care pot fi atașate obiectelor de joc. Urmați pașii următori pentru a afla cum să adăugați interacțiunea la nivelul pe care tocmai l-am creat.
Vom începe prin crearea clasei care gestionează majoritatea mecanicii jocurilor. Selectați camera principală, faceți clic pe Adăugați componenta buton în Inspector și selectați Script nou. Denumiți scenariul ThrowBall
și 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; clasa publică ThrowBall: MonoBehavior privat Vector3 throwSpeed = Vector3 nou (0, 0, 1100); public GameObject ballReference; privat Vector2 startPos; Vector2 endPos privat; particulă vector2 minDistance = vector2 nou (0, 100); private Vector ballPos = Vector3 nou (0, 0.38f, -11.41f); publice bool ballOnStage = false; public int ballsLeft = 5; public GUIText ballsTextReference; public AudioClip throwSound;
Începem prin crearea unui număr de variabile pe care le vom folosi în joc. Să aruncăm o privire la fiecare.
throwSpeed
: viteza inițială a mingii când este pusă pe aleeballReference
: o referire la prefabricatul cu bile, setat în inspectorstartPos
: poziția de început a primei atingeri, utilizată pentru a detecta un gest de glisareendPos
: poziția finală a atingeriiminDistance
: mișcarea minimă necesară pentru ca degetul să fie considerat o loviturăballPos
: poziția inițială a mingiiballOnStage
: Adevărat
atunci când o minge este în prezent pe alee, pentru a preveni mai multe fotografii în același timpballsLeft
: numărul de bile rămaseballsTextReference
: trimitere la câmpul de texte din bile, setat în inspectorthrowSound
: trimiterea la sunetul jucat atunci când mingea este aruncată, stabilită în inspectorUrmătorul fragment de cod arată începutul Actualizați
metodă. Această metodă detectează dacă utilizatorul atinge ecranul.
void Actualizare () if (Input.touchCount> 0) Touch touch = Input.GetTouch (0);
Verificăm touchCount
proprietate a Intrare
pentru a obține numărul actual de atingeri pe ecran. Dacă touchCount
este mai mare decât 0
, păstrăm o referință la prima Atingere
obiect. Vom folosi acest obiect mai târziu.
Cu referire la Atingere
obiect, avem acces la ei fază
proprietate, care ne ajută să determinăm dacă atingerea a început, sa mutat sau sa încheiat.
Pentru că avem nevoie de un punct de pornire pentru a detecta un gest de glisare, avem nevoie de acces la punctul de plecare al Atingere
obiect, la care avem acces atunci când Atingere
obiecte fază
este egal cu TouchPhase.Began
. Poziția Atingere
obiect este stocat în el poziţie
proprietate.
Avem acces la punctul final al gestului accesând Atingere
obiecte poziţie
proprietate atunci când este fază
proprietatea este egală cu TouchPhase.Ended
.
dacă (touch.phase == TouchPhase.Began) startPos = touch.position; dacă (touch.phase == TouchPhase.Ended) endPos = touch.position; / * Comparați pozițiile * / dacă (endPos.y - startPos.y> = minDistance.y &&! BallOnStage && ballsLeft> 0)
Acum, că avem coordonatele punctului de pornire și final al atingerii, putem calcula distanța și putem verifica dacă este un gest de glisare valabil prin compararea cu valoarea stocată în minDistance
obiect.
De asemenea, verificăm valoarea ballOnStage
pentru a verifica dacă o minge este deja pe scena și ne asigurăm că jucătorul are destule bile rămase pentru a continua jocul. Numărul de bile lăsate este stocat în ballsLeft
variabil.
Zonele de ecran sunt create pentru a calcula unde va fi poziția orizontală a mingii atunci când mingea este creată. Noi facem acest lucru pentru a avea controlul asupra pozitiei mingii si ne spune unde se va termina balonul si nu va impiedica sa o aruncati afara. Împărțim ecranul în trei părți, după cum puteți vedea mai jos.
Matematica pe care o folosim este destul de simplă, după cum puteți vedea în blocul de cod de mai jos. Împărțim ecranul în trei părți egale și verificăm ce parte conține atingerea utilizatorului.
/ * Împărțiți ecranul în 3 părți * / / * Stânga * / dacă (touch.position.x> = 0 && touch.position.x <= Screen.width / 3) ballPos.x = Random.Range(-0.87f, -0.35f); /* Center */ else if(touch.position.x > Lățime ecran / 3 && touch.position.x <= (Screen.width / 3) * 2) ballPos.x = Random.Range(-0.35f, 0.22f); /* Right */ else if(touch.position.x > (Ecran / lățime / 3) * 2 && touch.position.x <= Screen.width) ballPos.x = Random.Range(0.22f, 0.36f);
După detectarea zonei corecte a ecranului, se calculează o poziție aleatorie între începutul și sfârșitul zonei și se atribuie acea poziție la ballPos
variabil.
După stabilirea poziției de plecare a mingii, vom crea un nou GameObject
instanță folosind instantiat
metoda, trecerea în ballReference
și ballPos
variabile.
GameObject ball = Instantiate (ballReference, ballPos, transform.ro) ca GameObject; ball.rigidbody.AddForce (throwSpeed);
Cu mingea de pe scena, adăugăm o forță pentru ao face să treacă prin aleea corectă. Facem asta invocând AddForce
metoda de pe minge corp rigid
proprietate, trecerea în throwSpeed
variabilă am declarat mai devreme.
Jucăm un efect sonor atunci când mingea este aruncată în alee. Următorul rând de cod are grijă de asta. Pentru această activitate, nu uitați să setați throwSound
variabilă în Inspector.
AudioSource.PlayClipAtPoint (throwSound, transform.position);
După ce aruncăm mingea, trebuie să resetăm variabilele care detectează atingerile jucătorului. Făcând acest lucru nu s-ar determina detectarea mai multor rachete. Am setat și ballOnStage
variabil la Adevărat
, împiedicând ca o altă minge să fie aruncată în același timp.
endPos = Vector2 nou (0, 0); startPos = Vector2 nou (0, 0); ballOnStage = adevărat;
Acest lucru completează ThrowBall
clasă. Punerea în aplicare a clasei ar trebui să arate ca cea prezentată mai jos.
utilizând UnityEngine; utilizând System.Collections; clasa publică ThrowBall: MonoBehavior privat Vector3 throwSpeed = Vector3 nou (0, 0, 1100); public GameObject ballReference; privat Vector2 startPos; Vector2 endPos privat; particulă vector2 minDistance = vector2 nou (0, 100); private Vector ballPos = Vector3 nou (0, 0.38f, -11.41f); publice bool ballOnStage = false; public int ballsLeft = 5; public GUIText ballsTextReference; public AudioClip throwSound; void Actualizare () if (Input.touchCount> 0) Touch touch = Input.GetTouch (0); dacă (touch.phase == TouchPhase.Began) startPos = touch.position; dacă (touch.phase == TouchPhase.Ended) endPos = touch.position; / * Comparați pozițiile * / dacă (endPos.y - startPos.y> = minDistance.y &&! BallOnStage && ballsLeft> 0) / * Împărțiți ecranul în 3 părți * / / * Stânga * / if (poz. x> = 0 && touch.position.x <= Screen.width / 3) ballPos.x = Random.Range(-0.87f, -0.35f); /* Center */ else if(touch.position.x > Lățime ecran / 3 && touch.position.x <= (Screen.width / 3) * 2) ballPos.x = Random.Range(-0.35f, 0.22f); /* Right */ else if(touch.position.x > (Ecran / lățime / 3) * 2 && touch.position.x <= Screen.width) ballPos.x = Random.Range(0.22f, 0.36f); GameObject ball = Instantiate(ballReference, ballPos, transform.rotation) as GameObject; ball.rigidbody.AddForce(throwSpeed); AudioSource.PlayClipAtPoint(throwSound, transform.position); endPos = new Vector2(0, 0); startPos = new Vector2(0, 0); ballOnStage = true;
Următorul script conține implementarea BallSensor
clasă și este atașat senzorilor de bile, manipulând orice coliziune cu senzorii de bile.
Începem prin declararea unei variabile numite sensorValue
, care stochează numărul de puncte pe care senzorul de bilă îl va adăuga la scor. Deoarece senzorii de bilă sunt toți aceiași prefab, declarăm această variabilă ca fiind public
. Aceasta ne va permite să setăm această valoare în editor folosind Inspector.
utilizând UnityEngine; utilizând System.Collections; clasa publică BallSensor: MonoBehavior public int sensorValue = 0; public GUIText scoreReference; public GameObject alertReference;
Celelalte două variabile stochează trimiteri la obiectele de joc scoase și alerte, pe care le-am stabilit și în Unity's Inspector. Aceste referințe vor fi folosite pentru a mări scorul și pentru a afișa alerta atunci când jocul se termină.
OnTriggerEnter
metoda detectează când a avut loc o coliziune și acceptă Collider
obiect senzorul se ciocnește cu mingea, în acest caz. Atunci când se detectează o coliziune, mingea este distrusă pentru a împiedica răsculat și potențial să cadă într-o altă gaură.
void OnTriggerEnter (altul Collider) Destroy (other.gameObject);
După ce am distrus mingea, suntem siguri că nu mai este pe alee. Aceasta înseamnă că putem arunca o altă minge fără a provoca un comportament nedorit. Următorul rând de cod comunică cu ThrowBall
clasa și devine ballOnStage
variabilă, setându-l la fals
.
Camera.main.GetComponent() .ballOnStage = false;
Să aruncăm o privire mai atentă la modul în care accesăm o variabilă declarată într-o altă clasă. După cum puteți spune până acum, o modalitate de a accesa o variabilă sau un obiect declarat în afara clasei curente este să setați o variabilă de referință folosind public
sau [SerializeField]
, și apoi utilizați Inspector pentru a da o valoare.
public
cuvântul cheie joacă un rol important în acest sens. Utilizarea acestuia face ca variabila să nu fie accesibilă numai de la Inspector, dar și prin cod. Pentru a face acest lucru, avem mai întâi nevoie de acces la GameObject care are Script Component atașat la acesta, care este Camera principală în acest caz.
Există o singură cameră în acest joc, ceea ce face lucrurile mai ușoare. Putem trimite o referire la camera principală prin Camera.main
. Utilizarea GetComponent
primim scenariul atașat camerei, folosind numele clasei. Apoi avem acces la variabila publica numita ballOnStage
.
Următorul bloc de coduri actualizează scorul, folosind referința pe care am declarat-o mai devreme.
scoreReference.text = (int.Parse (scoreReference.text) + senzorValue) .ToString ();
Convertim valoarea stocată în scoreReference
la un număr întreg și adăugați-l la valoarea stocată în sensorValue
. Convertim rezultatul într-un șir și îl atribuim text
proprietatea scoreReference
.
În acest pas, scădem numărul de bile rămase. Folosim metoda descrisă în Pasul 3 pentru a accesa ballsLeft
și ballsTextReference
variabile ale ThrowBall
clasă.
Camera.main.GetComponent() .BallsLeft--; Camera.main.GetComponent () .ballsTextReference.text = Camera.main.GetComponent () .BallsLeft.ToString ();
Reducem valoarea stocată în ballsLeft
și actualizați text
proprietatea ballsTextReference
.
Jocul se termină atunci când jucătorul nu mai dispune de fotografii disponibile. Următoarele linii de cod verifică dacă ballsLeft
variabila este egală cu 0
și să creeze o alertă dacă Adevărat
. Apoi chemăm Invoca
metoda de a invoca Reîncarcă
, care repornește jocul prin reîncărcarea scenei curente.
Al doilea parametru al Invoca
Metoda definește întârzierea cu care Reîncarcă
metoda va fi invocată. Facem acest lucru pentru a da jucătorului ceva timp înainte de a începe un nou joc.
dacă (Camera.main.GetComponent() .ballsLeft == 0) Instanțiate (alertReference, noul Vector3 (0.5f, 0.5f, 0), transform.rotation); Invocați ("Reîncărcați", 3);
Aceasta este ultima parte din BallSensor
clasă. În Reîncarcă
metoda, suntem LoadLevel
pe cerere
clasa și reîncărcați nivelul actual, resetând fiecare obiect și variabilă la starea inițială.
void Reload () Application.LoadLevel (Application.loadedLevel);
Așa arată clasa când a terminat.
utilizând UnityEngine; utilizând System.Collections; clasa publică BallSensor: MonoBehavior public int sensorValue = 0; public GUIText scoreReference; public GameObject alertReference; void OnTriggerEnter (altul Collider) Destroy (other.gameObject); Camera.main.GetComponent() .ballOnStage = false; scoreReference.text = (int.Parse (scoreReference.text) + senzorValue) .ToString (); Camera.main.GetComponent () .BallsLeft--; Camera.main.GetComponent () .ballsTextReference.text = Camera.main.GetComponent () .BallsLeft.ToString (); dacă (Camera.main.GetComponent () .ballsLeft == 0) Instanțiate (alertReference, noul Vector3 (0.5f, 0.5f, 0), transform.rotation); Invocați ("Reîncărcați", 3); void Reîncărcare () 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..
Aceste setări sunt date specifice aplicației care includ creatorul sau compania, modul de rezoluție a aplicațiilor și modul de afișare, modul de redare (CPU, GPU), compatibilitatea cu dispozitivele de sistem etc. Configurați setările în funcție de dispozitivele pe care le vizați și de magazin sau de pe piață intenționați să publicați aplicația.
Folosind grafica pe care ați creat-o mai devreme, puteți crea acum o imagine irezistibilă ș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 cum să folosim forțele fizice, gesticulele, comunicarea de clasă și alte aspecte ale dezvoltării jocurilor în Unitate. 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.