1 Über Unity
Unity wird üblicherweise als Game-Engine (deutsch Spiel-Engine) bezeichnet, und das ist auch korrekt. Beschreibender wäre aber Entwicklungswerkzeug zur Erstellung von 2D- und 3D-Spielen und -Anwendungen für eine Vielzahl unterschiedlicher Zielplattformen einschließlich Virtual-Reality-Umgebungen. Streng genommen umfasst die Game-Engine an sich vor allem die einzelnen für Spiele notwendigen Systeme (wie Grafik, Physik, Audio, Steuerung und Skripting) sowie teilweise auch weiterführende Systeme, beispielsweise Netzwerkunterstützung oder auch das Speichern von Spielständen. Bis auf Letzteres (das Speichern von Spielständen) hat Unity das auch alles mit dabei. Wenn Sie mit Unity arbeiten, sehen Sie aber meistens den Unity Editor, also ein Autorensystem, das es erlaubt, alle für ein Spiel notwendigen Teile in Szenen zusammenzusetzen und damit ein komplettes Spiel zu erschaffen oder eben auch eine interaktive Anwendung. Denn Unity wird keineswegs nur zum Entwickeln von Spielen verwendet.
1.1 Unbegrenzte Möglichkeiten: ganz einfach!
Auch wenn Unity selbst inzwischen sowohl unter Windows als auch unter Mac OS X verwendet werden kann, merkt man ihm seine Mac-Ursprünge noch deutlich an:1 Die Benutzeroberfläche ist sehr einfach gehalten und zeigt dem Anwender meistens genau das, was er braucht. So findet man auch als neuer Anwender schnell den Einstieg. Die Komplexität der zugrunde liegenden Technologien bleibt dezent im Hintergrund verborgen. Fortgeschrittene Anwender haben dennoch Zugriff auf vieles, was »unter der Motorhaube« verborgen ist.
Surface Shader erleichtern die Shader-Programmierung
Ein schönes Beispiel hierfür sind die sogenannten Shader: kleine Programme, die auf der Grafikkarte ablaufen und dafür verantwortlich sind, dass die 3D-Modelle so auf dem Bildschirm erscheinen, wie der Spieler sie zu sehen bekommt. Unity bietet seit jeher eine große Auswahl vorgefertiger, spezialisierter Shader an, mit denen bereits eine Vielzahl von typischen Fällen abgedeckt ist. In vielen Fällen reicht das.
Man kann in Unity aber auch eigene Shader verwenden: Sämtliche Shader stehen auch im Quellcode zur Verfügung, können also als Grundlage für eigene Entdeckungsreisen und Experimente dienen. Fortgeschrittene Anwender können diese Shader also anpassen oder ihre ganz eigenen Shader programmieren.
Doch damit nicht genug: In Unity 3 wurden sogenannte Surface-Shader eingeführt. Somit muss der Shader-Programmierer sich in den meisten Fällen nur noch um die Besonderheiten in der Darstellung kümmern, während beispielsweise der Shader-Code für verschiedene Arten von Lichtquellen und Renderpfade2 automatisch von Unity generiert wird. Natürlich steht es dem Anwender auch frei, seine ganz eigenen Algorithmen zu entwerfen – wenn er das möchte.
Seit Unity 5 bietet die Game-Engine auch zwei universelle, physikbasierte Shader3, die auf intuitive Art und Weise für unterschiedlichste Materialien verwendet werden können – egal ob das nun Metall, Plastik, Holz oder Stoff ist. Im Hintergrund erzeugt Unity dafür automatisch unterschiedlichste Shader, die nur genau das können, was für das konkrete Material benötigt wird. Mit dieser Komplexität muss sich der Anwender aber nicht beschäftigen, wenn er das nicht möchte.
Man hat also zwei universell einsetzbare Shader, die in vielen Fällen ausreichen. Wenn nicht, hat man eine Vielzahl spezifischer Shader zur Auswahl. Reicht auch das nicht, kann man Surface Shader programmieren, bei denen man sich auf das Wesentliche konzentrieren kann und nicht selbst dafür sorgen muss, dass der Shader auch mit allen Beleuchtungsmodi und Renderpfaden klarkommt. Aber wenn man sich auch darum selbst kümmern möchte, kann man seine Shader auch komplett selbst schreiben und hat damit die volle Freiheit, die volle Kontrolle, aber auch die volle Verantwortung.
Unitys flüssige Asset Pipeline ist Gold wert
Besonderes Augenmerk verdient die sogenannte Asset Pipeline in Unity: Bei der Spielentwicklung hat man es mit einer Vielzahl unterschiedlicher sogenannter Assets zu tun. Assets sind im Prinzip einfach alle Dateien, die in einem Spiel oder einer interaktiven 3D-Anwendung verwendet werden: 3D-Modelle, Texturen, Audiodateien und nicht zuletzt Scripts (also Programmcode). Häufig müssen diese Assets speziell für die jeweilige Game-Engine aufbereitet werden. Teilweise müssen Programmierer erst entsprechende Routinen entwickeln, um Dateien – beispielsweise aus Blender4 – in ein Spiel einzubinden. Jedes Mal, wenn eine eingebundene Datei verändert wird, muss die Datei zuerst wieder in das entsprechende Format übertragen und das Spiel neu kompiliert werden, um schließlich nach längerer Wartezeit die Änderung im Spiel zu sehen und prüfen zu können. Aufgrund des komplexen, mehrstufigen Prozesses spricht man auch heute noch von einer (Asset) Pipeline.
Bei Unity funktioniert das anders: Wir ziehen unsere Assets einfach in das Projekt und klicken auf Play. Fertig. Ändern wir die Datei mit der jeweiligen Anwendung, in der diese Datei erstellt wurde, erkennt Unity diese Änderungen, sobald das Fenster wieder den Fokus hat – sogar während das Spiel im Editor läuft.5 Das nimmt im wahrsten Sinne des Wortes den »Schmerz aus der Spielentwicklung«.6 Ebenso können wir in Unity während des Spielens im Editor sämtliche Spielparameter ändern – sodass man sein Spiel in weiten Teilen buchstäblich »spielend« entwickelt.
Einfach, aber unbeschränkt
Trotz dieser Einfachheit ist Unity ausgesprochen flexibel: So gab es beispielsweise auch schon früher viele Anwender, die Unity zur Entwicklung von 2D-Spielen verwendet haben, auch wenn das Werkzeug ursprünglich zur Entwicklung von 3D-Spielen gedacht war. Seit Unity 4.3 bietet die Game-Engine auch explizite 2D-Unterstützung mit Sprites und 2D-Physik. Vor allem legt Unity aber kein spezifisches Spielgenre fest: Ob man nun beispielsweise ein Rennspiel, eine Flugsimulation, ein Knobel-Puzzle, ein Rollenspiel oder einen First-Person-Shooter (FPS) entwickeln möchte – die Entwicklungsumgebung unterstützt die Kreativität des Anwenders, ohne ihn durch eine Spezialisierung auf einzelne Genres in den Möglichkeiten einzuschränken. Das zeigt sich auch darin, dass mit Unity nicht nur Spiele entwickelt werden.
1.2 Zielplattformen: viele!
Eine weitere Besonderheit von Unity ist, dass eine Vielzahl von Zielplattformen unterstützt wird. So ist es möglich, aus einem einzigen Spielprojekt heraus Versionen für Linux, Apples Mac OS X und Microsoft-Windows-Betriebssysteme zu erzeugen, einschließlich Windows Store Apps. Ebenso ist es mit dem gleichen Projekt möglich, sogenannte Web Player zu erstellen, die mit einem Plug-in für alle gängigen Webbrowser ebenfalls unter Mac OS X und Windows lauffähig sind. Für moderne Browser kann Unity WebGL-Versionen Ihres Spiels erstellen, die dann auch ohne Plug-in-Installation funktionieren, auch unter Linux. Somit können Sie Unity-Spiele direkt in Webseiten einbinden und sehr einfach einer riesigen Anzahl potenzieller Spieler zur Verfügung stellen.
Mobile Geräte
Mit Unity iOS, Unity Android, Unity Windows Phone 8 und Unity Blackberry 10 kann auch praktisch der komplette mobile Spielemarkt angesprochen werden. Die Entwicklung für mobile Plattformen ist ein komplexes Thema, und es würde den Rahmen des vorliegenden Buches sprengen, es im Detail zu beschreiben. Dennoch werde ich Ihnen an einigen Stellen Tipps geben, um mögliche Hindernisse aus dem Weg zu räumen, falls Ihr eigenes Spiel auch auf mobilen Endgeräten laufen soll. Durch die rasante Entwicklung immer leistungsfähigerer mobiler Hardware wird auch der Aufwand, ein Spiel für Smartphones anzupassen, immer geringer und reduziert sich mehr und mehr auf die elegante Nutzung alternativer Eingabe- und Steuerungsmöglichkeiten.
Eine Plattform für sich: Virtual Reality
Ein alter Traum vieler Spielentwickler, der nun nach Jahrzehnten der Wartezeit endlich wahr zu werden scheint, ist Virtual Reality. Mit dem Oculus Rift gibt es zumindest ein Head-Mounted Display, das nicht nur finanziell erschwinglich ist, sondern bereits mit den heute verfügbaren Prototypen ein beeindruckendes Maß an sogenannter Immersion (etwa: Eintauchen in virtuelle Realität) ermöglicht. Zudem wird es bereits von Unity als Zielplattform voll unterstützt. Auch das Thema Virtual Reality könnte für sich ein ganzes Buch füllen. Sie werden aber zumindest in Abschnitt 9.5 lernen, wie man Builds für die Oculus Rift erstellt und Spiele für diese Plattform einer entsprechenden Spielerschaft zugänglich machen kann. In Kapitel 18 wagen wir einen kleinen Einstieg in diese ganz neue Dimension von Spielerfahrung.
Auch Sony hat bereits ein Virtual-Reality-System unter dem Arbeitstitel Project Morpheus in der Entwicklung, das neben Oculus Rift eine sehr interessante Zielplattform für Virtual-Reality-Anwendungen werden dürfte. Unity Technologies hat auch dafür bereits Unterstützung angekündigt7, was uns direkt zur gewissermaßen klassischen Plattform für Spiele führt: den Konsolen.
Totgesagte leben länger: Konsolen
Schließlich kann Unity auch Builds für Konsolen wie Nintendo Wii und Wii U, Microsoft Xbox360 und Xbox One sowie Sony PlayStation 3, 4 und Vita erstellen. Somit können Sie Ihre Unity-Projekte also auch für Konsolen anbieten. Dabei ist allerdings zu beachten, dass hierzu oft die Teilnahme an entsprechenden Entwicklerprogrammen notwendig ist, die teilweise sowohl finanziell als auch mit ihren Teilnahmebedingungen selektive Anforderungen an die Entwickler stellen.8 Dafür sind die entsprechenden Unity-Lizenzen bei manchen Entwicklerprogrammen bereits enthalten. Es entstehen dann also keine weiteren Kosten. Auf Besonderheiten bei der Entwicklung für Konsolen wird im vorliegenden Buch jedoch nicht näher eingegangen.
1.3 Entwicklungsplattformen: Mac und Windows
Auch bei den Plattformen, auf denen die Entwicklungsumgebung selbst läuft, ist Unity flexibel: Seit der Version 2.5 gibt es auch eine Version für Windows. Somit kommen sowohl Mac- als auch Windows-User gleichermaßen in den Genuss, mit Unity zu arbeiten. Eine Einschränkung aufgrund von Apple-Bestimmungen gibt es bei der iOS-Entwicklung: Da nur mit Xcode entwickelte Programme im AppStore zugelassen sind, war für die Entwicklung von Spielen für iPod, iPad und iPhone ein Mac notwendig. Diese Einschränkung ist mit Unity Cloud Build9 bereits Geschichte.
Link auf unity-buch.de
Ebenso erfordert die Entwicklung von Windows Store Apps und für Windows Phone 8, dass auf dem Rechner Visual Studio installiert ist – hier braucht man also auf jeden Fall Windows. Im Moment sind Builds für diese Zielplattform mit Unity Cloud Build noch nicht explizit angekündigt. Es ist aber immerhin angekündigt, dass mit der Zeit weitere Zielplattformen unterstützt werden sollen.
1.4 Unter der Motorhaube: Bekannte Technologien
Unity integriert eine Vielzahl bekannter Technologien und Bibliotheken. Dies erspart es nicht nur den Entwicklern von Unity, das »Rad neu zu erfinden«, sondern vereinfacht den Einstieg in Unity auch für Anwender, die mit diesen Technologien bereits vertraut sind.
Link auf unity-buch.de
Scripting in Unity basiert auf dem Mono-Framework. Somit steht Entwicklern neben der Unity-spezifischen API10 zur Spielentwicklung eine mächtige, ausgereifte Bibliothek zur Verfügung, die weitgehend dem. NET-Framework von Microsoft entspricht. Als Programmiersprachen werden bei Unity C#, JavaScript (eigentlich handelt es sich um eine Sprache namens UnityScript) sowie Boo11 (eine auf Python basierende Programmiersprache) unterstützt.
Im Folgenden erwähne ich einige weitere Technologien beispielhaft, die Unity intern verwendet. Angenehmerweise ist zum Arbeiten mit Unity ein tieferes Verständnis dieser Technologien oft nicht erforderlich, da sie weitgehend hinter einer einfachen, leicht zu erlernenden Benutzerschnittstelle versteckt s...