Guida alla Programmazione di Giochi - Consigli, Strumenti e Carriere

da Connor Taylor

Un programmatore di giochi è la persona che prende la visione di un designer e la fa funzionare effettivamente nel motore di gioco che usiamo. Lavoro nel team di programmazione di giochi mobili di Kwalee, quindi per noi è principalmente Unity. Ad esempio, se il designer vuole che un dado rotoli in un certo modo, scriverò lo script per gestire la logica. Collaboriamo anche con artisti di giochi per garantire che i nostri giochi siano sia visivamente eccezionali che performanti.

In questo blog attingerò dai miei cinque anni lavorando a Kwalee per condividere preziose intuizioni e consigli sull'essere un programmatore di giochi. Ti guiderò attraverso alcuni dei linguaggi, strumenti e principi che usiamo, i miei suggerimenti di carriera, così come consigli per principianti e avanzati.

Cosa Fa Un Programmatore Di Giochi?

Scriviamo il codice e aiutiamo il gioco a diventare una realtà. Mentre i game designer creano i concetti e gli artisti i contenuti, un programmatore crea l'esperienza funzionale e giocabile. Creiamo e ottimizziamo le prestazioni del gioco e risolviamo eventuali problemi che vengono identificati.

Ci assicuriamo che un gioco sia coinvolgente e funzioni con alte prestazioni. Per fare ciò, dobbiamo garantire che il codice sia pulito ed espandibile, cosa più difficile di quanto si pensi. Usiamo standard di codifica per mantenere una qualità coerente in tutti i nostri team - un documento che può contenere standard di nomenclatura, formattazione ecc. Tuttavia, le cose non sono sempre così semplici e di tanto in tanto può essere necessario pensare in modo creativo per portare a termine le cose in tempo.

Le nostre responsabilità includono anche assicurarsi che il gioco funzioni bene sull'hardware dell'utente finale. Ad esempio, nei nostri giochi mobili, dobbiamo evitare che i dispositivi più vecchi si surriscaldino, quindi lavoriamo con artisti per ottimizzare il numero di draw call. Una draw call è un comando inviato dal Central Processing Unit (CPU) al Graphics Processing Unit (GPU) per renderizzare un oggetto sullo schermo - dice alla GPU di disegnare elementi grafici come texture, mesh o shader. Dobbiamo minimizzare il numero di queste draw call nel nostro gioco perché averne troppe può causare problemi come cali di frame rate o stuttering. Ci sono molti modi per risolvere questo, ma cose come il batching di più oggetti in una singola draw call o la riduzione del numero di texture e materiali unici possono aiutare. Questo è particolarmente importante per il mobile, dato che ci sono così tanti dispositivi diversi sul mercato, tutti con specifiche tecniche diverse.

Quali Sono I Principali Linguaggi Di Programmazione Per I Giochi?

La maggior parte del nostro tempo come programmatori di giochi day-to-day viene speso a fare scripting in uno dei tanti linguaggi di programmazione - dopo tutto siamo sviluppatori di software di un tipo diverso. Ci sono molti linguaggi da scegliere. Alcuni sembrano più facili di altri, ma una volta che ne hai appreso e padroneggiato uno, puoi sicuramente impararne altri - la vera sfida è riuscire ad entrare nel mercato.

Ecco un'introduzione ad alcuni dei linguaggi di programmazione per giochi più popolari:

  • C# - un linguaggio di programmazione versatile e popolare ampiamente usato nello sviluppo di giochi. È uno dei più facili da apprendere se sei un principiante. Una delle sue migliori caratteristiche è la raccolta automatica della memoria, cosa molto utile per programmatori impegnati come noi.
  • C++ - al contrario, questo è un linguaggio non gestito, quindi devi allocare e deallocare manualmente la memoria, il che lo rende più complesso e difficile. Tuttavia, consente una maggiore velocità, controllo e prestazione.
  • Java - come C#, Java ha la sua gestione della memoria e raccolta automatica, rendendo più semplice per gli sviluppatori gestire la memoria senza impantanarsi nei dettagli. È ampiamente usato nello sviluppo web e nelle applicazioni aziendali, e mentre potrebbe (arguibilmente) non essere la scelta migliore per lo sviluppo di giochi, rimane un'opzione solida per creare applicazioni scalabili ed efficienti.
  • Swift - questo è il linguaggio nativo di Apple per creare app e giochi per iOS e macOS. Tuttavia, ciò significa che è meno utile per lo sviluppo cross-platform, dato che puntiamo a pubblicare sempre i nostri giochi mobili sia su Android che iOS.

Come Diventare Un Programmatore Di Giochi?

Ci sono diversi modi per diventare un programmatore di giochi. Il mio percorso è piuttosto convenzionale - ho studiato Design e Programmazione di Giochi all'Università di Staffordshire. Inizialmente, pensavo di andare verso l'arte dei giochi - ero sempre stato molto appassionato di arte da bambino, e mi piacevano molto i moduli di arte all'università, ma mentre ero lì ho scoperto che mi piaceva molto creare gameplay. Potrebbe volerci diversi giorni per creare un singolo modello high poly, ma potrei far volare e esplodere un'anatra in metà del tempo. Prototipare mi permette di vedere il risultato rapidamente di fronte a me.

Tuttavia, la bellezza della programmazione di giochi è che è accessibile alla maggior parte delle persone anche se non viene da un percorso tradizionale. Avevo amici all'università di oltre 50 anni - non è mai troppo tardi per provare qualcosa di nuovo. Da Kwalee, abbiamo persino assunto qualcuno che ha imparato principalmente attraverso video di YouTube e ha creato un gioco per divertimento. Ci sono così tante opportunità per talenti nuovi e appassionati oggi. Guardando ai portafogli dei nuovi studenti, hanno così tanto di più sotto la cintura. Vediamo talenti fantastici arrivare ed è un momento emozionante nel settore.

Una domanda che probabilmente vorrai fare - l'AI influenzerà la programmazione come carriera? Può essere estremamente utile, e sta migliorando. Perfetto se hai bisogno di qualcosa spiegato o sei bloccato in un problema. Puoi usarlo per risolvere i bug, o rifattorizzare ('pulire') il tuo codice inserendolo nell'ultima versione di ChatGPT. Tuttavia quando guardiamo ai portafogli vogliamo vedere il lavoro che hai fatto e di cui sei orgoglioso, l'AI va bene da usare, ma cerca di non usarlo come sostituto delle tue capacità personali.

Com'è Una Giornata Tipica Nella Vita Di Un Programmatore Di Giochi?

Lasciami dare un esempio basato sulla mia vita. Sono un Lead Programmer (lo chiamo il mio lavoro dei sogni) quindi è un ottimo mix di hands-on e gestione di altri programmatori!

Una giornata tipica nel mio mondo è arrivare, prendere un latte, quindi ricontrollare eventuali bug o blocchi per il team QA. Controllare con il team per vedere se qualcuno ha bisogno che io faccia qualcosa per sbloccare il loro lavoro. Poi la musica va su e la lista dei compiti viene alzata. Condivideremo video di avanzamento tramite Slack per ottenere feedback rapidi, mentre saltando tra 2-3 progetti per supportare i membri del mio team. Passiamo anche molto tempo investendo in sistemi condivisi per rendere la nostra programmazione più efficiente - tutto deve essere mantenuto, aggiornato e fissato regolarmente per mantenere le cose in funzione.

Consigli Per Principianti Nella Programmazione Di Giochi

Se stai iniziando e aspiri a diventare un programmatore a tutti gli effetti, ecco i miei consigli per principianti!

  • C'è tanto da apprendere online, su YouTube e ci sono tanti giochi esempio che non hai scuse per non imparare! I motori popolari sono gratuiti e sono molto divertenti da usare!
  • All'estremo opposto dello spettro, può avere 30 anni, ma dovresti provare a leggere il influente libro "Design Patterns: Elements of Reusable Object-Oriented Software" dei cosiddetti autori Gang of Four, che hanno introdotto alcuni dei fondamenti dei pattern di gioco che usiamo ogni giorno nella programmazione.
  • Potresti avere le tue idee, ma assicurati di iniziare con semplicità così da essere radicato con le basi.
  • Quando non sei legato a un progetto commerciale, puoi scrivere quanto codice desideri, quindi divertiti a creare cose folli.
  • Costruire un portfolio è davvero fondamentale (ed è così che ho ottenuto il mio lavoro). Ma fai molta attenzione a non caricare solo il solito vecchio lavoro standard universitario, perché vedremo molte applicazioni con questi. Anche spendere un giorno in più per risinare e aggiungere ulteriori funzionalità ti aiuterà a distinguerti.
  • Creare il tuo gioco reale è anche un'idea intelligente - è molto economico mettere un gioco su Google Play, quindi rilascia qualcosa che puoi mostrare ai reclutatori/editori/famiglia/pets sul tuo telefono. Potresti persino guadagnare qualche migliaio di dollari l'anno fino a che non ti sistemerai con un lavoro full-time esclusivo, è un bonus! Oppure potrebbe tentarti a creare il tuo gioco completo e a collaborare con un editore.
  • Non limitarti a imparare la programmazione - impara arte, design, QA e altre discipline con cui interagirai. Ad esempio, vale la pena capire i metodi QA perché puoi cadere nella trappola di assumere che qualcosa funzioni, ma devi giocarlo come utente, non come qualcuno che ha scritto il codice e ha una visione definita di come ci si aspetta che "dovrebbe essere giocato". Sii distruttivo, prova le cose casuali che potrebbero fare le persone, premendo bottoni a caso e altri comportamenti bizzarri.

Consigli Avanzati Per Programmatori

Ecco alcuni dei consigli che mi hanno aiutato a passare da junior, a programmatore, a senior a lead.

  • Puoi sempre beneficiare di più apprendimento, e ricorda che senza errori non possiamo imparare!
  • Se sei davvero appassionato di qualcosa - potresti diventare più specializzato. Ad esempio, se ti piace giocare con shader e render pipelines, impara di più su come usare shader grafici per ampliare la tua capacità di renderizzare effetti visivi complessi e usare render pipelines per ottimizzare prestazioni o creare effetti fantastici.
  • Potresti creare qualcosa di veramente cool, come un sistema complesso, caricarlo su un asset store per mostrarlo se il tuo contratto lo consente e mostrare il tuo lavoro avanzato. Potresti sviluppare un nicchia come un particolare tipo di programmatore, ad esempio un programmatore gameplay, server, grafica o multiplayer.
  • In alternativa, puoi seguire il percorso gestionale come me, e fare da mentore alle persone. La mia tattica per progredire la mia carriera è stata assorbire nuove responsabilità. Prima, ho iniziato a migliorando piccole cose, ad es. piccoli cambiamenti di workflow.. Poi ho semplificato i processi usando modelli per risparmiare tempo nella creazione di nuovi progetti. Poi ho scoperto il gusto di fare mentorship e gestione, che mi ha aiutato a guadagnare più fiducia e ora a partecipare a revisioni di pari, revisioni del codice, ospitare workshop e guidare team su progetti.

Che tu stia lavorando come parte di un team o come manager, è importante tanto dare lode quanto dare critiche costruttive. Quando si rivede il codice, è bene eccitare le persone!

Quali Sono I Principi Chiave Della Programmazione Di Giochi?

Ci sono alcuni argomenti chiave che devono assolutamente entrare in un blog che copre la programmazione di giochi. Queste sono alcune delle cose più importanti che consideriamo.

Controllo Sorgente/Controllo Versione

Proprio come hai punti di salvataggio nei giochi, ci sono punti di salvataggio nello sviluppo del progetto. Funzionano come archiviazione generale per il progetto e significa che tre o quattro programmatori possono lavorare su un sistema contemporaneamente, creare una modifica e inviarla al server. Ci consente di tracciare quelle modifiche e rientrare facilmente se qualcosa si rompesse. Se due sviluppatori lavorano sullo stesso file, quel file diventerà parte di un merge, se ci sono conflitti possiamo quindi risolverli manualmente o scegliere le modifiche di un individuo da applicare. Questo succede spesso quando si usano Prefabs o Scene all'interno di Unity.

Questi termini talvolta si sovrappongono, ma generalmente, il controllo sorgente si concentra sul codice e il controllo versione include tutti i file del progetto, gli asset e la documentazione.

Quando inizi a usare il Controllo Sorgente può sembrare un po' spaventoso all'inizio, può sembrare molto opprimente e quando si tratta di conflitti puoi trovarti incerto su cosa fare. Ma la natura del controllo versione ti aiuta a salvare momenti nel tempo, quindi se aggiorni e usi messaggi di commit dettagliati frequentemente, è incredibilmente utile e sicuro. Puoi tornare a più punti, avere più rami ecc. Pensalo come la rete di sicurezza degli sviluppatori, così possiamo evitare una versione del Toy Story 2 di Pixar - cancellato accidentalmente e poi recuperato da un disco rigido a casa del loro Direttore Tecnico, invece è tutto sicuro lì sul server.

Programmazione Orientata agli Oggetti

Questo è il tipo di programmazione che usiamo principalmente da Kwalee. Usa oggetti per rappresentare cose reali, o concetti astratti, e mira a organizzare la codebase usando principi che rispecchiano come vediamo e interagiamo con gli oggetti nel mondo reale. Aiuta a gestire sistemazioni complesse organizzando il codice in classi distinte che puoi riutilizzare, scalare e mantenere più facilmente.

Ovviamente, c'è dibattito su se sia buono o no. Anche se non è il migliore nelle prestazioni, funziona bene. Come con i linguaggi, ciascuno ha i suoi pro e contro e dovresti impararne uno per iniziare e avere un idea di come funzionano i linguaggi e compilatori (traduttori del codice umano in codice macchina). Puoi anche considerare altri tipi, come la programmazione funzionale che la tratta più come matematica, la programmazione logica che utilizza fatti e regole o la programmazione procedurale che utilizza dati passo-passo.

Pattern di Programmazione

Questi sono meravigliosamente utili - soluzioni riutilizzabili che possono aiutarti con problemi comuni che affronterai nel tuo design software. Ti danno un modello per risolvere un problema, quindi non devi reinventare la ruota ogni volta e puoi seguire soluzioni provate.

Ad esempio, il pattern Singleton ti aiuta a garantire che ci sia solo un'istanza di una classe come un gestore di impostazioni di gioco durante tutto il tuo gioco, e ti dà un punto di accesso globale ad essa. Il codice per questo pattern significa che esiste solo un'istanza della classe SettingsManager così non devi ricrearla o duplicarla ogni volta che ne hai bisogno.

C'è anche il Pattern Factory che può aiutarti a creare oggetti in modo più regolamentato e flessibile. Puoi definire metodi per generare specifici tipi di oggetti, come personaggi o oggetti, in base ai parametri di ingresso, permettendoti di creare facilmente più oggetti di tipo simile senza dover ricominciare da capo ogni volta.

Spero che questo blog ti abbia dato un assaggio della programmazione di giochi, sia che tu sia nuovo del campo o un programmatore esperto! Se sei una persona laboriosa ma divertente, adatta al nostro team allora scopri di più sulle carriere in Kwalee. Altrimenti, puoi scoprire di più sui nostri giochi mobili o pubblicazioni e conoscere meglio cosa pubblichiamo come sviluppatore ed editore.

Informazioni sull'autore:

Connor Taylor, Lead Game Programmer presso Kwalee, prospera nel creare giochi e nel favorire un team di supporto e divertente. Con oltre 5 anni di esperienza, ha creato successi come Jetpack Jump e guida altri nello sviluppo con Unity.

Condividi questo articolo: