Eines der lähmendsten Gefühle, wenn man mit einem Spieleentwicklungsprojekt beginnt, ist das, das man gleich nach der Fertigstellung des ersten Spielentwurfs verspürt, egal, ob es sich hierbei um ein paar auf Servietten notierte Ideen für einen Game Jam oder das traditionelle 10-Seiten-Design handelt dokumentieren.
Denn nachdem Sie entschieden haben, dass Ihr Spiel ein ROGUELITE-RTS-MMORPG sein soll, müssen Sie das Ding tatsächlich bauen, verstehen Sie?
Und nehmen wir an, Sie haben entschieden, dass Sie als Erstes den RTS-Teil davon erstellen werden. Sie notieren also die User Story, Aufgaben oder jede Arbeitseinheit, die Sie zur Organisation verwenden.
Nehmen wir dann an, dass das erste Element in dieser Liste „Scrollbare Karte implementieren“ lautet.
Und ups! Sie haben noch nie eine scrollbare Karte implementiert. Aber keine Sorge, Google rettet Sie, oder?
Aber was passiert, wenn die Lösung, die Sie online finden, nicht genau das tut, was Sie brauchen? Oder ist die Lösung, die Sie finden, 15 Jahre alt? Oder gibt es darunter jede Menge Kommentare, die sagen, wie schlecht die Lösung ist, ohne dass ein einziger eine bessere Lösung angibt[^0]?
Sie können also keine Codereferenz für das finden, was Sie erstellen möchten. Was kann ein Spieleentwickler tun?
Die Antwort besteht darin, in den Chaos-Goblin-Modus zu wechseln.
Für diejenigen unter Ihnen, die mit Goblins nicht vertraut sind: Sie sind eine Rasse, die in mehreren Fantasy-Werken häufig vorkommt und typischerweise als kleinerer Cousin des ernsteren Orks oder Hobgoblins dargestellt wird. In einigen anderen Objekten werden sie als besonders handwerklich versiert dargestellt. Und dieser Weg ist unzuverlässig. Das bedeutet, dass Dinge, die Goblins erschaffen, manchmal funktionieren, und zwar nicht so sehr, weil sie gut entworfen oder hergestellt sind, sondern vielmehr aus purem Einfallsreichtum und Hartnäckigkeit.
Das ist die Essenz des Chaos Goblin-Ansatzes bei der Spieleentwicklung. Ich bin mir sicher, dass ich dich hier ein wenig verliere, also lass mich noch einmal zurückkommen und die Essenz von Chaos Goblin zusammenfassen:
Das Einzige, was zählt, ist, was der Benutzer erlebt. Wie es funktioniert, geht niemanden etwas an.
Um diesen Punkt weiter zu veranschaulichen, möchte ich Ihnen etwas über den Presidential Metro Head von Fallout 3 erzählen (die ganze Geschichte können Sie hier lesen). Der Kern davon ist, dass während einer Szene im Spiel, in der der Spieler glaubt, in einer U-Bahn zu stehen, die Kopfbedeckung des Spielers tatsächlich durch das Modell eines U-Bahn-Autos ersetzt wurde und es das eigene Modell des Spielers ist, das sich auf einem bewegt vorgegebene Spur.
Einige Spieler könnten dies lesen und denken, dass die Entwickler faul waren. Aber die Wahrheit ist, dass Entwickler so etwas ständig tun.
Und genau diese Art von Praktiken bilden die Grundsätze des Chaos-Goblin-Modus, die wie folgt lauten.
Nehmen wir an, dass der Spieler in einem Teil Ihres Spiels in einem Burgturm steht und Pfeile auf einen Drachen abfeuert, der draußen fliegt. Hin und wieder kommt der Drache näher und schiebt seinen Kopf durch das Fenster, um den Spieler zu beißen.
Soweit es den Spieler betrifft, fliegt der Drache tatsächlich da draußen. Aber wir als Spieleentwickler hätten vielleicht ein paar Tricks anwenden können, um dieser Illusion entgegenzuwirken und die Situation zu optimieren.
Einige Dinge, die getan werden könnten, sind wie folgt:
Verwende unterschiedliche Modelle, je nachdem, wie weit der Drache vom Spieler entfernt ist. Der Spieler kann die Details des Drachen nur sehen, wenn er nah dran ist. Warum also nicht das 3D-Modell des Drachen durch etwas ersetzen, das weniger Details hat, aber auch weniger Platz im Speicher einnimmt?
Schalten Sie den Drachen aus, wenn der Spieler ihn nicht ansieht. Indem wir verfolgen, wohin der Spieler schaut, können wir 3D-Modelle gezielt ein- und ausschalten, um beim Rendern zu sparen.
Verhindern Sie, dass der Spieler unvollendete Arbeiten sieht. Nehmen wir an, dass die Kunst für die Umgebung außerhalb des Turms aus irgendeinem Grund noch unvollendet ist. Wenn der Spieler also jemals auf die Fensterbank tritt, wird er nichts sehen. Um dabei zu helfen, haben die Spieleentwickler beschlossen, dass der Fenstervorsprung zum sofortigen Todespunkt wird. Wenn der Spieler also auf dem Sims steht, ertönt ein drei Sekunden langes Drachengebrüll und der Bildschirm des Spielers beginnt sich zu verdunkeln. Sobald der 3-Sekunden-Ton zu Ende ist, spielen wir eine kurze Animation ab, in der der Drache den Spieler frisst (vielleicht verwenden wir eine bereits vorhandene Animation wieder). Für den Spieler ist der Vorsprung nur ein Ort, an dem der Drache sie abholen kann; Sie müssen nicht wissen, dass es getan wurde, um zu verhindern, dass sie unvollendete Arbeiten sehen.
Wenn der Drache seinen Kopf durch das Fenster steckt, ersetzen wir vielleicht das vollständige Drachenmodell durch ein kleineres, aber detaillierteres Kopfmodell. Dies würde es uns ermöglichen, Speicher von einem Modell freizugeben, das wir nicht verwenden, und gleichzeitig dem Spieler ein verbessertes Erlebnis zu bieten.
Wenn Sie schon länger in der Spielebranche tätig sind, erkennen Sie die oben genannten Techniken wahrscheinlich als Standardpraktiken an, aber es gab eine Zeit, in der diese Techniken als clevere Trickserei und recht innovativ galten.
Jetzt liegt es an Ihnen, neue Wege zu finden, um Ihre Spieler zu der Annahme zu verleiten, dass hinter dem, was sie sehen, viel mehr steckt.
Viele Spieleentwickler bleiben stecken, weil sie versuchen, Lösungen zu finden, die alle möglichen Zukunftsszenarien abdecken. Diese Einstellung kann unter den richtigen Umständen wertvoll sein, aber wenn Sie sich im Chaos-Goblin-Modus befinden, besteht das Ziel darin, etwas so schnell wie möglich zum Laufen zu bringen.
Ein Nachtrag dazu:
Ähnlich wie im obigen Punkt bleiben viele Entwickler beim Versuch, eine Funktion zu implementieren, stehen, weil sie versuchen, zu früh zu optimieren.
Die Optimierung sollte so lange erfolgen, bis das Projekt auf Maschinen ausgeführt werden muss, die außerhalb der Kontrolle der Entwickler liegen[^1].
Dies ist ein weiterer Stolperstein, auf den viele unerfahrene Spieleentwickler stoßen. Sie werden die Implementierung einer Funktion aufschieben, damit sie nur noch einen Kurs, ein weiteres Online-Tutorial und ein weiteres Video belegen können, und dann sind sie bereit, ihr Spiel zu implementieren.
Daran bin ich besonders schuldig und weiß, wie heimtückisch es sein kann.
Um Ihnen ein konkreteres Beispiel zu geben: Nehmen wir an, Sie hätten die Aufgabe, ein Pong-Spiel von Grund auf zu programmieren.
Je nachdem, was Sie wissen oder nicht wissen, kann es hierfür unterschiedliche Ansätze geben:
Wenn Sie mit dem Physiksystem von Unity vertraut sind, ist dies ein relativ einfaches Unterfangen. Sie können einfach ein paar starre Körper und Kollider verwenden, Kräfte und Geschwindigkeiten anwenden, ein physikalisches Material für die Sprungkraft des Balls verwenden und das war's. Ein Barebone-Pong-Klon.
Aber nehmen wir an, Sie sind mit dem Kollisionssystem von Unity nicht vertraut, Sie wissen nur, wie man die Transformationskomponenten von Unity verwendet, sodass Sie nur die Position und Größe eines Objekts erhalten können.
Aber! Das reicht aus, um Pong zu implementieren. Sie könnten ein Skript schreiben, das die Position und Größe des Balls verfolgt und diese mit der Position und Größe des Schlägers vergleicht, um zu prüfen, ob es zu einer Kollision kommt.
Oder vielleicht kennen Sie Unity noch nicht einmal, alles, was Sie wissen, ist C++ und wie man auf der Konsole druckt.
Aber das reicht auch! Mithilfe von Terminal-Tricks können Sie Zeilen und Spalten mit Symbolen drucken, die den Ball, die Paddel und die Spielfläche darstellen. Zusammen mit dem Konzept einer Spielschleife reicht das aus, um eine erfrischende Benutzeroberfläche zu programmieren, die auf Eingaben reagiert.
Oder Sie haben nicht einmal einen Informatik-Hintergrund oder haben keinen C++-Kurs besucht und beherrschen nur Javascript?
Kein Problem! Sie können Phaser verwenden, das JS als Hauptsprache verwendet und sowohl Rendering- als auch Physikkomponenten enthält.
Sie können nicht einmal programmieren? Absolut kein Problem.
Du hast herausgefunden, wohin ich damit will, oder?
Die meisten Spieleentwickler haben normalerweise ein oder zwei (oder 10.000) aufgegebene Projekte irgendwo herumliegen. Es macht keinen Sinn, sie zu verschwenden. Wenn dort Code wie ein Pause-System vorhanden ist, verwenden Sie ihn erneut. Es macht keinen Sinn, dasselbe noch einmal zu schreiben. Auch wenn Sie sich genau erinnern, wie man es schreibt, kopieren Sie es; Wenn die Anpassung schwierig ist, wiederholen Sie es noch einmal, damit es beim nächsten Mal einfacher ist.
Vielleicht haben Sie sogar ein Workshop-Projekt[^2], das mehrere Codeteile enthält, die Sie wiederverwenden können.
Brauchen Sie ein Dialogsystem? Suchen Sie eine Open-Source-Version und verwenden Sie sie für andere Zwecke. Erfüllt es alle Ihre Anforderungen? NEIN? Erfüllt es mehr als 50 %? Ja? Dann lohnt es sich, das zu nutzen, anstatt etwas völlig Neues zu erstellen.
Inventar-System? Finden Sie ein Open-Source-Spiel auf itch.io und übernehmen Sie deren System.
Brauchen Sie eine First-Person-Kamera? Nutzen Sie ein vorgefertigtes Asset, um damit umzugehen[^3].
Es gibt viele brillante Spieleentwickler, die zweifellos kompetenter sind als Sie oder ich.
Sofern Sie keinen besonderen Grund haben, sollte alles als Kandidat für die Verwendung eines vorgefertigten Systems in Betracht gezogen werden. Es gibt jedoch sinnvolle Ausnahmen, wie zum Beispiel: Verwenden Sie keinen Code, den Sie lediglich kopiert und eingefügt haben, als Rückgrat Ihres Spiels (stellen Sie zumindest sicher, dass Sie ihn verstehen, bereinigen und kommentieren Sie ihn) und vermeiden Sie die Verwendung von a Modul, das ein Jahrzehnt alt ist und dessen Autor vermutlich irgendwo in den Tropen faulenzt und mit Elvis, Tupac und Marilyn Monroe Mai Tais in einem Paparazzi-freien Paradies schlürft.
Wenn Sie sich bei der Implementierung einer Funktion nicht sicher sind, suchen Sie sich ein Spiel, das etwas Ähnliches getan hat, wie Sie es sich wünschen, und ahmen Sie es nach.
Mit „Kopie“ meine ich die Designaspekte wie Steuerung, Kameraansichten und Mechanik und nicht den Kunststil, die Geschichte oder die Charaktere.
Wie schnell sollte zum Beispiel das Scrollen in unserem inzwischen vergessenen hypothetischen ROGUELIKE-RTS-MMORPG sein?
Anstatt zu raten, können Sie sehen, wie ein anderer RTS es geschafft hat. Angenommen, Sie beobachten Age Of Empires II (ein historisch bedeutsames Echtzeitstrategiespiel) und entdecken, dass Benutzer damit die Geschwindigkeit ihrer Cursorbewegung steuern können. Sie könnten Ihr Spiel sogar neben AoEII platzieren und Ihren Cursor anpassen, bis es sich gleichwertig anfühlt. Sie werden erstaunt sein, wie viele Entwickler auf einfache Low-Tech-Lösungen wie diese angewiesen sind, um ihre Ziele zu erreichen.
Was sollten Sie also tun, nachdem Sie Ihre Chaos-Goblin-Possen beendet haben? Machen Sie eine Pause, machen Sie sich eine Tasse Kaffee und kehren Sie später zu Ihrem Code zurück.
Nachdem Sie Ihren Code ruhen lassen (unter einem feuchten Handtuch, wenn das Wetter zu trocken ist), sollten Sie ihn ein wenig auffrischen und teilen. Ja! Teilen Sie es idealerweise mit einem erfahrenen Entwickler, einem Kollegen, einem Kommilitonen oder im schlimmsten Fall mit einer Online-Community[^4].
Warum teilen Sie es? Denn als Chaosgoblin geht es nicht darum, etwas Dauerhaftes oder Optimales zu erschaffen; Es geht darum, etwas zu bauen, das FUNKTIONIERT. Es muss nicht perfekt funktionieren oder schön aussehen, es muss nur FUNKTIONIEREN. Diese Art der Entwicklung führt zu Ergebnissen, allerdings sind die Ergebnisse selten sofort produktionsreif. Daher ist die Rücksprache mit jemandem, der Feedback gibt, von entscheidender Bedeutung.
Abhängig vom Stadium Ihres Projekts haben Sie möglicherweise nicht die Zeit, die Kommentare dieser Person sofort umzusetzen. Wenn das der Fall ist, sollten Sie diese Kommentare zumindest im Code[^5] dokumentieren.
Und das ist es! Sie verfügen jetzt über die Technik Nr. 1, mit der professionelle Spieleentwickler weltweit Probleme lösen.
Ich würde vorschlagen, dass es Zeit für eine zweite Tasse Kaffee ist, nicht wahr?
[^0] – Dies ist ein überraschend häufiges Phänomen und wird als „The Denver Parable“ bezeichnet. Weitere Informationen finden Sie im folgenden wissenschaftlichen Artikel .
[^1] – Dies ist eine Art Verallgemeinerung, und wie die meisten Verallgemeinerungen ist sie möglicherweise nicht so hilfreich wie eine gründliche Analyse der Anforderungen Ihres Projekts. Als Faustregel gilt jedoch, die Optimierung so lange aufzuschieben, bis sie wirklich erforderlich ist. Heutzutage ist die Optimierung von Videospielen deutlich weniger entmutigend als früher. Einige Game-Engine-Unternehmen wie Unity bieten Ihnen möglicherweise sogar kostenlose Beratung an. Schließlich liegt es in ihrem besten Interesse, dass Sie Ihr Spiel erfolgreich starten.
[^2] – Der Workshop ist eine der Katas oder Praktiken, die ich verwende, um mein Verständnis von Unity zu verbessern. Mehr darüber und zu anderen Techniken können Sie hier lesen.
[^3] - In diesem Artikel finden Sie neben anderen nützlichen Tools ein wirklich gutes FPS-Controller-Paket
[^4] – Dies birgt den Vorbehalt, dass etwa 95 % der Kommentare, die Sie online erhalten, möglicherweise sinnlos, unvollständig oder veraltet sind oder die zutiefst persönlichen Überzeugungen des Autors widerspiegeln, was auch immer sie sein mögen. Gehen Sie daher immer mit einer gewissen Skepsis an ein solches Feedback heran. Suchen Sie nach nützlichen Kommentaren, ignorieren oder streichen Sie den Rest und bemühen Sie sich aufrichtig, jemanden zu finden, mit dem Sie Ihren Code teilen können.
[^5] – Verschiedene Teams halten unterschiedliche Normen ein, wenn es darum geht, wo sie ihre Codedokumentation aufbewahren, und daran sollten Sie sich halten. Generell würde ich jedoch dafür plädieren, dass sich die Dokumentation des Codes neben dem Code selbst befindet. Wenn dies nicht möglich ist, sollten Sie die Verwendung eines Git-Submoduls oder eines gleichwertigen Moduls in Ihrem gewählten Codeversionierungssystem in Betracht ziehen. Wenn die Dokumentation nicht im Haupt-Repository verfügbar sein kann, sollte sie sich zumindest im Git-Submodul befinden.
Auch hier veröffentlicht.