Realizarea unui joc simplu cu nasturi, sertare și uși în Unity.

Cum se creează un joc în Unity

Casual jocurile meci 3 (trei la rând) sunt printre cele mai populare de pe piață. Mulți oameni joacă Candy Crush, Bejeweled și altele. Aceste jocuri au un scop simplu: mutați piesele până când trei din aceleași plăci sunt una lângă cealaltă. Când se întâmplă acest lucru, elementele potrivite dispar și altele apar în locul lor. Apoi jucătorul marchează puncte.

Acest ghid va acoperi următoarele:

  • Crearea unei plăci pline cu elemente de mozaic
  • Selectarea și deselectarea plăcilor
  • Identificarea elementelor adiacente cu raycasts
  • Înlocuirea elementelor
  • Găsirea potrivirii a trei sau mai multe elemente cu raycasts
  • Umplerea elementelor goale
  • Păstrarea scorului și numărarea mișcărilor

Notă. Se presupune că știți deja cum să utilizați editorul Unity, cum să editați codul și că aveți cunoștințe de bază despre C#.

În viitor, puteți adăuga moduri temporare, niveluri diferite cu plăci de diferite dimensiuni, puncte bonus pentru combinații sau efecte de animație.

Distribuie acest articol:

Articole similare

Aleksey Galkin, dezvoltatorul puzzle-ului mobil pentru copii Fold the Adventure, a scris o coloană pentru CPU despre ceea ce ar trebui să acordați atenție atunci când dezvoltați un joc mobil pe platforma Unity: cum să alegeți activele potrivite din Magazinul de active, în care serviciu pentru a stoca datele despre progresul utilizatorului și de unde să obțineți sunete pentru jocuri.

La marcaje

start

Pentru a face un joc bun, ai nevoie de o idee bună. Dar chiar și având o idee, a crea un joc decent pe baza ei nu este deloc ușor. Pe lângă norocul banal, există un număr imens de lucruri cu care trebuie să te confrunți. Un număr infinit de decizii trebuie luate într-un timp foarte modest. La urma urmei, timpul înseamnă bani, iar bugetul unui proiect tinde să dispară înainte de a se face ceva care merită să fie arătat (să nu mai vorbim de lansare).

Această poveste este despre modul în care mica noastră echipă indie a creat Fold the Adventure dintr-o idee originală. De când jocul a fost lansat, putem să tragem aer și să ne uităm înapoi la cele trei luni necesare dezvoltării. În ciuda faptului că avem mulți ani de experiență în industria jocurilor de noroc, crearea Fold the Adventure ne-a făcut să transpirăm mult din cauza evenimentelor imprevizibile și a resurselor foarte limitate. Bun venit în aventura noastră!

Alegerea motorului: Unity

Să spun adevărul, nu a fost nevoie să alegem un motor. Am luat imediat Unity și nu am regretat. Scopul nostru principal a fost să creăm un joc relativ mic și să-l lansăm pe cât mai multe platforme posibil. În același timp, am vrut să evit agitația cu programarea în Objective C și Java. Am reușit cu Unity. Și deși totul nu a fost atât de simplu și de lin pe cât ne așteptam, am fost mulțumiți de motor.

În opinia noastră, Unity este cel mai bun motor de joc pentru dezvoltarea indie în acest moment. Arhitectura sa software este bine gândită, editorul este bine făcut și se îmbunătățește cu fiecare versiune. Începerea cu Unity este ușoară, dar dezvoltatorii experimentați ar putea considera că este contraintuitiv la început. Cu toate acestea, atât începătorii, cât și profesioniștii sunt probabil să se confrunte cu aceleași capcane.

  • De la bun început, trebuie să petreceți timp învățând arhitectura de bază a Unity, inclusiv obiecte de joc, obiecte scriptate, scene, prefabricate, active, metode de evenimente și ordinea lor de apelare, coroutine, sincronizare, procesare de intrare, serializare. Unity poate părea un motor ușor de utilizat, dar fără să-i înțelegeți elementele fundamentale, puteți petrece ore nesfârșite depanând și refactoring.
  • De la bun început, formulați regulile de structurare, precum și denumirea activelor și a obiectelor de joc. Chiar și un joc mic tinde să se transforme în haos fără o organizare adecvată. Există multe articole dedicate acestei probleme. De asemenea, puteți viza proiecte publicate de dezvoltatori în Unity Assets Store.
  • Programeaza cat mai putin. În schimb, utilizați pe scară largă funcțiile WYSIWYG (What You See Is What You Get) ale editorului Unity. Datorită extensibilității sale ușoare, editorul Unity vă permite să transformați jocul pe care îl dezvoltați într-un constructor convenabil pe care îl pot folosi chiar și cei care nu știu să programeze. Și acest lucru simplifică și accelerează foarte mult crearea conținutului jocului.
  • Evitați să folosiți practici familiare care nu se potrivesc bine cu ideologia Unității. Oricât de tentant este să poți plasa toate obiectele jocului într-o singură scenă sau să stochezi parametrii mecanicii jocului în fișiere XML, această abordare va face viața mult mai dificilă în etapele ulterioare de dezvoltare.
  • Fiți atenți și atenți când utilizați sisteme de control al versiunilor. Unity tinde să schimbe fișierele în mod imprevizibil. De exemplu, efectuarea de modificări la un prefabricat implică modificarea tuturor fișierelor de scenă în care este utilizat, dar numai după ce acestea sunt ulterior salvate. Utilizați întotdeauna textul forțat ca mod de serializare a activelor și urmăriți îndeaproape fișierele pe care le încărcați pe server pentru a nu distruge munca colegilor dvs.
  • Testează jocul pe cât mai multe platforme posibil. În același timp, nu uitați că setările pot fi definite pentru fiecare dintre platforme separat. Fără o astfel de testare, tu, ca și noi, s-ar putea să descoperi că jocul tău se comportă diferit în playerul web sub Windows și OS X.

Active: creați sau cumpărați

Dacă aveți o echipă mică, cu timp și buget foarte limitat, atunci crearea unui număr mare de active de joc de înaltă calitate de la zero este aproape imposibilă. Trebuie să liniștim ambițiile grandioase și să minimizăm cantitatea necesară. Dar chiar și în condiția minimizării, trebuie să lăsați ceva la care jucătorul ar fi încântat să se uite.

Dacă atuurile pentru joc pot fi făcute de echipă - o problemă mai puțin (cel mai probabil). Dar există și o fază de prototipare și are nevoie și de active, care sunt foarte probabil să fie aruncate. Prin urmare, aproape fiecare echipă are nevoie de atuuri pe care nu pot sau nu vor să le facă. Întrebarea este de unde să le iei.

Primul și cel mai evident răspuns pentru noi, ca dezvoltatori Unity, a fost Unity Assets Store. Oricât de tentantă ar părea această oportunitate, ea implică o serie de dificultăți:

  • Activele din Unity Assets Store sunt disponibile pentru toată lumea, fără excepție. Cu toate acestea, nimeni nu vrea ca jocul lor să fie ca alții. Cel puțin noi nu am vrut.
  • Este aproape imposibil să cumpărați un pachet de active care să satisfacă toate nevoile proiectului și se pune problema compatibilității stilistice. Pentru Fold the Adventure, am cumpărat mai multe pachete din care am folosit mai puțin de jumătate.
  • În ciuda faptului că numărul total de active din Unity Assets Store este destul de mare, găsirea printre ele a ceva potrivit pentru nevoi specifice poate fi foarte dificilă. Cu toate acestea, calitatea lasă adesea mult de dorit. Am petrecut ore întregi căutând, nefiind întotdeauna capabili să judecăm calitatea unui pachet fără să-l cumpărăm.

A doua opțiune a fost externalizarea activelor. Desigur, această cale necesită mai mult timp și bani decât să cumperi ceva din Unity Assets Store. Cu toate acestea, cu un scenariu de succes, activele rezultate sunt unice și de calitate superioară.

Exista și opțiunea de a cumpăra active din alte surse decât Unity Assets Store. Cu toate acestea, a existat o problemă de compatibilitate cu Unity și am decis să ne abținem de la astfel de experimente.

Când decidem ce active să facem singuri și care nu, am început prin a le clasifica. După cum sa dovedit, au existat relativ puține active care au fost unice pentru jocul nostru și l-au făcut să iasă în evidență de restul. Am decis să le facem singuri, apelând la externalizare acolo unde este posibil. Restul a fost achiziționat de la Unity Assets Store.

Iată câteva reguli simple cu care am venit când căutăm și cumpărăm active în Magazinul de active Unity

  • Pentru a evita discrepanțe stilistice, este indicat să cumpărați active de același tip de la același autor. Acest lucru nu vă împiedică să cumpărați modele de la un studio și particule de la altul, dar, în același timp, trebuie să monitorizați compatibilitatea stilurilor.
  • Evitați folosirea activelor așa cum au fost achiziționate. Este suficient să faceți mici modificări (de exemplu, să redesenați ușor texturile, să restructurați particulele) sau să utilizați activele într-un mod nestandard.
  • Dacă intenționați să lansați jocul pe platforme mobile, asigurați-vă că activele pe care le cumpărați sunt optimizate pentru acestea.

Muzica și sunetele merită o atenție deosebită. Rareori sunt create de o echipă indie pe cont propriu (dacă ai un compozitor, atunci ori ești foarte norocos, ori nu mai ești indie). Din fericire, există un număr mare de servicii care oferă muzică și sunete fără drepturi de autor, inclusiv Unity Assets Store. Și este destul de ieftin.

Nu este suficient doar să cumpărați muzică și sunete. Este necesar să vă asigurați că sună corect în joc și nu irită urechea. Dacă ai încredere în abilitățile tale, atunci poți încerca să o faci singur. Am cerut ajutorul unui studio specializat în actorie vocală. Rezultatul a fost semnificativ mai bun decât ceea ce am putea face noi înșine și a meritat banii.

Unde să stocați datele: analizați

Chiar dacă creați un joc single-player ca noi, aveți nevoie de un loc în care să stocați date despre progresul actual al jucătorului, statisticile acțiunilor sale, achizițiile făcute și alte informații. Cea mai simplă soluție ar fi să folosiți clasa Unity PlayerPrefs pentru asta. Cu toate acestea, salvează datele la nivel local și, evident, nu este potrivit pentru lucruri la fel de sensibile precum achizițiile în aplicație.

Căutând o soluție mai bună, am descoperit Parse. Parse este un serviciu BaaS multi-platformă (Backend as a Service - o platformă „backend as a service”, oferă o infrastructură de server cloud pentru toate tipurile de aplicații – n.red.), care permite aplicației să stocheze date în cloud, acceptă autorizarea utilizatorului, funcții server, notificări push și analize. Aceasta nu este o listă exhaustivă de funcționalități, dar oferă o idee generală despre ce este Parse.

Unul dintre motivele pentru care am ales Parse a fost integrarea acestuia cu Facebook (prima versiune Fold the Adventure a fost creată special pentru Facebook). Și, în ciuda faptului că mai târziu, accentul pe dezvoltare a fost mutat pe platformele mobile, am continuat să folosim Parse.

O altă caracteristică plăcută a lui Parse este politica de prețuri. La început pare puțin ciudat, dar după reflecție și calcule, se dovedește a fi mai mult decât reușit. În esență, ești limitat de numărul de solicitări pe secundă. Vestea bună este că 30 de solicitări pe secundă sunt gratuite. Poate părea că acest lucru nu este mult, dar de fapt este suficient pentru a susține mii de utilizatori. Atâta timp cât utilizați aceste interogări cu înțelepciune.

În Parse, faci totul prin solicitări. Pentru a obține și modifica câmpuri de date, creați o relație între tabele, formați o selecție - tot ce aveți nevoie este o interogare. La prima vedere, numărul de solicitări ar trebui să fie destul de mare, dar, de fapt, majoritatea operațiilor elementare pot fi combinate într-o singură cerere folosind metoda ParseObject.SaveAllAsync. De asemenea, Parse va arunca o excepție dacă limita de solicitare pe secundă este depășită. Dar nimic nu te împiedică să aștepți un timp și să încerci din nou cererea. Și în timp ce jocul se poate simți „blocat” de utilizator în acest caz, această problemă este ușor de ocolit prin efectuarea de mici modificări la interfața cu utilizatorul și logica pentru salvarea și citirea datelor.

Singurul lucru pentru care nu ar trebui folosit Parse este crearea unui server de joc. Chiar dacă dezvoltați un joc pe rând, scopul lui Parse este fundamental grozav. Există și alte soluții care sunt mult mai potrivite pentru aceste scopuri.

Utilizarea Parse în Unity este ușoară și bine documentată. În esență, trebuie să descărcați SDK-ul Parse, să vă configurați jocul pe serverul Parse și pe proiectul Unity și să faceți ceva programare. Un avertisment evident: nu veți putea folosi Parse dacă dispozitivul pe care este instalat jocul dvs. nu are acces la internet.

Dacă trebuie să acceptați modul offline și să actualizați datele în Parse atunci când există o conexiune la rețea, atunci va trebui să scrieți un mic sistem separat pentru aceasta. Am folosit clasa PlayerPrefs pentru asta. Sistemul salvează datele local și le încarcă în Parse de îndată ce detectează o conexiune la internet.

Platforme staționare vs mobile: compromisuri

În ciuda convergenței treptate din ultimii ani, platformele fixe și mobile sunt încă foarte diferite unele de altele. Acest lucru devine evident atunci când încercați să faceți shaderele „frumoși” să funcționeze în mod acceptabil (să nu mai vorbim de a le face să ruleze rapid) pe toate dispozitivele pe care ar trebui să ruleze jocul. Unitatea facilitează foarte mult acest proces, dar, din păcate, nu rezolvă toate problemele.

Există un număr mare de articole dedicate optimizării jocurilor Unity pentru platformele mobile, așa că vor fi puține de spus pe această temă.

  • Dacă intenționați să vă lansați pe platforme mobile și să utilizați umbre, atunci limitați-vă la modul de iluminare înainte. În ciuda iluminării la cuptor și a reducerii numărului de obiecte care aruncă umbre, nu am reușit să obținem performanțe acceptabile în modul de iluminare amânată. Poate că nu am încercat suficient, dar forumurile Unity, în cea mai mare parte, sunt de acord cu noi în acest sens.
  • Minimizați numărul de apeluri la extragere. Un număr mare de poligoane în modele nu va afecta performanța la fel de mult ca apelurile suplimentare de extragere. Am planificat o mare optimizare care vizează reducerea numărului de apeluri la extragere pentru a sprijini mai bine modelele mai vechi de dispozitive mobile, dar, din păcate, nu am putut face acest lucru în termenele strânse alocate.
  • Nu abuzați de texturi în shadere. Acest lucru poate duce la o scădere semnificativă a performanței. În jocul nostru, am fost forțați să folosim mai multe shadere speciale în loc de un shader universal - tocmai din acest motiv.

Pe lângă diferențele de performanță și limitările hardware, există o altă diferență importantă între platformele fixe și mobile. Și acea diferență este modul de intrare. Un joc conceput pentru controlul tastaturii și mouse-ului nu se traduce bine în multi-touch și accelerometru. Am învățat asta pe calea grea. În primul rând, Unity separă mouse-ul și manipularea multi-touch. Prin urmare, a fost necesar să se creeze un sistem care să unifice acest aspect. În aceste scopuri, am folosit sistemul de intrare din NGUI, care, după mici modificări, s-a dovedit a fi destul de bun. De asemenea, ne-a permis să rezolvăm problema distribuției intrărilor între interfața cu utilizatorul și controalele jocului, ceea ce ne-a dat ceva probleme la momentul respectiv.

Interfața cu utilizatorul în ansamblu a necesitat o serie de modificări pentru a suporta corect dispozitivele mobile. De exemplu, în loc să derulați rotița mouse-ului și să țineți apăsat butoanele, trebuiau introduse gesturi multi-touch. Unele dintre modificări ar putea fi simplificate folosind soluții gata făcute din Unity Assets Store. Dar, în cazul nostru, a fost o simplă ciupitură, așa că am decis să o scriem într-o oră de la zero, în loc să petrecem zile întregi conectând și depanând un sistem care „face totul și chiar mai mult”.

Cel mai mare număr de probleme au cauzat controlul în joc. Am început cu un set tradițional de ASWD + mouse pentru a controla personajul și camera, plănuind să folosim joystick-ul de pe ecran pe dispozitivele mobile. Dar lucrurile nu au ieșit așa cum ne așteptam: jocul a devenit aproape imposibil de gestionat. A trebuit să schimbăm urgent comenzile din joc, făcând modificări chiar și mecanicii jocului. Prin încercare și eroare, ne-am stabilit pe comenzile point-n-click, care sunt intuitive pe dispozitivele mobile.

Localizare: cu cât este mai simplă, cu atât mai bine

Dacă vrei ca un joc să aibă succes la scară globală, atunci, fără îndoială, trebuie să fie localizat. Iar localizarea este o altă parte a dezvoltării pe care o echipă indie nu o poate face aproape niciodată singură. Acest lucru înseamnă un singur lucru: va trebui să plătiți pentru localizare.

Este necesar să se localizeze tot ceea ce are legătură cu limbajul uman. Adică texte, vorbire, inscripții pe texturi - toate acestea trebuie localizate. Acest proces poate deveni rapid foarte consumator de timp și costisitor. Prin urmare, este extrem de important să reduceți la minimum cantitatea de conținut localizat.

Etichetele de textură sunt cel mai bine evitate și utilizează câmpuri de text NGUI, de exemplu. Dacă jocul necesită vorbire, atunci este probabil să fie necesare și subtitrări, deoarece localizarea vorbirii este nu numai costisitoare, ci și solicitantă în ceea ce privește spațiul ocupat de joc.

Dar minimizarea conținutului localizabil este doar începutul. Următorul pas este pregătirea jocului în sine pentru localizare. Vestea proastă este că Unity (la momentul scrierii acestui articol) nu are mecanisme încorporate în acest scop. Și deși există o serie de soluții specializate în Unity Assets Store (de exemplu, l2 Localization), am decis să folosim sistemul de localizare care vine cu NGUI.

Sistemul de localizare NGUI este simplu și simplu de utilizat. Este construit în jurul unui singur fișier CSV care conține o coloană pentru fiecare limbă. Prezența unui astfel de fișier este foarte convenabilă pentru trimiterea șirurilor de caractere pentru traducere (există un număr mare de servicii specializate pentru aceasta) și apoi inserarea versiunii traduse.

Scrie

Salutare tuturor! După ce am învățat cum să faci jocuri pe acest motor, vreau să te învăț același lucru. În primul rând, avem nevoie de Unity3d în sine, de orice editor de modele 3D și de brațe drepte care cresc de la umeri.

1. Învățarea programului

Pentru început, recomand instalarea Monodevelop! Să înțelegem ce este Unitatea. Unity este un mediu de dezvoltare a jocurilor cu mai multe platforme. Din cauza simplității și a înțelegerii sale, fiecare a treia persoană a creat jocuri pe el cel puțin o dată.

Luați în considerare captura de ecran de mai sus:

  • Scena este cutia de nisip creativă.
  • Proiect - aici sunt toate animațiile și modelele, sunete și texturi.
  • Pentru a instala modele în bara de instrumente de sus, selectați Elemente-Importați material nou. Puteți, de asemenea, active-Import pachet-Pachet personalizat. În al doilea caz, pachetul trebuie să fie în extensia .unity.
  • Ierarhie - toate obiectele din scenă. Acolo creați părinți pentru obiect. Doar mutați un obiect pe altul în meniul ierarhiei și acesta va fi atașat. Rezultatul va fi un fel de folder.
  • Bara de instrumente - listă de instrumente. Acolo puteți activa modul 2D, 3D.
  • Inspector - o caracteristică a unui obiect, în care adăugați animații, scripturi și multe altele. Acolo puteți folosi instrumentele: mutați camera, mutați obiectul, întindeți, rotiți obiectul.


Acum vedeți meniul obiect în el, puteți adăuga animație, scripturi și multe altele.

Cred ca cu acest meniu nu vei avea probleme.
Faceți clic pentru a crea orice obiect.

În general, am studiat programul, în curând va fi posibil să ne scriem propriile jocuri.

2. Creați un joc simplu

Mai întâi, să creăm un teritoriu Create-Terrain. Adăugați iarbă și copaci. Făcând clic pe pământ din dreapta, va apărea o fereastră, selectați copaci, iarbă.

De asemenea, creați munți și denivelări. Apoi încărcați pachetul de controler Characher în proiect. Apoi căutăm în fereastra cu proiectul Standard assets-Characters controller și selectăm vizualizarea la persoana întâi (capsula) sau la persoana a treia (mecanic).
Dacă prima persoană, atunci doar pune-l pe pământ. Dacă din a treia, atunci trebuie să descărcați animația. De asemenea, recomand să setați iluminarea scenei la Create-Directional Light.

Pentru a adăuga muzică, trageți-o la elementul dorit.
Jocul este gata, dar cum să îl compilez?

Pentru a face acest lucru, accesați Setări File-Build-setări player (pentru etichetă și nume). Alegeți o platformă și voilà, ați terminat. Pentru a face acest lucru, trebuie să instalați Android SDK. Dar acolo trebuie să specificați folderul cu SDK și nu aveți nevoie doar de SDK, ci și de API-ul nivelului dorit (de exemplu, Android 4.2 are API 17). De exemplu, pentru ca jocul să fie pe Android 4.0+, trebuie să instalați aceste API-uri.

În articolul următor, vă voi spune cum să configurați controalele pentru Android sau iOS și să învățați cum să scrieți singur scripturi.

Ce vom face? Un joc de puzzle 2D cu un kolobok ca personaj principal care poate muta cutii, care poate apăsa butoane, care poate deschide uși care ascund ieșirea din nivelul pe care l-am construit. Sau tu, avem un tutorial aici până la urmă.

Se presupune că ați descărcat deja Unity și ați jucat puțin în editor. Nu? Acum este momentul, voi aștepta.

schiță grosieră


Am mințit, nu voi aștepta. Creăm un proiect gol fără pachete suplimentare și alegem aspectul ferestrelor după gustul nostru, voi folosi Tall. Adăugați o sferă la ierarhie, trageți camera principală pe ea. Acum, camera ne va urmări sfera dacă brusc vrea să se plimbe. Redenumiți sfera în „Player”, trageți-o în proiect, acum avem un prefabricat pe care îl putem folosi în orice scene noi, dacă există. Nu uitați să verificați coordonatele prefabricate la crearea și utilizarea, dacă dorim să facem o jucărie în două dimensiuni, atunci a treia axă trebuie setată la zero pentru toate obiectele care interacționează.

Acum să adăugăm o sursă de lumină, mergeți la meniul GameObject -> Create Other -> Directional light . Coordonatele sale nu contează, ne va lumina obiectele la fel de oriunde. Cu toate acestea, are sens să o ridicăm puțin deasupra scenei, astfel încât să nu interfereze cu selecția obiectelor, așa că îi vom seta coordonatele (0; 0; -10). Vorbind despre scenă, axa X va crește de la stânga la dreapta, Y - de jos în sus și Z - de la privitor adânc în ecran. Faceți clic pe săgețile din jurul cubului din colțul din dreapta sus al scenei și rotiți-l după cum este necesar.

Să adăugăm un cub la scenă, să-i denumim „Perete” și să-l glisăm în Assets. Un perete cubic singuratic lângă un kolobok sferic nu este foarte impresionant, nu-i așa? Comanda magică de la tastatură Ctrl+D ne va ajuta să ne duplicam peretele, iar cele trei câmpuri Scale din Inspector ne vor permite să-l extrudam la conținutul inimii noastre. Imaginați-vă ceva similar cu o cameră, ajutorul va fi Ctrl prins, care limitează mișcarea obiectelor la intervale individuale. În plus, tasta V vă va permite să trageți obiectul de vârfuri, iar acestea se vor lipi de vârfurile altor obiecte. Minunat, nu-i așa? Și încă mai scrii motorul tău? Oh bine.


Salvează scena, apasă pe Play și bucură-te de creația ta pentru câteva minute. Designerii buni de jocuri numesc această testare. Ceva lipsește, nu? Hmm. Poate dacă admir puțin mai mult, atunci...

Scripturi și fizică

Avem nevoie de mai multă mișcare și culoare! Deși, dacă copilăria ta dură a fost plină de jucării de beton, atunci poți lăsa totul așa cum este, dreptul tău.

Mai întâi trebuie să ne curățăm proiectul, dacă nu vrem să ne pierdem în mizeria prefabricatelor și scripturilor mai târziu. Să creăm un folder „Levels” în care vom stoca scene și un folder „Prefabs” pentru stocarea spațiilor libere. Sortați averea acumulată în dosare.

Acum este timpul pentru scenarii. Voi da exemple în C #, dar puteți scrie în JS sau Boo. De fapt, nu are sens să le alegi pe ultimele două, au fost adăugate la Unity mai degrabă ca un makeweight, sunt mai puțin susținute, se extind mai rău și este mai dificil să găsești exemple pentru ele. Mai ales groaznic este Boo, care este, în esență, un Python nepitonic. Urâciune. Vivați, pitoniștilor!

Creați un script C#, numiți-l „PlayerController”, trageți-l în prefabricatul Player și deschideți editorul preferat cu Visual Studio. Mai întâi trebuie să frecați resturile în exces, lăsați doar ceea ce aveți nevoie.

Utilizarea UnityEngine; Clasa publică PlayerController: MonoBehaviour ( void Update() ( ) )

Funcția Update este apelată în fiecare cadru, ceea ce este foarte convenabil pentru implementarea mișcării și vom plasa codul în interiorul acestuia. Apăsările butonului jucătorului pot fi recuperate utilizând clasa de intrare. Unity vine cu setări de intrare minunate, trebuie doar să scrieți Input.GetAxis ("Horizontal") și știm deja dacă jucătorul a apăsat săgeata dreapta sau stânga de pe tastatură. Dacă jucătorul are un gamepad conectat, atunci poate controla de la acesta, nici măcar nu trebuie să scriem cod suplimentar.

Direcția Var = nou Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);

Cu o linie atât de simplă, obținem informații despre acțiunile utilizatorului și creăm un vector de mișcare. Pentru a atașa vectorul undeva, avem nevoie de un Rigidbody . Selectați prefabricatul Player și adăugați componenta necesară prin meniul Component -> Physics -> Rigidbody. Acum ne putem referi la el în scenariul nostru.

Rigidbody.AddForce(direcție);

Mai întâi, să verificăm cum funcționează declanșatorii. Să scriem ceva în consola Unity. Funcția Debug.Log este foarte utilă, pe lângă text, poate imprima și diverse obiecte de joc.

Utilizarea UnityEngine; Buton de clasă publică: MonoBehaviour ( void OnTriggerEnter(Collider other) ( Debug.Log("Bună ziua"); ) void OnTriggerExit(Collider other) ( Debug.Log("Habr!"); ) )

Au aruncat un buton pe scenă. Testat? Mergi mai departe. Ar fi mai frumos dacă butonul nostru și-ar schimba culoarea atunci când este apăsat. Pentru culoare, trebuie să atașăm un material la buton. Creați -> Material, să-i spunem „Button Mat” și să-l punem pe buton. În proprietățile materialului, selectați verde pentru culoarea principală. Acum, în script, putem accesa culoarea materialului folosind renderer.material.color și o putem schimba după bunul plac. Să facem butonul să roșească când intră kolobok-ul nostru. Cumva a ieșit.

Utilizarea UnityEngine; Buton de clasă publică: MonoBehaviour ( void OnTriggerEnter(Collider other) ( renderer.material.color = new Color(1, 0, 0); ) void OnTriggerExit(Collider other) ( renderer.material.color = new Color(0, 1, 0); ) ) var direction = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0).normalized;

Și nu o poți repara. Caracteristicile motorului de joc pot face, de asemenea, parte din estetică. Quake 3 fără sărituri ar fi foarte diferit. Cunoașterea complexității mecanicii este cea care îi distinge pe începători de ucigașii de demoni zburători ai jucătorilor profesioniști. Dar subtilitățile nu ar trebui să dăuneze utilizării, motiv pentru care anterior am schimbat Dragul jucătorului Rigidbody la 4. O astfel de frecare face ca kolobokul să se oprească rapid, dar nu imediat. Și multă accelerație oferă un sentiment de control. În mod ideal, nici lansarea nu ar trebui să aibă loc imediat, acest lucru ar fi util pentru manevre precise. Aceste mici detalii mecanice afectează estetica generală.

Camera oferă jucătorului posibilitatea de a privi lumea jocului, așa că multe depind și de unghiul și comportamentul acestuia. Acum camera noastră atârnă ca un balon deasupra personajului principal, dar dacă este înclinată puțin, ne va fi mai ușor să percepem nivelul, va exista un sentiment de perspectivă. Sau putem, dimpotrivă, să schimbăm camera pe una ortogonală, atunci totul va fi absolut plat.


Aspectul jocului este, de asemenea, de mare importanță. Prin aparență, nu mă refer la numărul de poligoane dintr-un cadru. Amintiți-vă, jocurile sunt artă. Ce lucruri sunt importante în artele conexe? Stil, culoare, lumină, umbră. Încercați să găsiți o combinație interesantă de culori sau creați-vă propriul set. Uită-te la Proun, de exemplu. Acest joc este realizat în spiritul Suprematismului, atât de aproape de Habr. Puteți încerca să copiați unele scheme de culori, dar fără texturi și vrăjitorie cu shadere, nu se va dovedi atât de frumos. Cei nerăbdători s-au uitat deja la rezultatul încercării mele la link-urile de mai sus, iar cititorii atenți le pot revedea la sfârșitul articolului.

Esența acestei secțiuni este următoarea: chiar dacă faci doar un prototip al jocului, ar trebui să te gândești imediat ce vrei să-i spui viitorului jucător, ce sentimente să treci în el. Acest lucru este valabil pentru toate formele de artă. Realizarea unei schițe în stil minimal nu este deloc dificilă și va plăti în primul rând pentru dvs., vă va fi mai ușor să alegeți o altă direcție.

Concluzie

Cu ajutorul unor cuburi primitive și câteva picături de culoare, puteți realiza un prototip destul de tolerabil, care (după umila mea părere) va fi plăcut de jucat. Folosind Unity, acest lucru nu este deloc dificil de făcut, dar nu trebuie să uităm de ce aveți nevoie de toate acestea.

Legături

Versiune prototip din articol

În primul capitol veți găsi informații de bază despre descărcare și instalare Unitateși pregătirea primei scene a jocului nostru.

Configurarea mediului în Unity

Să începem cu cel mai simplu: descărcări și setări de unitate.

Descărcați cea mai recentă versiune de pe site-ul oficial sau torrent și rulați fișierul de configurare.

Pentru a edita codul în Unity (4.0.1 și o versiune ulterioară), se folosește editorul MonoDevelop. Dacă sunteți pe Windows, puteți (și recomand) să utilizați editorul alternativ Visual Studio 2013 Desktop (C#) pentru Windows și apoi să schimbați editorul implicit la Visual Studio în setările Unity.

Bine de știut: nu este posibil să utilizați depanatorul Visual Studio 2013 Express cu Unity. Trebuie să aveți versiunea Pro a Visual Studio și să cumpărați pluginul UnityVS. Cu versiunea Express, vei avea un editor de cod mai bun, dar lipsa unui depanator îi va anula toată bunătatea.

Mac OS X

O notă despre folderul Resurse: dacă ați mai lucrat cu Unity, știți că Resurse este un folder util și unic. Vă permite să încărcați un obiect sau un fișier în script (folosind clasa statică Resources). Vom avea nevoie de el la sfârșit (în capitolul din meniu). Pur și simplu, până îl adăugăm.

Prima noastră scenă de joc

Panou Ierarhie(Ierarhia) conține toate obiectele care sunt disponibile în scenă. Aceasta este ceea ce manipulezi atunci când începi jocul cu butonul „Joacă”.

Fiecare obiect de scenă este un obiect de joc pentru Unity. Puteți crea un obiect în scena principală sau într-un alt obiect de joc. De asemenea, puteți muta un obiect în orice moment pentru a-și schimba părintele.


După cum puteți vedea aici, avem 3 copii aici pentru obiectul Level.

LA Unitate poți crea un obiect gol și îl poți folosi ca „dosar” pentru alte obiecte de joc. Acest lucru va simplifica structura scenei tale.

Asigurați-vă că toate au coordonate (0, 0, 0) pentru a le putea găsi cu ușurință! Obiectele goale nu își folosesc în niciun fel coordonatele, dar afectează coordonatele relative ale copiilor lor. Nu vom vorbi despre acest subiect în acest tutorial, să reducem la zero coordonatele obiectelor noastre goale.

Umplerea scenei

În mod implicit, o scenă nouă este creată cu un obiect Camera principală. Trageți-l pe scenă.

Mai întâi, creați aceste obiecte goale:

Scripturi Vom adăuga scripturile noastre aici. Folosim acest obiect pentru a atașa scripturi care nu sunt legate de obiect, cum ar fi un script de manager de joc. Redare Aici vor merge camera și luminile noastre. Nivel

În Level, creați 3 obiecte goale:

  • 0 - fundal
  • 1-Mijloc
  • 2 - Primul plan

Salvați scena în folderul Scene. Numiți cum doriți, de exemplu Stage1 . Iată ce avem:

Sfat: În mod implicit, obiectul jocului este legat de poziția părintelui. Acest lucru are un efect secundar interesant atunci când utilizați obiectul camerei: dacă camera este un obiect copil, va urmări automat poziția părintelui. Dacă este obiectul rădăcină al scenei sau se află în interiorul unui obiect de joc gol, arată întotdeauna aceeași vedere. Cu toate acestea, dacă plasați camera pe un obiect de joc în mișcare, aceasta își va urmări mișcările în cadrul scenei. În acest caz, dorim o cameră fixă, așa că o plasăm într-un obiect Render gol. Dar amintiți-vă această proprietate a obiectului camerei, s-ar putea să o găsiți utilă. Vom acoperi acest subiect în detaliu în capitolul Parallax Scrolling.

Tocmai am creat structura de bază a jocului nostru. În pasul următor, vom începe să facem niște lucruri distractive: adăugați un fundal scenei și altele!

Adăugarea unui fundal scenei

Primul nostru fundal va fi static. Să folosim următoarea imagine:


Importați imaginea în folderul Texturi. Doar copiați fișierul în el sau trageți-l din explorator. Nu vă faceți griji pentru setările de import pentru moment.

Creați un nou obiect de joc Sprite în Unity pe scenă.

Ce este un sprite?

Practic, un sprite este o imagine 2D folosită într-un joc video. În acest caz, este un obiect Unity pentru crearea de jocuri 2D.

Adăugarea unei texturi Sprite

Unity poate seta automat fundalul pentru sprite-ul tău. Dacă nimic din toate acestea nu s-a întâmplat sau dacă doriți să schimbați textura, accesați fila inspector și selectați fundal : (fundal)


Trebuie să faceți clic pe pictograma rotundă mică din dreapta câmpului de introducere, astfel încât Select Sprite să apară în Inspector

Sprite-ul meu nu apare în caseta de dialog! Asigurați-vă că sunteți în filă active caseta de dialog „Select Sprite”. Dacă vedeți caseta de dialog goală, nu vă alarmați. Chestia este că pentru unele instalații ale Unity, chiar și cu un nou proiect 2D proaspăt, imaginile sunt importate ca „Texture” și nu „Sprite”. Pentru a remedia acest lucru, trebuie să selectați imaginea în panoul „Proiect”, iar în „Inspector”, modificați proprietatea „Tip de textură” în proprietatea „Sprite”:

Deci, am creat un sprite simplu reprezentând norii de pe cer. Să facem schimbări în scenă. În panou Ierarhie(Ierarhie) selectați Sprite nou. Redenumiți-l în Background1 sau ceva ușor de reținut. Redenumiți-l în Background1 sau ceva ușor de reținut. Apoi mutați obiectul în locul potrivit: Nivel -> 0 - Fundal . Schimbați coordonatele la (0, 0, 0).


Creați o copie a fundalului și plasați-o la (20, 0, 0) . Acest lucru ar trebui să meargă grozav cu prima parte.

bacsis: Puteți crea o copie a unui obiect cu cmd + D pe OS X sau ctrl + D pe Windows.

Straturi Sprite

Următoarea afirmație este evidentă, dar are câteva dezavantaje: afișăm o lume 2D. Aceasta înseamnă că toate imaginile sunt la aceeași adâncime, adică 0 . Și motorul tău grafic nu știe ce să afișeze mai întâi. Straturile sprite ne permit să desemnăm ce este în față și ce este în spate.

În Unity, putem schimba „Z”-ul elementelor noastre, ceea ce ne va permite să lucrăm cu straturi. Aceasta este ceea ce am făcut în acest tutorial înainte de a face upgrade la Unity 5, dar ne-a plăcut ideea de a folosi straturi cu sprite. Componenta ta Sprite Renderer există un câmp cu un nume Strat de sortare cu valoarea implicită. Dacă dați clic pe el, veți vedea:

Să adăugăm câteva straturi pentru nevoile noastre (folosește butonul +):

Adăugați un strat de fundal sprite-ului dvs. de fundal:

Setare Comandă în strat este o modalitate de a limita substraturile. Sprite-urile cu numere mai mici apar înaintea sprite-urilor cu numere mai mari.

Strat Mod implicit nu poate fi șters deoarece este un strat folosit de elemente 3D. Puteți avea obiecte 3D într-un joc 2D, în special particulele sunt tratate ca obiecte 3D de către Unity, așa că vor fi redate pe acel strat.

Adăugarea elementelor de fundal

De asemenea cunoscut ca si recuzită. Aceste elemente nu afectează în niciun fel jocul, dar vă permit să îmbunătățiți grafica jocului. Iată câteva sprite-uri simple pentru platformele zburătoare:


După cum puteți vedea, am plasat două platforme într-un singur fișier. Aceasta este o modalitate bună de a învăța cum să decupați sprite-uri cu instrumente noi. Unitate.

Obține două sprite-uri dintr-o singură imagine

Urmează următoarele instrucțiuni:

  1. Importați imagini în folderul „Texturi”.
  2. Selectați sprite-ul Platformă și accesați panoul Inspector
  3. Schimbați „Modul Sprite” în „Multiple”
  4. Faceți clic pe butonul Sprite Editor

Într-o fereastră nouă (Sprite Editor) puteți desena dreptunghiuri în jurul fiecărei platforme pentru a tăia textura în bucăți mai mici:


Butonul Slice din colțul din stânga sus vă va permite să faceți rapid și automat această muncă obositoare:

Unitate va găsi obiecte în interiorul imaginii și le va tăia automat. Puteți seta o valoare implicită pentru punctul pivot sau o dimensiune minimă pentru fiecare fragment. Pentru o imagine simplă fără artefacte, aceasta este remarcabil de eficient. Cu toate acestea, dacă utilizați acest instrument, aveți grijă și verificați rezultatul pentru a vă asigura că obțineți ceea ce doriți.

În această lecție, vom face această operație manual. Numiți platformele platform1 și platform2 . Acum, sub fișierul imagine, ar trebui să vedeți cele două sprite-uri separat:


Să le adăugăm la scenă. Pentru a face acest lucru, vom urma aceiași pași ca și pentru fundal: creați un nou sprite și selectați platform1 . Apoi repetăm ​​acești pași pentru platforma2. Pune-le în obiectul 1 - Middleground. Asigurați-vă că poziția lor Z este zero.


Prefabricate (prefabricate)


În acest fel, veți crea un prefabricat care se potrivește exact cu obiectul original al jocului. Veți vedea că GameObject pe care l-ați convertit în Prefab este un nou rând de butoane chiar sub numele său:


O notă despre butoanele „Prefabricat”: atunci când modificați obiectul jocului mai târziu, puteți utiliza butonul „Aplicare” pentru a aplica acele modificări la prefabricat sau butonul „Revenire” pentru a anula toate modificările aduse proprietăților obiectului de joc din prefabricat . Butonul „Selectați” va muta proprietățile selectate în materialul prefabricat din fereastra proiectului (vor fi evidențiate).

Crearea de prefabricate cu obiecte platformă le va face mai ușor de reutilizat. Doar trageți și plasați prefabricat la scenă pentru a adăuga o copie. Încercați să adăugați o altă platformă în același mod.

Acum puteți adăuga mai multe platforme care își schimbă coordonatele, dimensiunile și planurile (le puteți pune în fundal sau în prim-plan, doar setați coordonata Z a platformei la 0).

În această etapă, totul pare puțin brut, dar în următoarele două capitole vom adăuga paralax scrolling, iar scena va prinde viață în fața ochilor noștri.

Straturi

Înainte de a continua, ne vom modifica straturile pentru a evita orice probleme cu ordinea lor de afișare. Pentru a face acest lucru, schimbați pur și simplu poziția obiectelor de joc de-a lungul axei Z din filă Ierarhie(Ierarhie) după cum urmează:

Când treceți de la 2D la 3D, veți vedea clar straturile în fereastra „Scenă”:


Când faceți clic pe obiectul de joc Camera principală, veți vedea că steagul de proiecție este setat la Ortografic . Această setare permite camerei să reda un joc 2D fără a lua în considerare proprietățile 3D ale obiectelor. Rețineți că, chiar dacă lucrați cu obiecte 2D, Unity încă folosește motorul său 3D pentru a reda scena. Figura de mai sus demonstrează clar acest lucru.

În următoarea lecție:

Tocmai ați învățat cum să creați un fundal static simplu și cum să îl afișați corect. Apoi te-am învățat cum să faci sprite-uri simple. În capitolul următor, vom învăța cum să adăugați un jucător și inamicii săi.

CATEGORII

ARTICOLE POPULARE

2022 "kingad.ru" - examinarea cu ultrasunete a organelor umane