Einstieg in die Spieleentwicklung mit der Unreal Engine 5
Was ist eine Spieleengine?
Eine Spieleengine ist ein Framework, das für die Entwicklung von Computerspielen genutzt werden kann. Der Begriff bezeichnet dabei sowohl das Framework an sich, als auch die Programme, die zur Entwicklung mit dem Framework benutzt werden. Es gibt viele populäre Spieleengines, wie Unity, Source Engine oder die Unreal Engine. Diese drei sind besonders für die Entwicklung von komplexen 3D-Projekten ausgelegt, z.B. Spiele, Showcases oder Produktkonfiguratoren. Sie werden aber auch für komplizierte Simulationen oder Architekturprojekte genutzt.
Unreal Engine
Die Unreal Engine ist eine von Epic Games entwickelte Spieleengine, die besonders großen Fokus auf eine (foto-)realistische Darstellung von 3D-Welten legt. Grundsätzlich kann sich jeder die Unreal Engine kostenlos herunterladen und sogar auf den Source Code zugreifen. Gebühren an Epic Games werden erst ab einem Umsatz von 1.000.000$ fällig. Die neueste Version, Unreal Engine 5, wird von vielen Triple-A-Spielen genutzt.
Um den Start zu erleichtern, gibt es Entwürfe für Spiele, zum Beispiel ein „Third Person Template“, welches einen spielbaren Charakter mitbringt, der direkt genutzt werden kann.
Abbildung 1: Übersicht über die Standardansicht des Editors
Obwohl die Unreal Engine besonders komplex ist, ist die Oberfläche sehr übersichtlich aufgebaut. Auf einen Blick sieht man alle Assets, die einem zur Verfügung stehen, optionale Detailansichten, sowie einen Level-Editor, mit dem sich z.B. Level für Spiele bauen lassen. Um Assets mit Logik zu verknüpfen, muss programmiert werden. Hierfür gibt es zwei Optionen: Entweder man entscheidet sich für das klassische Programmieren mit C++, oder man benutzt die in den Editor integrierten Blueprints. Blueprints bieten eine grafische Oberfläche, mit der ohne viel Erfahrung programmiert werden kann. In Unreal werden mit Logik verknüpfte Assets‚ Akteure‘ genannt. In der objektorientierten Programmierung würde man einen Blueprint auch als Klasse bezeichnen.
Blueprints
Um einen Blueprint-Akteur zu erstellen, wird zuerst ein neuer Blueprint angelegt. Diesem können dann in einer 3D-Ansicht, dem sogenannten Viewport, Assets hinzugefügt werden, aus denen die Ansicht dieses Blueprints bestehen soll. So kann zum Beispiel aus Reifen, Karosserie und vielen weiteren Einzelteilen ein Auto entstehen. Am Ende kann der Blueprint dann einem Level hinzugefügt werden, und der Spieler sieht ihn als ein einziges Objekt in der Spielwelt.
Im Eventgraph findet das tatsächliche Programmieren mit Blueprints statt. Anstatt jedoch Code zu schreiben, werden hier Nodes genutzt. Nodes sind der zentrale Bestandteil von Blueprints in der Unreal Engine.
Abbildung 2: Nodes in einem Blueprint, die miteinander verbunden sind
Nodes werden als Kästchen dargestellt und repräsentieren ausführbaren Code. Hinter jeder Node stehen Funktionen, die aus dem C++-Code der Unreal Engine kommen, hier aber über die Blueprints aufgerufen werden können. Genau wie Funktionen in anderen Programmiersprachen haben Nodes Eingabe- und Ausgabewerte. Diese werden in Unreal als Pins bezeichnet. Per Drag und Drop können die Ausgabepins einer Node mit den Eingabepins einer anderen verbunden werden. Dadurch entsteht ein tatsächlicher Programmablauf, ohne überhaupt Code geschrieben zu haben. Wie in anderen Programmiersprachen können hier natürlich auch konditionale Abläufe (Branch genannt), Schleifen, etc., genutzt werden, um den Programmablauf spezifisch anzupassen.
Pins und die daraus resultierenden Verbindungselemente sind farblich codiert, um einen einfachen Überblick über miteinander kompatible Pins zu geben. Es gibt allerdings auch Konvertierungsnodes, die zum Beispiel einen numerischen Wert in einen Text umwandeln.
Abbildung 3: Nutzung des Events „Event Tick“ in einem Blueprint
Im oberen Beispiel wird auf das Event „Event Tick“ reagiert, und dort dem Akteur eine Rotation hinzugefügt. Obwohl diese nur sehr klein ist, sieht es so aus, als ob der Akteur sich um seine eigene Achse dreht, weil dieser Teil des Blueprints mit jedem „Tick“ der Spieleengine ausgeführt wird. In der Unreal Engine ist die Frequenz der Ticks an die Framerate gebunden und bezeichnet jeweils eine Ausführung des gesamten Codes des „Main Game Loops“, also aller für das Spiel wichtigen Codebestandteile.
Blueprints funktionieren wie Klassen in objektorientierten Programmiersprachen. Sie können Membervariablen haben, private und öffentliche Funktionen zur Verfügung stellen, bieten einen eigenen Konstruktor und vieles mehr. Wenn man in einem Blueprint eine Funktion schreibt, lässt sie sich im restlichen Blueprint wie jede andere Node aufrufen und benutzen.
Fazit
Der Vorteil einer grafischen Programmiersprache wie den Blueprints liegt auf der Hand: Selbst Nicht-Entwickler haben es hiermit sehr leicht, Code zu schreiben und ein ganzes Spiel zu entwickeln.
Bei größeren Spieletiteln werden die Blueprints aber irgendwann vermutlich nicht mehr reichen. Auch wenn die Ausführungsgeschwindigkeit der einzelnen Nodes genauso schnell wie der darunterliegende C++-Code ist, bringen die Blueprints einen gewissen Overhead mit sich, der das Programm verlangsamt. Auch die Übersichtlichkeit ist bei großen, komplexen Blueprints nicht mehr so, wie sie es in normalem Programmcode wäre.
Aus meiner Sicht als Softwareentwickler sind Blueprints trotzdem eine tolle Sache. Sie machen es mir sehr leicht, Logik für Assets zu schreiben, die ich in meiner Spielwelt benutzen will, ohne dass ich eine ganz neue Programmiersprache erlernen muss.
Das allerbeste an der Unreal Engine ist aber: Jeder kann sich die neueste Version komplett kostenlos herunterladen und sich sein eigenes Spiel entwickeln. Was wirst du machen?
Softwareentwicklung