Crearea unui joc de unitate de către o mică echipă de caracteristici tehnologice

copii de dezvoltare puzzle mobil Ori aventura Alex Galkin a scris coloana CPU pe care ar trebui să acorde o atenție la dezvoltarea de jocuri mobile de pe platforma Unității: cum de a alege la active din Magazinul Asset, în care serviciul pentru a stoca datele de progres ale utilizatorilor și în cazul în care pentru a obține sunete pentru jocuri.

Pentru a face un joc bun, aveți nevoie de o idee bună. Dar, chiar dacă aveți o idee, nu este ușor să creați un joc decent pe baza sa. În plus față de norocul banal, sunt multe lucruri pe care trebuie să le rezolvi. Un număr infinit de decizii trebuie să se facă într-un timp foarte modest. La urma urmei, timpul este bani, iar bugetul proiectului tinde să dispară înainte ca ceva demn de demonstrație să fie făcut (să nu mai vorbim de eliberare).

Această poveste este despre modul în care echipa noastră mică indie a creat jocul Fold the Adventure ("Puneți o aventură") pe baza ideii originale. De când jocul este lansat, putem respira și putem arunca o privire asupra celor trei luni petrecute în dezvoltare. În ciuda faptului că are mulți ani de experiență în industria jocurilor de noroc, crearea Fold Aventurii ne-a făcut destul de greu să transpirăm datorită transformărilor imprevizibile ale evenimentelor și a resurselor foarte limitate. Bine ați venit în aventura noastră!

Selectarea motorului: Unitate

Pentru a vă spune adevărul, nu a fost necesar să alegem motorul. Am luat imediat Unitatea și nu l-am regretat. Sarcina noastră principală a fost să creăm un joc relativ mic și să îl lansăm pe un număr maxim de platforme. În același timp, am vrut să evit afacerea cu programare pe Obiectiv C și Java. Cu Unitatea am reușit. Și deși totul nu era atât de simplu și neted, așa cum se presupunea, noi eram mulțumiți de motor.

Iată câteva dintre recomandările pe care le-am dezvoltat după o utilizare destul de lungă a Unității (nu se limitează la crearea Fold aventurii):

Activ: creați sau cumpărați

Dacă aveți o echipă mică, cu un timp și buget foarte redus, atunci crearea unui număr mare de aspecte legate de jocurile de calitate de la zero este aproape imposibilă. Este necesar să se liniștească ambițiile grandioase și să se minimizeze numărul necesar. Dar chiar și sub condiția de minimizare, trebuie să lăsați ceva pe care jucătorul ar fi încântat să îl vadă.

Dacă jocul de asalt poate fi făcut de către echipă - o problemă mai mică (cel mai probabil). Dar există încă o fază de prototipuri și, de asemenea, are nevoie de active, care sunt foarte probabil să fie aruncate. Prin urmare, aproape fiecare echipa are nevoie de active, pe care nu le poate sau nu vrea sa le faca. Întrebarea este, unde să le obținem.

Primul și cel mai evident răspuns pentru noi, ca și pentru dezvoltatorii Unity, a fost Unitatea Assets Store. Indiferent cât de tentantă este această oportunitate, aceasta implică o serie de dificultăți:

  • Activele din Magazinul Units Assets sunt disponibile tuturor, fără excepție. Cu toate acestea, nimeni nu dorește ca jocul lor să fie ca ceilalți. Cel puțin nu am vrut asta.
  • Este aproape imposibil să cumpărați un pachet de măgari care să satisfacă toate necesitățile proiectului și există o problemă de compatibilitate stilistică. Pentru Fold the Adventure, am cumpărat câteva pachete, dintre care mai puțin de jumătate au fost folosite.
  • În ciuda faptului că numărul total de active din unitatea de depozitare a unităților este destul de mare, este foarte dificil să găsim printre ele ceva potrivit pentru nevoile specifice. În același timp, calitatea de multe ori lasă mult de dorit. Am petrecut ore întregi de căutare, fără a putea întotdeauna să evaluăm calitatea ambalajului fără a-l cumpăra.

A doua opțiune a fost externalizarea activelor. Desigur, acest lucru necesită mai mult timp și mai mulți bani decât să cumpere ceva de la Unity Assets Store. Cu toate acestea, cu un scenariu de succes, activele rezultate sunt unice și mai calitative.

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

Iată câteva reguli simple pe care le-am găsit în căutarea și cumpărarea de active în Unitatea de unități de active

Muzica și sunetele merită o atenție deosebită. Ele sunt rareori create de echipa indie (dacă aveți un compozitor, atunci sunteți fie foarte norocoși, fie nu mai sunteți indie). Din fericire, există un număr mare de servicii care oferă muzică și sunete fără redevență, inclusiv Unity Assets Store. Și este destul de ieftin.

Nu este suficient să cumpărați muzică și sunete. Este necesar să vă asigurați că acestea au sunat corect în joc și nu irită auzul. Dacă sunteți încrezători în abilitățile voastre, atunci puteți încerca să o faceți singur. Ne-am întors pentru ajutor într-un studio specializat în acționarea vocii. Rezultatul a fost mult mai bun decât ceea ce am putut face noi înșine și merită banii noștri.

Unde se stochează datele: Parsează

Chiar dacă, la fel ca noi, creând un joc single player, va trebui în continuare un loc pentru a stoca date despre progresul actual al statisticilor jucătorilor din acțiunile sale efectuat achiziții și alte informații. Cea mai simplă soluție este folosirea clasei Unity PlayerPrefs pentru aceasta. Cu toate acestea, stochează datele la nivel local și, în mod evident, nu este potrivit pentru articole delicate, cum ar fi achizițiile în joc.

Unul dintre motivele pentru care am ales Parsé a fost integrarea sa cu Facebook (prima versiune a 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ă frumoasă a companiei Parse este politica sa de stabilire a prețurilor. La început pare puțin ciudat, dar după reflecție și calcule, se dovedește a fi mai mult decât de succes. În esență, sunteți limitat de numărul de solicitări pe secundă. Vestea bună este că 30 de solicitări pe secundă sunt oferite gratuit. Se pare că acest lucru este destul de puțin, dar, de fapt, acest lucru este suficient pentru a sprijini mii de utilizatori. Cu condiția să utilizați în mod rezonabil aceste solicitări.

În Parse, faceți totul prin interogări. Pentru a obține și a modifica câmpurile de date, creați o relație între tabele, creați un eșantion - aveți nevoie doar de o interogare pentru tot. La prima vedere, numărul de cereri ar trebui să fie destul de mare, dar, de fapt, majoritatea operațiunilor elementare pot fi combinate într-o singură interogare utilizând metoda ParseObject.SaveAllAsync. În plus, Parse aruncă o excepție dacă limita cererilor pe secundă este depășită. Dar nimic nu te împiedică să aștepți un timp și să executați din nou cererea. Și, deși jocul poate părea în acest caz utilizatorului "agățat", această problemă este ușor de gestionat prin efectuarea de mici modificări la interfața cu utilizatorul și logica salvării și citirii datelor.

Singurul lucru pe care Parse nu ar trebui să îl folosească este crearea unui server de jocuri. Chiar dacă dezvoltați un joc pas cu pas, scopul lui Parse este radical diferit. Există și alte soluții mult mai potrivite pentru aceste scopuri.

Utilizarea Parsei în cadrul Unității nu este deosebit de dificilă și bine documentată. De fapt, trebuie să descărcați Parse SDK, să vă configurați jocul pe serverul Parse și în proiectul Unity și să îl programați puțin. O nuanță evidentă: nu puteți utiliza Parse dacă dispozitivul pe care este instalat jocul dvs. nu are acces la Internet.

Dacă este nevoie să mențineți modul offline și să actualizați datele din Parse cu o conexiune de rețea, va trebui să scrieți un mic sistem separat pentru aceasta. Am folosit clasa PlayerPrefs pentru asta. Sistemul salvează datele local și îl încarcă la Parse de îndată ce detectează o conexiune la Internet.

Platforme staționare împotriva mobilului: compromisuri

În ciuda convergenței treptate în ultimii ani, platformele staționare și mobile sunt încă foarte diferite unele de altele. Acest lucru devine evident atunci când încercăm să facem ca shaderele "frumoase" să fie acceptabile (să nu mai vorbim de a le face să funcționeze repede) pe toate dispozitivele pe care jocul ar trebui să ruleze. Unitatea facilitează în mod semnificativ acest proces, dar, din păcate, nu rezolvă toate problemele.

Există o sumă imensă de articole dedicate optimizării jocurilor Unity pentru platformele mobile, deci aici vom vorbi puțin despre acest subiect.

Iată câteva recomandări:

  • Dacă intenționați să lansați pe platforme mobile și să folosiți umbre, limitați modul la iluminarea înainte. În ciuda coptării iluminării și a reducerii numărului de obiecte care au atras umbre, nu am reușit să obținem performanțe acceptabile în modul de iluminare amânată. Poate că nu am încercat destul de mult, dar forumurile Unității, în cea mai mare parte, sunt în solidaritate cu noi în această chestiune.
  • Minimizați numărul de apeluri de remiză. Un număr mare de poligoane în modele nu va afecta atât performanța cât și apelurile suplimentare. Am planificat o mulțime de optimizări, menite să reducă numărul de apeluri de remiză, pentru a susține mai bine vechile modele de dispozitive mobile, dar, din nefericire, nu a reușit să o facă în termenele fixe.
  • Nu abuzați texturile î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 locul unui universal - din acest motiv.

Pe lângă diferențele dintre performanțele și limitările hardware, există o altă diferență importantă între platformele fixe și cele mobile. Și această diferență este modul de intrare. Jocul, creat pentru control folosind tastatura și mouse-ul, nu este bine tolerat de multitouch și accelerometru. Am văzut acest lucru prin experiența noastră amară. Mai întâi, în Unitate, procesarea mouse-ului și a multitouch-ului este împărțită. Prin urmare, a fost necesar să se creeze un sistem care să unifice acest aspect. În acest scop, am folosit un sistem de intrare de la NGUI. care, după îmbunătățiri minore, sa arătat foarte bine. De asemenea, ne-a permis rezolvarea problemei distribuției intrărilor între interfața utilizator și controlul jocului, ceea ce ne-a dat probleme în acel moment.

Interfața de utilizator în ansamblu a necesitat o serie de modificări pentru suportul corect al dispozitivelor mobile. De exemplu, în loc de a derula rotița mouse-ului și de a ține apăsat butoanele, trebuiau introduse gesturi multitouch. Unele modificări ar putea fi simplificate, utilizând soluții gata făcute de la Unity Assets Store. Dar în cazul nostru a fost o simplă apăsare, deci am decis să o scriem într-o oră de la zero, în loc să petrecem zile conectând și depanând un sistem care "face totul și chiar mai mult".

Cel mai mare număr de probleme a fost cauzat de gestionarea în joc. Am început cu un set tradițional de șoarece ASWD + pentru a controla caracterul și camera, planificând să folosiți un joystick de pe ecranul dispozitivelor mobile. Dar totul sa dovedit a fi cel puțin așa cum ne-am așteptat: jocul a devenit aproape incontrolabil. A trebuit să schimbăm urgent gestionarea în joc, făcând schimbări chiar și în mecanica jocurilor. Prin încercări și erori, ne-am stabilit în managementul point-n-click, care este perceput intuitiv pe dispozitivele mobile.

Localizare: cu atât mai simplu, cu atât mai bine

Dacă doriți să obțineți succesul jocului la scară globală, atunci, fără îndoială, trebuie să fie localizat. Și localizarea este o altă parte a dezvoltării pe care o echipă indie nu o poate face niciodată singură. Aceasta înseamnă doar un singur lucru: trebuie să plătiți pentru localizare.

Tot ceea ce are legătură cu limba umană trebuie localizat. Aceasta este textele, vorbirea, texturile - toate acestea trebuie să fie localizate. Un astfel de proces poate deveni foarte rapid foarte consumator de timp și costisitor. Prin urmare, este extrem de important să minimalizați conținutul localizat.

Texturile ar trebui evitate și, de exemplu, utilizați câmpurile de text NGUI. Dacă jocul are nevoie de vorbire, atunci, cel mai probabil, vor fi necesare subtitrări, deoarece localizarea vorbirii nu este doar o plăcere scumpă, ci și exigentă în ceea ce privește locul ocupat de joc.

Dar minimizarea conținutului localizat este doar începutul. Următoarea etapă este pregătirea jocului pentru localizare. Vestea proastă este că Unitatea (la momentul acestei scrieri) nu are mecanisme construite pentru aceste scopuri. Cu toate că există un număr de soluții specializate în Unitatea Assets Store (de exemplu, l2 Localizare), am decis să folosim sistemul de localizare care face parte din NGUI.

Sistemul de localizare NGUI este simplu și simplu de utilizat. Acesta este construit pe baza 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 liniilor la traducere (în acest scop există un număr mare de servicii specializate) și inserarea ulterioară a versiunii traduse.

Am folosit fișierele Google Docs pentru a stoca fișierul de localizare. În această versiune, este ușor accesibil tuturor membrilor echipei, poate fi actualizat rapid și descărcat în format CSV. În plus, am făcut acest fișier disponibil unui număr de prieteni care vorbesc alte limbi. Deci avem o parte din transferuri gratis.

Din nefericire, sistemul de localizare NGUI este foarte limitat în ceea ce privește capacitățile sale și nu poate fi utilizat în jocuri cu conținut de conținut localizat. De exemplu, nu permite modificarea fontului câmpului de text și această posibilitate este necesară atunci când localizați în limbi precum japoneză. În acest sens, am extins funcționalitatea clasei NGUI UILocalize, adăugând posibilitatea de a schimba fontul și de a schimba poziția câmpurilor de text.

concluzie

După ce se face totul, jocul trebuie să fie testat temeinic (merită să o faci și în mod repetat în procesul de dezvoltare). Acest lucru ar trebui să se ocupe de numărul maxim de persoane pe numărul maxim de dispozitive. Nimic nu strică un joc bun ca o eroare ratată. Este necesar să ascultați plângerile jucătorilor. Întrucât aceste reclamații se vor transforma în clienți nesatisfăcuți imediat după lansarea jocului pe piață. Și exact asta nu vrea nimeni.

Prin testarea constantă a jocului nostru pe tot parcursul procesului de dezvoltare, am identificat și corectat mai mult de o sută de bug-uri diferite. În același timp, jocul nostru nu a fost atât de complicat și de mare, dar software-ul nu se întâmplă fără erori. În plus, pe baza sugestiilor și reclamațiile de testere, am făcut o serie de modificări la joc, inclusiv schimbarea mecanica jocului de bază, structura nivelurilor, mărimea și poziția elementelor interfeței cu utilizatorul, de control în joc.

Această poveste, împreună cu jocul lansat, completează trei luni de muncă grea și dureroasă. Și, în ciuda faptului că ne-am confruntat cu multe dificultăți, procesul de a dezvolta Fold the Adventure a fost foarte interesant. Sperăm că jocul pe care l-am creat, precum și experiența pe care am câștigat-o, vor face lumea puțin mai bună. Mult noroc în crearea jocurilor tale!

Articole similare