Einstieg in die Spieleentwicklung: Game-Engines II

Im ersten Teil zum Thema Game-Engines habe ich kurz erklärt was Engines überhaupt sind und einige der frei nutzbaren Engines vorgestellt. In diesem Artikel gebe ich einige Tipps und Dinge die man beachten sollte, wenn man den Umgang mit einer Engine erlernen möchte.

Tipps für den Anfang

Nachdem man sich endlich entschieden hat und die Engine seiner Wahl heruntergeladen und installiert hat möchte man am liebsten sofort loslegen. Wer hat nicht davon geträumt den nächsten Blockbuster seines Lieblingsgenres zu entwickeln. Learning by doing ist zwar schön und gut, aber an dieser Stelle noch nicht angebracht. Legt all eure Spielideen beiseite und macht euch erst mit der Engine vertraut. Geht die Tutorials und Tutorialvideos der Engine selbst durch. Mach euch mit den Editoren vertraut und lernt eure ersten Scripte zu schreiben. Probiert Dinge einfach aus ohne sie in den Kontext eines Spiels zu setzen. Die Tutorials der Engine selbst sind meist sehr knapp gehalten, sucht euch also Tutorialserien aus der Community, das Netz und Youtube ist voll davon. (Im ersten Teil zum Thema Engines findet ihr auch einige hilfreiche Links zu den einzelnen Engines.)
In den Tutorialserien wird oft Schritt für Schritt an einer kleinen Demo gearbeitet, die die einzelnen Feautures und Bereiche vereint. Programmiert zuerst etwas nach bevor ihr euch um eure eigenen Ideen kümmert. Es besteht sonst die Gefahr sich in Details zu verlieren und sich in einzelnen Punkten zu sehr zu vertiefen ohne überhaupt alle Grundlagen zu kennen. Befasst euch auch mit dem was ihr in den Tutiorials lernt, tippt nicht nur einfach blind alles ab. Versucht nachzuvollziehen was die einzelnen Codezeilen in den Scripten machen. Verändert Werte und seht nach wie sich das Ergebnis verändert. Erst wenn ihr das einigermaßen Verstanden habt könnt ihr wieder eure Ideen herausholen.
Jetzt wird es Zeit für learning by doing, aber fangt klein an. Setzt zuerst simple Ideen um. Es macht viel mehr sinn mehrere kleine Projekte abzuschließen als in einem etwas größeren Projekt ohne brauchbarem Ergebnis stecken zu bleiben. Falls ihr euch schon mal die Endcredits am Ende eines Spiels angesehen habt, dann habt ihr gemerkt, dass da eine menge Leute beteiligt gewesen sind, selbst bei weniger großen Produktionen, AAA-Titel (vor allem die von EA) sind da Beispiele vom oberen Ende der Skala. Und selbst wenn ihr die ganzen Marketing- und Businessabteilungen sowie Asset-Creation weglasst, bleiben immer noch eine Menge Programmierer und Gamedesigner über. Es eignet sich auch nicht jedes Genre als Einstieg in die Spieleprogrammierung. Jump ‘n’ Runs sind wohl die einfachsten. Sobald man die grundlegenden Mechaniken gescriptet hat (Laufen, Spingen, Hindernisse und Sammelobjekte) hat man schon alles was man brauch und kann mit dem Leveldesign loslegen. Ab da arbeitet man fast nur noch im Editor und erstellt Level, gescriptet wird nur noch für die ein oder andere Optimierung oder Erweiterung der Mechaniken. Shooter (FPS, 3rd-Person, Sidescroller, …) gehen auch noch. Auf Ziele schießen ist schnell programmiert, aber man muss auch daran denken dass man Gegner braucht. KI ist ein komplexes Thema und selbst für einen Gegner der durch die Spielwelt läuft und auf einen schießt ist schon einiges an Aufwand notwendig. Alternativ kann man’s mit Multiplayer probieren, da braucht man keine KI aber steht vor ganz anderen Problemen, wenn die Engine nicht gerade ein Multiplayer-Framework bereithält ist man ohne Client-Server-Programmiererfahrung ganz schnell aufgeschmissen. Rollenspiele sind ein ziemlich großer Brocken um damit zu beginnen, das sind sie sogar dann noch wenn ihr Erfahrung habt. Ich spreche hier aus Erfahrung, mein erstes Spiel in Unity3D war ein Dungeoncrawler und nach einem Semester inklusive Unity3D erlernen und Gamedesign erstellen, haben 4 Programmierer (3 Anfänger und ein Fortgeschrittener) + ein Artist auch nur ein Demolevel mit 15-20 Minuten Spielzeit geschafft. Warum? Ein Rollenspiel erfordert enormen Programmieraufwand. Im Gegensatz zu einem Jump ‘n’ Run brauch ihr ein Rollenspiel-System, Erfahrungspunkte, Level, Eigenschaften, Skills und selbst wenn ihr das einfach haltet oder weglasst und nur ein Actionspiel macht, habt ihr viel mehr Interaktionsmöglichkeiten mit der Spielwelt, ihr braucht Gegenstände, Ausrüstung und ein Inventar. Auch das Leveldesign ist nicht zu unterschätzen. Ihr wollt womöglich Fallen und Rätsel und dann müsst ihr noch einen Dungeon bauen und dort alles Platzieren, inklusive der Gegner. Vorteil des ganzen, ihr könnt euch dort austoben und eine Menge lernen. Durch mein erstes Projekt habe ich mehr über Game- und Leveldesign und vor allem Unity gelernt als in allen nachfolgenden Projekten. Auf meine Rätsel und Fallen bin ich heute noch stolz (auf die Umsetzung, die Ideen sind nicht neu und alle schon mal irgendwo vorgekommen).

Und zum Schluss noch ein ganz wichtiger Tipp, der wichtigste Überhaupt, vergesst was ihr vorhin gelesen habt und überall anders gehört oder gelesen habt. Na, vielleicht nicht vergessen, aber nehmt es nicht zu wichtig. Macht was euch Spaß macht und wofür ihr euch interessiert. Es gibt nicht den einen richtigen Weg etwas zu lernen wenn ihr unbedingt ein Rollenspiel machen wollt, dann macht. Wenn ihr euch am nächsten WarCraft oder Tomb Raider versuchen wollt nur zu. Nur durch Herausforderungen kann man wachsen. Denkt aber auch daran, dass unmöglich große Schritte euch auch aufhalten können, wenn ihr euch nicht zumindest mit den Grundlagen ausstattet könnt ihr schnell den Spaß an der Sache verlieren. Und auch wenn man sich einfache Scripte ohne große Programmierkenntnisse erarbeiten kann, ist es nie verkehrt Programmieren zu lernen. Ihr könnt euch jeder Zeit an die Community wenden aber wenn ihr ohne konkrete Fragen dort auftaucht (z.B. ich weiß zwar nicht wie ich in Programmiersprache XY eine Verbindung zu einem Server aufbaue aber ich würde gerne eine Multiplayerlobby programmieren, wie geht das?), dann wird die erste und auch häufigste Antwort sein: Lern erstmal Programmieren. Das mag erstmal eine große Hürde darstellen aber Spieleentwicklung ist auch keine Sache die man sich schnell mal an einem Wochenende beibringt. Das heißt aber auch nicht, dass man vorher zum Topentwickler werden muss. Für den Anfang reicht es aus, sich mit den Grundlagen einer Programmiersprache zu befassen. Was sind Variablen, was sind Funktionen, welche Typen gibt es. Wie weiße ich Werte zu und manipuliere Daten. Welche Datenstrukturen und Contaienr gibt es. Damit kann man schon mal die meisten Tutorials mitmachen und dabei auch Verstehen was passiert. Nur so könnt ihr dann das Umsetzen was ihr haben möchtet. Dabei ist es egal wie eure Lösung aussieht, wenn sie funktioniert dann ist sie erstmal gut genug. Euer Code muss nicht super effizient sein oder toll aussehen. Ihr seid noch weit entfernt davon euch Sorgen machen zu müssen, dass euer Spiel nicht flüssig genug läuft. Wenn euer Code dann doch nicht so zuverlässig ist wie er sein sollte oder etwas zu langsam ist, dann müsst ihr euch ohnehin damit befassen und ihn verbessern oder Alternativen einsetzen. Solange ihr alleine Arbeitet reicht es, wenn ihr euch selbst in eurem Code auskennt. Aber das dann wenigstens richtig, schreibt Kommentare und zwar nicht zu knapp, selbst Dinge die jetzt offensichtlich erscheinen, können morgen schon nicht mehr nachvollziehbar sein.
Sollten die Grundlagen einmal sitzen und ihr euch an umfangreichere Mechaniken und Features heranwagen wollt, wird es Zeit sich mit objektorientierter Programmierung auseinander zu setzen. Komplexere Scripte sind ohne Klassen kaum umzusetzen. Werft auch mal einen Blick in die Dokumentation der Scripting API der Engine eurer Wahl. Nur so erfahrt ihr welche Elemente die Engine anbietet und was diese alles können. Das heißt aber nicht, dass ihr alles auswendig können müsst, ihr sollt nur wissen, wo ihr nachschlagen könnt.

What’s next?

Alleine ist es schwierig größere Projekte umzusetzen, entweder man arbeitet ewig daran oder man gibt bald auf. Viele haben auch Probleme damit, eine geeignete Idee für ein Spiel zu entwickeln, Spieleentwickler zu sein heißt nicht automatisch Gamedesigner zu sein. Sucht euch andere Leute um gemeinsam mit ihnen ein Spiel zu entwickeln. Es gibt genug Foren in denen man solche Leute und Projekte finden kann. Zusammen an einem Spiel zu arbeiten macht viel mehr Spaß, es ergeben sich Synergien und gemeinsam entwickelt man Ideen auf die man alleine nie gekommen wäre. Man kann sich Aufgabenbereiche aufteilen und somit seine Stärken ausspielen.
Eine weitere großartige Möglichkeit ein Spiel zu entwickeln und dabei noch etwas zu lernen, sind Game-Jams. Diese dauern meist nur ein Wochenende an dem ein kleines Spiel entwickelt wird. Das Thema ist meist vorgegeben und wird erst am Beginn der Jam bekanntgegeben. Game-Jams eignen sich auch hervorragend um Kontakte zu knüpfen.

Und zum Abschluss noch ein letzter Tipp. Diesmal wirklich. Habt keine Angst davor Fehler zu machen, egal ob technische Fehler, Designfehler oder organisatorische Fehler. Auch wenn ihr versucht alles richtig anzugehen, Fehler werden immer wieder passieren und das macht gar nichts, denn aus Fehlern lernt man gerade in der Spieleentwicklung sehr viel. Und wenn ein Projekt mal nicht so gelingt wie beabsichtigt oder gar nicht abgeschlossen werden kann, dann akzeptiert das und nehmt daraus so viel Erfahrung mit wie ihr könnt. Nachher kann man immer leicht sagen was man hätte besser machen können. Das könnte ich bei all meinen Projekten tun aber viel wichtiger ist was sie mir gebracht haben. Ich bereue bisher nur ein einziges Projekt. Die Wahl für dieses Projekt musste unter Zeitdruck – und ohne Details über die einzelnen Projekte zu wissen – getroffen werden. Kein Projekt zu wählen war keine Option. Mir ist dann recht schnell klar geworden, dass das Projekt mit dem Erfahrungsstand des Teams und dem vorgegebenen Zeitraum nicht realisiert werden kann. Ich wurde dann aber überstimmt und das Projekt ist dann tatsächlich nicht abgeschlossen worden.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert