Ghid de Programare în Jocuri - Sfaturi, Instrumente și Cariere

de Connor Taylor

Un programator de jocuri este persoana care ia viziunea unui designer și o face să funcționeze efectiv în motorul de joc pe care îl folosim. Lucrez în echipa de programare a jocurilor mobile la Kwalee, așa că pentru noi este în principal Unity. De exemplu, dacă designerul dorește ca un zar să se rostogolească într-un anumit fel, voi scrie scriptul pentru a gestiona logica. Colaborăm și cu artiștii de jocuri pentru a ne asigura că jocurile noastre atât arată uimitor, cât și oferă o performanță excelentă pe dispozitive.

În acest blog, mă voi baza pe cei cinci ani de lucru la Kwalee pentru a împărtăși informații și sfaturi esențiale despre a fi programator de jocuri. Voi discuta despre unele dintre limbajele, instrumentele și principiile pe care le folosim, sfaturile mele de carieră, precum și sfaturi pentru începători și avansați.

Ce Face Un Programator De Jocuri?

Scriem codul și ajutăm jocul să devină o realitate. În timp ce designerii de jocuri creează conceptele și artiștii de jocuri creează activele, un programator va crea experiența funcțională, jucabilă. Creăm și optimizăm performanța jocului și rezolvăm orice probleme identificate.

Ne asigurăm că un joc se simte grozav și rulează cu o performanță ridicată. Pentru a face acest lucru, trebuie să ne asigurăm că codul în sine este curat și extensibil, ceea ce este mai greu decât credeți. Folosim standarde de codare pentru a menține o calitate constantă în toate echipele noastre - un document care poate conține standarde de denumire, formatare etc. Cu toate acestea, uneori lucrurile nu sunt întotdeauna atât de simple și uneori trebuie să gândești creativ pentru a finaliza lucrurile la timp.

Responsabilitățile noastre includ, de asemenea, asigurarea că jocul funcționează bine pe hardware-ul utilizatorului final. De exemplu, în jocurile noastre mobile, trebuie să evităm ca dispozitivele mai vechi să se încălzească prea tare, așa că lucrăm cu artiștii pentru a optimiza numărul apelurilor de redare. Un apel de redare este o comandă trimisă de la Unitatea Centrală de Procesare (CPU) la Unitatea de Procesare Grafică (GPU) pentru a reda un obiect pe ecran - spune GPU-ului să deseneze elemente grafice precum texturi, rețele sau shader-e. Trebuie să minimizăm numărul acestor apeluri de redare în jocul nostru, deoarece prea multe pot cauza probleme precum scăderi de cadru sau bâlbâieli. Există multe modalități de a rezolva acest lucru, dar lucruri precum gruparea mai multor obiecte într-un singur apel de redare sau reducerea numărului de texturi și materiale unice pot ajuta. Acest lucru este deosebit de important pentru mobil, deoarece există atât de multe dispozitive diferite pe piață, toate cu specificații tehnice variate.

Care Sunt Principalele Limbaje De Programare Pentru Jocuri?

Cea mai mare parte a timpului nostru ca programatori de jocuri zi de zi este petrecută în scriptare într-unul dintr-o gamă de limbaje de programare - suntem dezvoltatori software de un alt tip până la urmă. Există multe limbaje din care să alegi. Unele par mai ușoare decât altele, dar odată ce ai învățat și stăpânit unul, cu siguranță poți învăța altele - principala provocare este să faci primul pas.

Iată o introducere în unele dintre cele mai populare limbaje de programare pentru jocuri:

  • C# - un limbaj de programare versatil și popular utilizat pe scară largă în dezvoltarea de jocuri. Este unul dintre cele mai ușor de asimilat dacă ești începător. Una dintre cele mai bune caracteristici ale sale este colectarea automată a gunoiului - astfel gestionează alocarea memoriei pentru tine - foarte util pentru programatori ocupați ca noi.
  • C++ - în contrast, acesta este un limbaj neadministrat, așa că trebuie să aloci și să dezaloci manual memoria, ceea ce îl face un pas mai mare în complexitate și dificultate. Totuși, permite viteză, control și performanță mai mari.
  • Java - la fel ca C#, Java are propria sa gestionare a memoriei și colectare a gunoiului, ceea ce face mai ușor pentru dezvoltatori să gestioneze memoria fără a se împotmoli în detalii. Este utilizat pe scară largă în dezvoltarea web și aplicațiile pentru întreprinderi și, deși poate (probabil) să nu fie prima alegere pentru dezvoltarea de jocuri, rămâne o opțiune solidă pentru crearea de aplicații scalabile și eficiente.
  • Swift - acesta este limbajul nativ al Apple pentru construirea aplicațiilor și jocurilor pentru iOS și macOS. Totuși, asta înseamnă că este mai puțin util pentru dezvoltarea cross-platformă - deoarece vizăm întotdeauna să publicăm jocurile noastre mobile atât pe Android, cât și pe iOS.

Cum Devii Programator De Jocuri?

Există o serie de modalități diferite prin care poți deveni programator de jocuri. Drumul meu este destul de convențional - am studiat Designul și Programarea Jocurilor la Universitatea din Staffordshire. Inițial, am crezut că voi intra în arta jocurilor - am fost mereu foarte pasionat de artă ca și copil, plus că mi-au plăcut foarte mult modulele de artă la universitate, dar în timp ce eram acolo am descoperit că îmi place cu adevărat să creez gameplay. Mi-ar putea lua câteva zile pentru a crea un singur model cu detalii înalte, dar aș putea face o rață să zboare și să explodeze în jumătate din timp. Prototiparea îmi permite să văd rezultatul rapid chiar în fața mea.

Totuși, frumusețea programării jocurilor este că este accesibilă pentru majoritatea oamenilor, chiar dacă nu urmezi un traseu tradițional. Am avut prieteni la facultate în vârstă de peste 50 de ani - nu este niciodată prea târziu pentru a experimenta ceva nou. La Kwalee, am angajat chiar și pe cineva care a învățat în principal prin videoclipuri YouTube și a creat un joc doar de distracție. Există atât de multe oportunități pentru talentul proaspăt și dornic astăzi. Privind la portofoliile noilor studenți, au acumulat atât de multe. Vedem talent fantastic venind și este un moment interesant în industrie.

O întrebare pe care probabil vrei să o adresezi - va afecta AI-ul programarea ca și carieră? Poate fi extrem de util și devine din ce în ce mai bun. Perfect dacă ai nevoie de ceva explicat sau ești blocat într-o problemă. Îl poți folosi pentru a rezolva erori sau pentru a refactoriza („curăța”) codul tău prin lipirea acestuia în cel mai recent ChatGPT. Totuși, când privim portofoliile, dorim să vedem lucrările pe care le-ai făcut și de care ești mândru, AI-ul este bine să fie folosit, dar încearcă să nu-l folosești ca substitut pentru abilitățile tale.

Cum Arată O Zi Obișnuită Din Viața Unui Programator De Jocuri?

Să-ți dau un exemplu bazat pe viața mea. Sunt Lead Programmer (îi spun jobul meu de vis), așa că este o combinație excelentă de lucru direct cu codul și de gestionare a altor programatori!

Ziua obișnuită în lumea mea începe cu verificarea oricăror erori sau blocante pentru echipa QA. Verific cu echipa pentru a vedea dacă cineva are nevoie de mine pentru a debloca munca lor. Apoi muzica porneste și lista de sarcini se deschide. Vom împărtăși videoclipuri cu progresul prin Slack pentru a obține un feedback rapid, în timp ce sărim între 2-3 proiecte pentru a sprijini membrii echipei mele. De asemenea, petrecem mult timp investind în sisteme partajate pentru a face programarea noastră mai eficientă - totul trebuie să fie menținut, actualizat și reparat în mod regulat pentru a menține lucrurile funcționând bine.

Sfaturi Pentru Programarea Jocurilor Pentru îNcepători

Dacă abia începi și aspiri să devii un programator cu drepturi depline, iată sfaturile mele pentru începători!

  • Este atât de mult de învățat online, pe YouTube și există atât de multe exemple de jocuri încât nu ai nicio scuză să nu înveți! Motoarele populare sunt gratuite și sunt o mulțime de distracție de utilizat!
  • La capătul complet opus al spectrului, poate are 30 de ani, dar ar trebui să încerci să citești influenta carte "Design Patterns: Elements of Reusable Object-Oriented Software" de către așa-numiții autori Gang of Four, care a introdus unele dintre temeliile tiparelor de jocuri pe care le folosim zilnic în programare.
  • Poți avea propriile tale idei, dar asigură-te că începi simplu pentru a avea o bază solidă în fundamente.
  • Când nu ești legat de un proiect comercial, poți scrie cât de mult cod dorești, așa că distrează-te creând lucruri nebunești.
  • Crearea unui portofoliu este cu adevărat cheie (și este modul în care mi-am obținut jobul). Dar fii foarte atent să nu încarci doar aceleași proiecte plictisitoare din facultate, deoarece vom vedea o mulțime de aplicații cu acestea. Chiar și petrecerea unei zile în plus pentru a redesena și adăuga mai multe caracteristici te va ajuta să te evidențiezi.
  • Crearea propriei tale jocuri reale este, de asemenea, o idee inteligentă - este foarte ieftin să publici un joc pe Google Play, așa că creează ceva care să poți arăta recrutorilor/editorilor/familiei/animalelor de companie de pe telefonul tău. Poate chiar să-ți aducă câteva mii de dolari pe an până când ocupi o poziție exclusivă cu normă întreagă, acesta este un bonus! Sau ar putea să te atragă la realizarea propriului joc pe deplin și să te asociezi cu un editor.
  • Nu învăța doar despre programare - învață despre artă, design, QA și alte discipline cu care vei interacționa. De exemplu, merită să înțelegi metodele QA deoarece poți cădea în capcana de a presupune că ceva funcționează, dar trebuie să-l joci ca utilizator, nu ca cineva care a scris codul și are o viziune definită despre cum ar trebui să fie jucat. Fii distructiv, încearcă lucrurile aleatorii pe care oamenii ar putea să le facă, apasă butoanele aleatoare și alte comportamente bizare.

Sfaturi Pentru Programatori Avansați

Iată câteva dintre sfaturile care m-au ajutat să trec de la junior, la programator, la senior și la lider.

  • Poți beneficia întotdeauna de mai multă învățare și amintește-ți că fără greșeli nu putem învăța!
  • Dacă ești cu adevărat pasionat de ceva, poți deveni mai specializat. De exemplu, dacă îți place să te joci cu shader-e și conducte de redare, învață mai multe despre cum să folosești shader-e grafice pentru a-ți extinde capacitatea de a reda efecte vizuale complexe și să folosești conducte de redare pentru a optimiza performanța sau pentru a face efecte uimitoare.
  • Ai putea face ceva cu adevărat cool, precum un sistem complex, să-l încarci într-un magazin de active pentru a-l demonstra dacă contractul tău permite și să-ți arăți munca avansată. Ai putea dezvolta un punct forte ca un tip anume de programator, cum ar fi un programator de gameplay, de servere, de grafică sau multiplayer.
  • Alternativ, poți merge pe traseul de management ca mine și să îndrumi oameni. Tactica mea pentru a-mi dezvolta cariera a fost să absorb noi responsabilități. Mai întâi, am început să îmbunătățesc lucruri mai mici, adică schimbări minore de flux de lucru. Apoi, am făcut procesele mai ușoare prin utilizarea șabloanelor pentru a economisi timp când creăm noi proiecte. Apoi am avut un gust de mentorat și management, ceea ce m-a ajutat să câștig mai multă încredere și acum particip la evaluări între colegi, evaluări de cod, să găzduiesc ateliere și să conduc echipe pe proiecte.

Indiferent dacă lucrezi ca parte dintr-o echipă sau ca manager, este la fel de important să oferi laude precum și să oferi critici constructive. Când revezi codul, este bine să stimulezi oamenii!

Care Sunt Principiile Cheie Ale Programării Jocurilor?

Există câteva subiecte cheie care pur și simplu trebuie să fie incluse într-un blog care acoperă programarea jocurilor. Acestea sunt unele dintre cele mai importante lucruri pe care le considerăm.

Controlul sursei/ Versiune Control

La fel cum ai puncte de salvare în jocuri, există puncte de salvare în dezvoltarea proiectelor. Acționează ca depozite generale pentru proiect și înseamnă că trei sau patru programatori pot lucra simultan la un sistem, crea o schimbare și o pot împinge pe server. Ne permite să urmărim acele schimbări și să revenim ușor dacă ceva s-ar defecta. Dacă doi dezvoltatori lucrează la același fișier, acel fișier va deveni parte a unei îmbinări, dacă există conflicte, putem atunci să le rezolvăm manual sau să alegem schimbările unui individ pentru a aplica. Acest lucru se va întâmpla mult folosind Prefab-uri sau Scene în Unity.

Acești termeni uneori se suprapun, dar în general, controlul sursei se concentrează pe cod, iar controlul versiunii include toate fișierele de proiect, activele și documentația.

Când începi să folosești controlul sursei, poate părea puțin înfricoșător la început, poate părea foarte copleșitor și când vine vorba de conflicte te poți găsi nesigur cu privire la ce să faci. Dar natura controlului versiunii te ajută să salvezi momente în timp, așa că dacă actualizezi frecvent și folosești mesaje de commit detaliate, este incredibil de util și sigur. Poți reveni la mai multe puncte, să ai mai multe ramuri etc. Gândește-te la asta ca la o plasă de siguranță pentru dezvoltatori, astfel încât să putem evita o versiune a lui Pixar's Toy Story 2 - accidental ștearsă și apoi recuperată de pe un hard disk acasă la Directorul Tehnic al acestora, în schimb toate acestea sunt în siguranță pe server.

Programare Orientată pe Obiecte

Acesta este tipul de programare pe care îl folosim în principal la Kwalee. Folosește obiecte pentru a reprezenta lucruri reale sau concepte abstracte și își propune să organizeze baza de cod folosind principii care oglindesc modul în care vedem și interacționăm cu obiectele în lumea reală. Ajută la menținerea sistemelor complexe prin organizarea codului în clase distincte pe care le poți reutiliza, scala și întreține mai ușor.

Desigur, există dezbatere asupra faptului că este bun sau nu. Deși nu este cel mai performant, funcționează bine. La fel ca și limbajele, fiecare are propriile avantaje și dezavantaje și ar trebui să înveți unul pentru a începe și a înțelege cum funcționează limbajele și compilatoarele (traducători ai codului uman în cod machine). De asemenea, poți lua în considerare alte tipuri, cum ar fi programarea funcțională care o tratează mai mult ca matematică, programarea logică care folosește fapte și reguli sau programarea procedurală care folosește date pas-cu-pas.

Tipare de Programare

Acestea sunt lucruri minunate - soluții reutilizabile care te pot ajuta cu probleme comune pe care le vei întâmpina în designul software-ului tău. Îți oferă un șablon pentru a rezolva o problemă, astfel încât să nu reinventezi roata de fiecare dată și să poți urma soluții dovedite.

De exemplu, tiparul Singleton te ajută să te asiguri că există o singură instanță a unei clase, cum ar fi un manager de setări de joc, pe întregul joc și îți oferă un punct de acces global la acesta. Codul pentru acest tipar înseamnă că doar o instanță a clasei SettingsManager există astfel încât nu trebuie să o recreezi sau să o duplici de fiecare dată când ai nevoie de ea.

Există, de asemenea, tiparul Factory care te poate ajuta să creezi obiecte într-un mod mai organizat și flexibil. Poți defini metode pentru generarea unor tipuri specifice de obiecte, cum ar fi personaje sau obiecte, bazate pe parametri de intrare, permițându-ți să creezi mai multe obiecte de un tip similar fără a începe de la zero de fiecare dată.

Sper că acest blog ți-a oferit o încercare de programare în jocuri, fie că ești nou în acest domeniu, fie un programator experimentat! Dacă ești o persoană muncitoare, dar care apreciază distracția, ai putea fi potrivit pentru echipa noastră, așa că află mai multe despre carierele la Kwalee. În caz contrar, poți afla despre jocurile mobile sau publicarea și poți afla mai multe despre ce lansăm ca dezvoltator și editor.

Despre autor:

Connor Taylor, Programator Principal de Jocuri la Kwalee, se dedică creării de jocuri și dezvoltării unei echipe care susține și se distrează. Cu peste 5 ani de experiență, a creat hituri precum Jetpack Jump și îndrumă pe alții în dezvoltarea Unity.

Distribuie acest articol: