Leitfaden zur Spieleprogrammierung - Tipps, Werkzeuge und Karrieren

von Connor Taylor

Ein Spielprogrammierer ist die Person, die die Vision eines Designers nimmt und sie tatsächlich in der von uns verwendeten Spiel-Engine zum Laufen bringt. Ich arbeite im Mobile Game Programming Team bei Kwalee, deshalb verwenden wir hauptsächlich Unity. Wenn der Designer beispielsweise möchte, dass ein Würfel auf eine bestimmte Weise rollt, schreibe ich das Skript, um die Logik zu steuern. Wir arbeiten auch mit Spielekünstlern zusammen, um sicherzustellen, dass unsere Spiele sowohl fantastisch aussehen als auch eine großartige Leistung auf dem Gerät erzielen.

In diesem Blog werde ich auf meine fünf Jahre Arbeit bei Kwalee zurückgreifen, um wesentliche Einblicke und Ratschläge darüber zu geben, was es bedeutet, ein Spielprogrammierer zu sein. Ich werde Ihnen einige der von uns verwendeten Sprachen, Werkzeuge und Prinzipien, meine Karrieretipps sowie Ratschläge für Anfänger und Fortgeschrittene näherbringen.

Was Macht Ein Spieleprogrammierer?

Wir schreiben den Code und helfen, das Spiel Wirklichkeit werden zu lassen. Während Spieledesigner die Konzepte erstellen und Spielekünstler die Assets schaffen, wird ein Programmierer das funktionale, spielbare Erlebnis schaffen. Wir erstellen und optimieren die Leistung des Spiels und beheben alle Probleme, die identifiziert werden.

Wir sorgen dafür, dass sich ein Spiel großartig anfühlt und mit hoher Leistung läuft. Um dies zu erreichen, müssen wir sicherstellen, dass der Code selbst sauber und erweiterbar ist, was schwieriger ist, als Sie denken. Wir verwenden Codierungsstandards, um eine konsistente Qualität in allen unseren Teams zu gewährleisten - ein Dokument, das unter anderem Namensstandards und Formatierung enthalten kann. Manchmal sind die Dinge jedoch nicht immer so einfach, und von Zeit zu Zeit muss man außerhalb des Rahmens denken, um Dinge rechtzeitig zu erledigen.

Zu unseren Aufgaben gehört auch, sicherzustellen, dass das Spiel auf der Hardware des Endnutzers gut läuft. Zum Beispiel müssen wir in unseren mobilen Spielen vermeiden, dass ältere Geräte zu heiß werden, indem wir mit Künstlern zusammenarbeiten, um die Anzahl der Draw Calls zu optimieren. Ein Draw Call ist ein Befehl, der von der zentralen Verarbeitungseinheit (CPU) an die Grafikverarbeitungseinheit (GPU) gesendet wird, um ein Objekt auf dem Bildschirm darzustellen - er sagt der GPU, dass sie grafische Elemente wie Texturen, Meshes oder Shader zeichnen soll. Wir müssen die Anzahl dieser Draw Calls in unserem Spiel minimieren, da zu viele Frame-Drops oder Ruckeln verursachen können. Es gibt viele Möglichkeiten, dies zu lösen, aber Dinge wie das Zusammenfassen mehrerer Objekte in einen einzigen Draw Call oder die Reduzierung der Anzahl einzigartiger Texturen und Materialien können helfen. Dies ist besonders wichtig für Mobilgeräte, da es so viele verschiedene Geräte auf dem Markt gibt, alle mit unterschiedlichen technischen Spezifikationen.

Was Sind Die Haupt-programmiersprachen Für Spiele?

Die meiste Zeit verbringen wir als alltägliche Spieleprogrammierer mit dem Schreiben von Skripten in einer Reihe von Programmiersprachen - schließlich sind wir Softwareentwickler anderer Art. Es gibt viele Sprachen zur Auswahl. Einige scheinen einfacher als andere, aber sobald Sie eine gelernt und gemeistert haben, können Sie definitiv andere lernen - die Hauptschwierigkeit besteht darin, den Fuß in die Tür zu bekommen.

Hier ist eine Einführung in einige der beliebtesten Programmiersprachen für Spiele:

  • C# - eine vielseitige und beliebte Programmiersprache, die häufig in der Spieleentwicklung eingesetzt wird. Sie ist eine der einfachsten, die man lernen kann, wenn man Anfänger ist. Einer ihrer besten Aspekte ist die automatische Speicherbereinigung, da sie die Speicherverwaltung für Sie übernimmt - sehr nützlich für beschäftigte Programmierer wie uns.
  • C++ - im Gegensatz dazu ist dies eine nicht verwaltete Sprache, sodass Sie den Speicher manuell zuweisen und freigeben müssen, was die Komplexität und den Schwierigkeitsgrad erhöht. Es ermöglicht jedoch höhere Geschwindigkeit, Kontrolle und Leistung.
  • Java - ähnlich wie C# bietet Java eigene Speicherverwaltung und Garbage Collection, was es Entwicklern erleichtert, Speicher zu verwalten, ohne sich zu sehr mit den Details zu beschäftigen. Es wird häufig in der Webentwicklung und in Unternehmensanwendungen verwendet, und obwohl es möglicherweise (angeblich) nicht die erste Wahl für die Spieleentwicklung ist, bleibt es eine solide Option für die Erstellung skalierbarer und effizienter Anwendungen.
  • Swift - dies ist die native Sprache von Apple zum Erstellen von Apps und Spielen für iOS und macOS. Allerdings ist sie weniger nützlich für plattformübergreifende Entwicklung, da wir unsere mobilen Spiele immer auf Android und iOS veröffentlichen wollen.

Wie Wird Man Spieleprogrammierer?

Es gibt verschiedene Möglichkeiten, Spieleprogrammierer zu werden. Mein Weg war ziemlich konventionell - ich habe Games Design und Programming an der University of Staffordshire studiert. Ursprünglich dachte ich, ich würde in die Spielekunst gehen - ich war als Kind immer sehr leidenschaftlich für Kunst und habe die Kunstmodule an der Uni wirklich genossen, aber während meiner Zeit dort entdeckte ich, dass mir das Erstellen von Gameplay sehr viel Spaß machte. Es könnte mich mehrere Tage kosten, ein einziges High-Poly-Modell zu erstellen, aber ich konnte eine Ente in halb so kurzer Zeit fliegen und explodieren lassen. Durch Prototyping kann ich das Ergebnis schnell direkt vor mir sehen.

Der Vorteil beim Programmieren von Spielen ist jedoch, dass es für die meisten Menschen zugänglich ist, selbst wenn sie nicht den traditionellen Weg beschreiten. Ich hatte Freunde an der Uni, die über 50 Jahre alt waren - es ist nie zu spät, etwas Neues zu erleben. Bei Kwalee haben wir sogar jemanden eingestellt, der hauptsächlich durch YouTube-Videos gelernt hat und ein Spiel nur aus Spaß erstellt hat. Heute gibt es so viele Möglichkeiten für neue und motivierte Talente. Wenn man sich die Portfolios neuerer Studenten ansieht, haben sie so viel mehr Erfahrung. Wir sehen fantastische Talente und es ist eine aufregende Zeit in der Branche.

Eine Frage, die Sie wahrscheinlich stellen möchten - wird KI das Programmieren als Karriere beeinflussen? Sie kann extrem nützlich sein und wird immer besser. Perfekt, wenn Sie etwas erklärt bekommen möchten oder feststecken. Sie können sie nutzen, um Fehler zu beheben oder Ihren Code zu überarbeiten („sauber zu machen“), indem Sie ihn in den neuesten ChatGPT einfügen. Wenn wir jedoch Portfolios betrachten, wollen wir die Arbeit sehen, die Sie getan haben und auf die Sie stolz sind. Es ist in Ordnung, KI zu nutzen, aber versuchen Sie, es nicht als Ersatz für Ihre eigenen Fähigkeiten zu verwenden.

Wie Sieht Ein Typischer Tag Im Leben Eines Spieleprogrammierers Aus?

Lassen Sie mich ein Beispiel aus meinem Leben geben. Ich bin ein Lead-Programmierer (ich nenne es meinen Traumjob), also eine großartige Mischung aus praktischem Arbeiten und dem Management anderer Programmierer!

Ein typischer Tag in meiner Welt beginnt damit, dass ich reinkomme, einen Latte trinke und dann alle Bugs oder Blocker für das QA-Team überprüfe. Überprüfen Sie mit dem Team, ob jemand meine Hilfe benötigt, um seine Arbeit zu erleichtern. Dann geht die Musik an und die Aufgabenliste wird herausgeholt. Wir teilen Fortschrittsvideos über Slack, um schnell Feedback zu erhalten, während wir zwischen 2-3 Projekten hin und her wechseln, um Mitglieder meines Teams zu unterstützen. Wir verbringen auch viel Zeit damit, in gemeinsame Systeme zu investieren, um unser Programmieren effizienter zu machen - alles muss regelmäßig gewartet, aktualisiert und repariert werden, um reibungslos zu laufen.

Tipps Für Anfänger Im Spieleprogrammieren

Wenn Sie gerade erst anfangen und ein vollwertiger Programmierer werden möchten, hier sind meine Tipps für Anfänger!

  • Es gibt so viel online zu lernen, auf YouTube, und es gibt so viele Beispielspiele, dass Sie keine Entschuldigung haben, nicht zu lernen! Die beliebten Engines sind kostenlos und machen viel Spaß!
  • Am anderen Ende des Spektrums, es mag 30 Jahre alt sein, aber Sie sollten das einflussreiche Buch "Design Patterns: Elemente wiederverwendbarer objektorientierter Software" von den sogenannten Gang-of-Four-Autoren lesen, das einige Grundlagen von Spielmustern eingeführt hat, die wir jeden Tag im Programmieren verwenden.
  • Sie könnten Ihre eigenen Ideen haben, aber stellen Sie sicher, dass Sie einfach anfangen, damit Sie mit den Grundlagen vertraut sind.
  • Wenn Sie nicht an ein kommerzielles Projekt gebunden sind, können Sie so viel Code schreiben, wie Sie wollen, also haben Sie viel Spaß beim Erstellen verrückter Dinge.
  • Der Aufbau eines Portfolios ist wirklich wichtig (und so habe ich meinen Job bekommen). Aber seien Sie sehr vorsichtig, nicht nur gleiche alte Standard-Uni-Arbeiten hochzuladen, denn wir werden viele Bewerbungen mit diesen sehen. Auch wenn Sie nur einen weiteren Tag mit dem Reskinnen und dem Hinzufügen weiterer Funktionen verbringen, können Sie sich abheben.
  • Sich selbst ein echtes Spiel zu erstellen, ist auch eine clevere Idee - es ist sehr günstig, ein Spiel im Google Play Store zu veröffentlichen, also veröffentlichen Sie etwas, das Sie Recruitern/Verlagen/Familie/Tieren auf Ihrem Telefon zeigen können. Vielleicht verdienen Sie sogar ein paar Tausend Dollar pro Jahr, bis Sie eine exklusive Vollzeitbeschäftigung haben, das ist ein Bonus! Oder es könnte Sie dazu verleiten, Ihr eigenes großes Spiel zu machen und mit einem Publisher zusammenzuarbeiten.
  • Lernen Sie nicht nur das Programmieren, sondern auch Kunst, Design, QA und andere Disziplinen, mit denen Sie interagieren werden. Es ist zum Beispiel wertvoll, QA-Methoden zu verstehen, da Sie in die Falle tappen können, zu glauben, dass etwas funktioniert, aber spielen Sie als Nutzer, nicht als jemand, der den Code geschrieben hat und eine definierte Vorstellung davon hat, wie es „gespielt werden sollte“. Seien Sie destruktiv, probieren Sie die zufälligen Dinge, die Menschen möglicherweise tun, schlagen Sie zufällige Tasten und andere bizarre Verhaltensweisen.

Tipps Für Fortgeschrittene Programmierer

Hier sind einige Tipps, die mir geholfen haben, vom Junior- zum Senior- und Lead-Programmierer aufzusteigen.

  • Sie können immer von mehr Lernen profitieren, und denken Sie daran, dass wir ohne Fehler nicht lernen können!
  • Wenn Sie wirklich leidenschaftlich für etwas sind, können Sie sich auf etwas spezialisieren. Wenn Sie beispielsweise gerne mit Shadern und Rendering-Pipelines spielen, lernen Sie mehr über die Verwendung von Grafikeffekten und -pipelines, um Ihre Fähigkeit zu erweitern, komplexe visuelle Effekte zu rendern, und verwenden Sie Bestandpipeline, um die Leistung zu optimieren oder einige tolle Effekte zu erzeugen.
  • Sie könnten etwas wirklich Cooles machen, z. B. ein komplexes System, es in einen Asset-Store hochladen, wenn Ihr Vertrag es erlaubt, und Ihr fortgeschrittenes Werk präsentieren. Sie könnten eine Nische als bestimmter Typ von Programmierer, z.B. Gameplay-Programmierer, Server-Programmierer, Grafik-Programmierer oder Multiplayer-Programmierer entwickeln.
  • Alternativ können Sie wie ich den Management-Weg gehen und Menschen betreuen. Meine Taktik, um in meiner Karriere voranzukommen, besteht darin, neue Verantwortlichkeiten zu übernehmen. Zuerst begann ich kleinere Dinge zu verbessern, d.h. kleine Arbeitsabläufe zu ändern. Dann machte ich Prozesse einfacher, indem ich Vorlagen verwendete, um Zeit beim Erstellen neuer Projekte zu sparen. Dann bekam ich einen Vorgeschmack auf Mentorship und Management, was mir half, mehr Selbstvertrauen zu gewinnen und nun an Peer-Reviews, Code-Reviews teilzunehmen, Workshops zu leiten und Teams bei Projekten zu führen.

Ob Sie nun Teil eines Teams sind oder als Manager arbeiten, es ist genauso wichtig, Lob zu geben, wie konstruktive Kritik zu geben. Bei der Überprüfung von Code ist es wichtig, die Menschen zu loben!

Was Sind Die Schlüsselprinzipien Der Spieleprogrammierung?

Es gibt einige Schlüsselthemen, die einfach in einen Blog zur Spieleprogrammierung aufgenommen werden müssen. Dies sind einige der wichtigsten Überlegungen von uns.

Quellenkontrolle/Versionskontrolle

Genau wie Sie Speicherpunkte in Spielen haben, gibt es Speicherpunkte in der Projektentwicklung. Sie fungieren als allgemeiner Speicher für das Projekt und bedeuten, dass drei oder vier Programmierer gleichzeitig an einem System arbeiten, eine Änderung vornehmen und sie auf den Server übertragen können. Es ermöglicht uns, diese Änderungen zu verfolgen und leicht zurückzugehen, wenn etwas kaputtgehen sollte. Wenn zwei Entwickler an derselben Datei arbeiten, wird diese Datei Teil einer Zusammenführung. Bei Konflikten können wir sie manuell lösen oder die Änderungen einer Person übernehmen. Dies passiert häufig, wenn Prefabs oder Szenen in Unity verwendet werden.

Diese Begriffe überschneiden sich manchmal, aber im Allgemeinen konzentriert sich die Quellenkontrolle auf den Code, und die Versionskontrolle umfasst alle Projektdateien, Assets und Dokumentationen.

Wenn Sie zum ersten Mal mit der Quellenkontrolle beginnen, kann es zunächst etwas beängstigend erscheinen, es kann sehr überwältigend wirken, und bei Konflikten können Sie sich unsicher fühlen, was zu tun ist. Aber die Natur der Versionskontrolle hilft Ihnen, Momente in der Zeit zu speichern, und wenn Sie häufig aktualisieren und detaillierte Commit-Nachrichten verwenden, ist es unglaublich nützlich und sicher. Sie können auf mehrere Punkte zurückkehren, mehrere Branches haben usw. Denken Sie daran als das Sicherheitsnetz der Entwickler, damit wir eine Version von Pixar's 'Toy Story 2' vermeiden - versehentlich gelöscht und dann von einer Festplatte im Haus ihres technischen Direktors wiederhergestellt, stattdessen ist alles sicher auf dem Server.

Objektorientierte Programmierung

Dies ist die Programmierart, die wir hauptsächlich bei Kwalee verwenden. Sie verwendet Objekte, um reale Dinge oder abstrakte Konzepte darzustellen, und zielt darauf ab, den Code mithilfe von Prinzipien zu organisieren, die widerspiegeln, wie wir Dinge im realen Leben sehen und mit ihnen interagieren. Es hilft, komplexe Systeme zu verwalten, indem der Code in unterschiedliche Klassen organisiert wird, die einfacher wiederverwendet, skaliert und gewartet werden können.

Natürlich gibt es Debatten darüber, ob es gut ist oder nicht. Während es nicht der Höchstleistungsbringer ist, funktioniert es gut. Ebenso wie bei den Sprachen hat jede ihre eigenen Vor- und Nachteile, und Sie sollten eine lernen, um zu beginnen und ein Gefühl dafür zu bekommen, wie Sprachen und Compiler (Übersetzer von Menschencode in Maschinencode) funktionieren. Sie können auch andere Typen in Betracht ziehen, wie funktionale Programmierung, die es mehr wie Mathematik behandelt, logische Programmierung, die Fakten und Regeln verwendet, oder prozedurale Programmierung, die Schritt-für-Schritt-Daten nutzt.

Programmiermuster

Dies sind wunderbare nützliche Dinge - wiederverwendbare Lösungen, die bei häufig auftretenden Problemen im Softwaredesign helfen können. Sie geben Ihnen eine Vorlage zur Behebung eines Problems, sodass Sie das Rad nicht jedes Mal neu erfinden müssen und bewährten Lösungen folgen können.

Beispielsweise hilft das Singleton-Designmuster sicherzustellen, dass nur eine einzige Instanz einer Klasse wie eines Spiel-Einstellungs-Managers im gesamten Spiel existiert, und bietet Ihnen einen globalen Zugriffspunkt darauf. Der Code für dieses Muster bedeutet, dass nur eine Instanz der SettingsManager-Klasse existiert, sodass Sie sie nicht jedes Mal neu erstellen oder duplizieren müssen, wenn Sie sie benötigen.

Es gibt auch das Factory Pattern, das Ihnen helfen kann, Objekte auf eine organisierte und flexible Weise zu erstellen. Sie können Methoden zur Erzeugung bestimmter Objekttypen definieren, wie Charaktere oder Gegenstände, basierend auf Eingabeparametern, sodass Sie mehr Objekte eines ähnlichen Typs einfach erstellen können, ohne jedes Mal von Grund auf neu zu beginnen...

Ich hoffe, dieser Blog hat Ihnen einen Einblick in die Spieleprogrammierung gegeben, egal ob Sie neu in diesem Bereich sind oder ein erfahrener Programmierer! Wenn Sie ein fleißiger, aber spaßiger Mensch sind, würden Sie gut zu unserem Team passen, also finden Sie mehr heraus über Kwalee-Karrieren. Oder lernen Sie unsere mobilen Spiele oder Veröffentlichungen kennen und erfahren Sie mehr darüber, was wir als Entwickler und Publisher veröffentlichen.

Über den Autor:

Connor Taylor, Lead Game Programmer bei Kwalee, liebt es, Spiele zu entwickeln und ein unterstützendes, lustiges Team zu fördern. Mit 5+ Jahren Erfahrung hat er Hits wie Jetpack Jump erstellt und andere in Unity-Entwicklung ausgebildet.

Diesen Artikel teilen: