image

image

Jashan Chittesh ist Diplom-Informatiker und arbeitet freiberuflich als Softwareentwickler. Seit 2007 entwickelt er mit Unity Computerspiele und gründete 2011 dazu die Firma narayana games. Seine Kenntnisse gibt er in Form von Unity-Workshops unter anderem an der Filmakademie Ludwigsburg weiter.

image

Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:

www.dpunkt.de/plus

Das Unity-Buch

2D- und 3D-Spiele entwickeln mit Unity 5

Jashan Chittesh

image

Jashan Chittesh

jashan@narayana-games.net

Lektorat: René Schönfeldt

Copy-Editing: Friederike Daenecke, Zülpich

Satz: Petra Strauch, Bonn

Herstellung: Frank Heidt

Umschlaggestaltung: Helmut Kraus, www.exclam.de

Druck und Bindung: Stürtz GmbH, Würzburg

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen

Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:

Buch 978-3-86490-232-1

PDF 978-3-86491-679-3

ePub 978-3-86491-680-9

1. Auflage 2015

Copyright © 2015 dpunkt.verlag GmbH

Wieblinger Weg 17

69123 Heidelberg

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die im Zusammenhang mit der Verwendung dieses Buches stehen.

5 4 3 2 1 0

Vorwort

Unity ist eine Entwicklungsumgebung für Spiele und interaktive 3D-Anwendungen sowohl für Einsteiger als auch für Profis. Durch eine außergewöhnlich intuitive und einfache Benutzeroberfläche ist diese Game-Engine sehr gut zum Einstieg in die Spielentwicklung geeignet. Darüber hinaus bietet Unity auch dem fortgeschrittenen Spielentwickler beeindruckende und fast unbegrenzte kreative Möglichkeiten. Natürlich darf auch mit einem so komfortablen und doch mächtigen Werkzeug der Aufwand bei der Spielentwicklung nicht unterschätzt werden. Mit dem richtigen Know-how, etwas Talent und vor allem Beständigkeit kann mit Unity jedoch auch ein Einsteiger eine auf seine jeweiligen Fähigkeiten abgestimmte Spielidee in absehbarer Zeit in ein spielbares Produkt verwandeln. Sie werden nicht schon übermorgen das nächste große MMO auf dem Markt haben (der große grüne Button dazu fehlt Unity noch ;-)). Aber wenn Sie sich mit Unity intensiver befassen, haben Sie sicher in wenigen Monaten das eine oder andere kleine Spiel, das Ihnen, Ihren Freunden und Bekannten Freude bereitet. Und wer weiß: Manchmal haben auch kleine, einfache Spiele großen Erfolg. Dann erfreuen Ihre Spiele vielleicht sogar die ganze Welt! Und wenn Sie dranbleiben, haben Sie vielleicht eines Tages Ihr eigenes Spielentwicklungsstudio und produzieren richtig große Titel. Dieses Buch ist dazu vielleicht der Anfang.

Über dieses Buch

Das Unity-Buch hat vor allem die Absicht, das entsprechende Know-how auf allen relevanten Ebenen zu vermitteln und interessierten Anwendern mit grundsätzlichen Programmierkenntnissen einen möglichst mühelosen Einstieg in die Spielentwicklung mit Unity zu bieten.

Ich möchte Sie also auf eine Reise einladen, bei der wir gemeinsam auf spielerische Weise ein Spiel mit mehreren Variationen entwickeln. Dabei begegnen wir verschiedenen Bereichen von Unity, meistern Herausforderungen und entdecken in kleinen und größeren Schritten die unbegrenzten Möglichkeiten der Spielentwicklung. Gemeinsam betreten wir hier eine Welt, deren Horizont so weit reicht wie unsere Fantasie. Alles, was wir dann noch brauchen, ist die Bereitschaft, unsere Zeit der Verwirklichung der Ideen zu schenken, die aus dieser Fantasie geboren wurden.

Voraussetzungen

Spielentwicklung ist ein weites Feld, bei dem man eine Vielzahl von Talenten und Fähigkeiten einbringen kann. Im Umkehrschluss bedeutet das auch, dass man mit einem einzigen Buch nicht alles lernen kann, was man für die Entwicklung aller möglichen Spiele braucht. Speziell im Bereich 3D-Modelling und Programmierung verweise ich daher auf weiterführende Literatur, falls Sie Ihre Fähigkeiten dazu auffrischen wollen. Die Programmierbeispiele in C# sind vor allem am Anfang so erklärt, dass minimale Programmierkenntnisse in beliebigen Programmiersprachen zum Verständnis ausreichen sollten. Wenn Sie C# oder eine ähnliche Programmiersprache wie Java bereits können ist das natürlich von Vorteil. Kenntnisse in anderen Sprachen wie JavaScript oder Python können Sie in Unity ebenfalls gut einsetzen.

Wie Sie dieses Buch am besten lesen

Dieses Buch soll bewusst nicht als Referenz oder Nachschlagewerk dienen. Dazu gibt es das Unity Manual, das automatisch immer auf dem aktuellsten Stand von Unity ist und somit natürlich viel besser mit der schnellen Entwicklung der Game-Engine Schritt halten kann als jedes gedruckte Werk. Vielmehr ist dieses Buch als Reiseführer zu verstehen, der Sie Schritt für Schritt durch die Höhen und Tiefen des Entwicklungsprozesses verschiedener Variationen einer Spielidee führt. Dieser Reiseführer gibt Ihnen an vielen Stellen auch Vorschläge für eigene Entdeckungsreisen bis in die tiefsten Tiefen des Kaninchenbaus: teilweise in Form von Stichworten und Links, die Ihnen gute Einstiegspunkte für eigenen Recherchen bieten …

Übung macht den Meister

… teilweise auch durch anspruchsvollere Übungen, zu deren Umsetzung Sie meistens die im Buch beschriebenen Features und Workflows nutzen können, sich manchmal aber auch selbstständig zusätzliches Wissen aneignen müssen. Sie erkennen die Übungen leicht an der Marginalie Übung macht den Meister.

Von Anfang bis Ende

Insofern empfiehlt es sich natürlich auch, das Buch von Anfang bis Ende durchzuarbeiten und lediglich die Abschnitte, deren Inhalt Ihnen bereits vertraut ist, nur kurz zu überfliegen, um zu sehen, ob es da nicht doch noch ein Detail gibt, das Ihnen unbekannt ist.

Nachschlagen

Vielleicht werden Sie manchmal Ihr Wissen zu einem bestimmten Thema schnell mithilfe dieses Buches auffrischen oder einen bestimmten Trick nachlesen wollen. Dazu dient das ausführliche Stichwortverzeichnis. Mein Anliegen beim Schreiben des Buches war es, jeden Begriff und dazu passende Synonyme zu erfassen, die für so eine Suche infrage kommen könnten. Ich hoffe, dass mir dies gelungen ist und dass das Stichwortverzeichnis für Sie genau diesen Zweck erfüllt! Falls Sie einmal etwas nicht finden sollten: Lassen Sie mich das bitte wissen!

Die Website zum Buch: unity-buch.de

Die beste Möglichkeit, um sowohl mit Ihren Reisegefährten während der Spielentwicklung als auch mit mir in Kontakt zu treten, ist die Website zum Buch: unity-buch.de. Website und Buch gehören zusammen und ergänzen sich: Wenn Das Unity-Buch Ihr Reiseführer ist, dann ist unity-buch.de Ihr Portal in die Welt, die wir jetzt gemeinsam bereisen. Gleichzeitig spannt die Website ein soziales Netz aller Leser dieses Buches auf, die sich auf diese Weise beteiligen und ihre Reise mit anderen teilen wollen.

Grundsätzlich orientieren sich die verschiedenen Bereiche der Website am Inhaltsverzeichnis des Buches: Sie können also nach der Lektüre eines Kapitels im Buch auf die Website gehen und finden dort leicht alle Ressourcen, die zu diesem Kapitel passen. Zusätzlich bietet die Website aber auch Ansichten anhand verschiedener thematischer Kriterien und erlaubt Ihnen so auch eine ganz individuelle Reiseroute.

Downloads von unity-buch.de

Im Bereich Downloads auf unity-buch.de finden Sie nicht nur jeden Entwicklungsschritt unserer Beispielprojekte1, sondern auch Pakete mit rohen Beispielcodes, Bildern, Sounds und 3D-Modellen. Diese können Sie auch zur selbstständigen Umsetzung der Beispielprojekte oder neuen Varianten davon nutzen, falls Sie mangels Zeit oder entsprechend kultivierten Talents diese Dateien nicht selbst erstellen können oder wollen.

Beachten Sie bitte, dass diese Dateien lediglich Ihrem Lernen oder auch als Vorlage für eigene Dateien dienen und in Ihren eigenen Projekten nur nach schriftlicher Genehmigung verwendet werden dürfen.2 Natürlich können Sie auch für unsere gemeinsamen Beispielprojekte Ihre eigenen Kreationen verwenden. Alle Stellen im Buch, die auf einen Download verweisen, erkennen Sie leicht an dem Text Download von unity-buch.de neben dem Haupttext.

Falls Sie eine langsame Internet-Verbindung haben oder viel unterwegs sind: Es gibt auch ein Komplettpaket zum Download mit allen Einzel-Downloads und sämtlichen Screencasts (s. u.). Das können Sie über eine schnelle Internet-Verbindung herunterladen und dann auf Ihren Rechner übertragen.

Screencasts auf unity-buch.de

Manche Dinge lassen sich mit Worten und selbst mit Bildern nur sehr schwer beschreiben. In diesen Fällen habe ich Screencasts erstellt, also kleine Tutorial-Videos, um den Sachverhalt für Sie leicht verständlich zu veranschaulichen. Auch auf diese Screencasts verweise ich an entsprechenden Stellen im Buch, jeweils mit dem Text Screencast auf unity-buch.de. Auf unity-buch.de finden Sie im Bereich Screencasts alle Videos, die im Buch erwähnt werden, sowie ergänzende Tutorials.

Links auf unity-buch.de

Neben den Dateien und Videos bietet die Website zum Buch auf unity-buch.de noch eine Vielzahl weiterführender Links, auf die häufig auch im Buchtext verwiesen wird. Das erkennen Sie auch am Text Link auf unity-buch. de. Natürlich müssen Sie nicht sofort alle von der Website aus verlinkten Artikel lesen, und die Artikel, die wiederum von dort aus verlinkt sind, und so weiter – bis Sie das gesamte Internet bereist und verspeist haben. Aber schrittweise können Sie über diese Links Ihren Horizont erweitern, tolle Gegenden im World Wide Web kennenlernen und Ihre Kenntnisse in allen für die Spielentwicklung relevanten Bereichen immer weiter vertiefen. Im Bereich Links auf unity-buch.de finden Sie alle Links zum Buch: sowohl nach Abschnitten sortiert, sodass Sie nach der Lektüre eines Abschnitts im Buch dessen Inhalte komfortabel auf der Website vertiefen können, als auch nach thematischen Kriterien. Außerdem merkt die Seite sich, welchen Links Sie bereits gefolgt sind3 – so haben Sie jederzeit den Überblick über Ihren Fortschritt.

Das Fragen-Forum auf unity-buch.de

Link auf unity-buch.de

Im Bereich Fragen-Forum finden Sie ein deutsches Forum für Fragen im Stil von StackOverflow oder Unity Answers (siehe auch die Links auf der Website zum Buch). Bitte zögern Sie nicht, mich über dieses Forum zum Buch zu fragen. Gerne auch, falls Ihnen mal ein Stichwort im Stichwortverzeichnis fehlt: Zum einen kann ich Ihnen wahrscheinlich leicht helfen, die entsprechende Stelle im Buch zu finden; zum anderen gibt mir das auch die Möglichkeit, das Stichwortverzeichnis in der nächsten Auflage entsprechend zu erweitern und auch auf der Website zum Buch für andere Studienreisende in Sachen Spielentwicklung einen entsprechenden Vermerk im Bereich Errata zu hinterlassen.

Das Fragen-Forum arbeitet mit sogenannten Tags, wie 2D, 3D, C#, Physik, Unity UI, Asset Store, Stichwortverzeichnis oder auch Errata. Jeder Frage können Sie ein bis fünf solcher Tags zuordnen, und natürlich können Sie über die Tags auch zu diesem Tag passende Fragen suchen und damit vielleicht sehr schnell eine Antwort finden.

Was Sie in diesem Buch lernen: more than just facts

Nach der Lektüre von Das Unity-Buch sollten Sie genügend über wesentliche Bereiche der aktuellsten Version von Unity wissen, um Ihre eigenen Spielideen erfolgreich umsetzen zu können. Es wird zwar nicht jedes Feature beschrieben, und vor allem nicht bis ins letzte Detail. Dafür werden Sie aber am Ende dieses Buches einen sehr guten Orientierungssinn entwickelt haben: einerseits, um bei Bedarf mühelos bis ans letzte Detail aller Unity-Features zu gelangen, um sie bestmöglich zur Umsetzung Ihrer Spielidee zu nutzen; andererseits, um sich in dem manchmal sehr herausfordernden Prozess der Entwicklung von Spielen zurechtzufinden.

Das ist ein weiterer Grund, aus dem ich Ihnen mit dem Fragen-Forum auf der Website zum Buch anbiete, sich mit anderen Entwicklern zu vernetzen: Gerade in den schwierigen Phasen und vor allem am Anfang kann ein Austausch mit Reisegefährten den notwendigen Schub verleihen, um in den Hyperspace durchzubrechen, anstatt in Stagnation zu geraten und am Ende aufzugeben!

Spielentwicklung ist nicht nur ein enorm weites und gleichzeitig sehr tiefes, komplexes und herausforderndes Feld, sondern auch eines, in dem eine unglaublich schnelle Weiterentwicklung geschieht: Unity kenne ich persönlich seit Version 2.0 – das war Ende 2007. Inzwischen sind wir bei Version 5.0, und ganze Bereiche sind neu dazugekommen. Andere sind praktisch nicht mehr wiederzuerkennen, und manche Features sind auch weggefallen. Es macht großen Spaß, über immer modernere und mächtigere Werkzeuge zu verfügen und immer elegantere Workflows zu nutzen, die mit geringerem Aufwand hochwertigere Ergebnisse ermöglichen. Das bedeutet aber auch, dass man praktisch die ganze Zeit über Neues lernen muss, ohne sich dabei mit der technischen Entwicklung zu verzetteln. Genau dazu soll dieses Buch motivieren. Deswegen schreibe ich über einige Themen bzw. Features nur so viel, dass Sie das Feature gut in den Gesamtprozess der Spielentwicklung einordnen und sich die Details dann selbstständig aneignen können. Die Website unity-buch.de mit den weiterführenden Links dient als Einstiegspunkt für diese Vertiefung.

Link auf unity-buch.de

Leider sind viele für die Spielentwicklung relevante Artikel nur auf Englisch verfügbar. Das gilt auch für die Dokumentation von Unity. Dieses Buch ist in deutscher Sprache verfasst, daher gebe ich – wo möglich – Verweise auf deutsche Artikel. Es gibt auch bereits seit April 2010 Unity Insider, ein aktives deutsches Unity-Netzwerk mit Diskussionsforum.4 Dort finden Sie auch eine Initiative für ein deutsches Dokumentations-Wiki.5 Möglicherweise wird es hier später auch von Unity Technologies selbst etwas geben.6 Microsoft hat praktisch das komplette Microsoft Developer Network (MSDN) und damit auch die Dokumentation von C# und vom. NET Framework auf Deutsch übersetzt7 – und wie wir noch sehen werden, nutzt das auch uns als Unity-Entwickler.

Dennoch lohnt es sich für jeden Spielentwickler, sich auch mit der englischen Sprache anzufreunden. Denn bei der Spielentwicklung machen gute Englischkenntnisse einem das Leben deutlich einfacher. Viele für uns Spielentwickler relevante Ressourcen sind in dieser Sprache verfasst, und je mehr Sie auf Englisch lesen, desto leichter wird es mit der Zeit. Auch hier gilt: Übung macht den Meister! Vielleicht reisen Sie ja auch mal in ein englischsprachiges Land.

Wir reisen jetzt erst mal gemeinsam in die wundervolle Welt der Spielentwicklung. Das Fahrzeug, mit dem wir diese Reise antreten, ist Unity – und das nächste Kapitel habe ich einer ersten Vorstellung dieses Fahrzeugs gewidmet. Let the game begin!

Jashan Chittesh, 3. März 2015

Danksagungen

Zunächst ein riesiges Dankeschön an Joachim Ante, Nicholas Francis und David Helgason dafür, dass sie Unity zu einem Produkt entwickelt und der Welt zur Verfügung gestellt haben. Ohne diese drei Gründer von Unity Technologies (ursprünglich OTEE – Over The Edge Entertainment) würde es Unity und damit dieses Buch gar nicht geben. Dieses Dankeschön erstreckt sich natürlich auch weiter auf alle inzwischen über 500 Mitarbeiter von Unity Technologies – you girls and guys rock!

Dieses Buch würde es auch nicht geben ohne meinen Lektor René Schönfeldt, der den gesamten Prozess von Anfang bis Ende mit tollen Anregungen, geduldig und wohlwollend unterstützt hat. Dafür ein ganz herzliches Dankeschön!

Wertvolles Feedback habe ich auch von den Fachgutachtern erhalten, namentlich seien hier Martin Schulz, Marcus Ross und Julia Schmidt genannt.

Weiterhin möchte ich Friederike Daenecke für die wertvolle Rechtschreibkorrektur und Petra Strauch für den Satz dieses inzwischen doch recht umfangreichen Werkes danken!

Gestalterische Unterstützung erhielt ich von Nicole Delong und Sebastian Weidner. Hervorzuheben ist hier vor allem die neue 2D-Art für Snake sowie das GUI-Design von Nicole und die Profi-Tipps zum Postprocessing des Buchcovers von Sebastian. Danke auch für Eure Freundschaft!

Dankbarkeit aus tiefstem Herzen fühle ich natürlich auch für meine Lebensgefährtin Mirimah, die vor allem in den heißen Schreibphasen geduldig, verständnisvoll und liebevoll unterstützend die Erschaffung dieses Buches begleitet hat.

Inhaltsverzeichnis

Vorwort

1       Über Unity

1.1    Unbegrenzte Möglichkeiten: ganz einfach!

1.2    Zielplattformen: viele!

1.3    Entwicklungsplattformen: Mac und Windows

1.4    Unter der Motorhaube: Bekannte Technologien

1.5    Lizenzkosten: Es geht auch ohne

1.6    Wer Unity verwendet: ein großes Spektrum

2       Ein erstes einfaches 2D-Mini-Spiel

2.1    Die Unity-Game-Engine installieren

2.2    Erste Schritte mit Unity gehen: der Editor

2.2.1     Unser gesamtes Projekt: Project Browser

2.2.2     Die Hierarchie einer Szene: Hierarchy

2.2.3     Objekte der Szene im Raum: Scene View

2.2.4     Eigenschaften von Objekten: Inspector

2.2.5     Game View: Endlich spielen!

2.2.6     Was zeigt die Game View eigentlich? Kameras in Unity

2.2.7     Mit Layern und der Culling Mask arbeiten

2.2.8     In Project, Hierarchy und Scene View suchen

2.2.9     Weitere Views

2.2.10   Layouts

2.3    2D-Features in Unity verstehen

2.3.1     Sprites importieren und mit dem Sprite Editor bearbeiten

2.3.2     Den Sprite Renderer zur Darstellung von Sprites verwenden

2.3.3     Sortierung von Ebenen mit Sorting Layers einrichten

2.3.4     Einfache 2D-Animationen mit Mecanim und Dope Sheet erstellen

2.3.5     2D-Physik zum Erkennen von Kollisionen und Aufsammeln von Äpfeln einsetzen

2.3.6     Parallax Scrolling hinzufügen

2.3.7     Was mit ein wenig Editor-Scripting möglich ist

2.4    Erforschen und verändern

2.5    Mehr über die Entwicklung von 2D-Spielen mit Unity lernen

3       Unser Projekt: Traces of Illumination

3.1    Vorteile als Beispielprojekt

3.2    Spielmechanik und Begriffswelt

4       Der erste Prototyp

4.1    Ein neues Projekt anlegen

4.2    Level 01: Das Quadrat – Modeling in Unity

4.3    Das erste Fahrzeug – mehr Modelling in Unity

4.4    Bewegen und steuern – Scripting in Unity

4.5    Die Kamera führen

5       Die Spielentwicklung vorbereiten

5.1    Regeln: Spielmechanik und Programmierung

5.2    Spiel an Augen: Bildschirmdarstellung

5.2.1     Virtuelle Benutzerschnittstelle: Pixel- und Vektorgrafik

5.2.2     Spielwelt: 2D, 3D, Modelling, Texturing und Animation

5.3    Spiel an Ohren: Musik und Soundeffekte

5.4    Teamwork für Einzelspieler: Unity Asset Store

5.5    Klassisches Teamwork oder Backup: Versionsverwaltung

6       Den Prototyp fertigstellen

6.1    Eigene Materialien erstellen und verwenden

6.1.1     Material anlegen und einem GameObject zuweisen

6.1.2     Texturen zuweisen

6.1.3     Mip-Mapping und Qualitätseinstellungen

6.1.4     Shader programmieren … äh … ausprobieren

6.1.5     Prozedurale Materialien: Substances

6.1.6     Physikbasiertes Shading mit den Standard-Shadern

6.2    Die Wände hinter dem Fahrzeug erstellen

6.2.1     Lösungsmöglichkeiten zum Erzeugen der TraceWalls

6.2.2     Implementierung von Lösung B: Skalierung

6.2.3     Coroutines für zeitgesteuerte Ereignisse verwenden

6.2.4     Die Implementierung des Wandwuchses vollenden

6.2.5     Eigenheiten von Unity: Klassen und Structs, Variablen und Properties

6.2.6     Das Problem mit den Drehungen

6.2.7     Saubere Drehungen implementieren

6.2.8     Testing und kleine Fehler korrigieren

6.2.9     Erweiterung zu Lösung C: Vektortransformation

6.2.10   Das Modell für die Wand in Unity importieren

6.2.11   Ein neues Prefab für die Wände erstellen

6.2.12   Änderungen an Prefabs von der Szene ins Projekt zurückschreiben

6.2.13   Prozedural das Modell-Mesh verändern

6.2.14   Den Fehler finden

6.2.15   Beschränkung der Prefab-Ebenen im Project Browser

6.2.16   Wenn sichtbare Flächen unsichtbar werden

6.2.17   UV-Map kontinuierlich anpassen

6.3    Von Äpfeln und Explosionen, Triggern und Kollisionen

6.3.1     Explosionen aus dem Unity Asset Store einsetzen

6.3.2     Äpfel verteilen und sammeln

6.3.3     Von Collidern und Triggern

6.3.4     Die Debug-Ansicht im Inspector nutzen

7       Projekt-Polishing – Iteration 1

7.1    Die Projektstruktur optimieren

7.2    Die Szenenhierarchie übersichtlicher gestalten

7.3    Den Code für Erweiterungen vorbereiten

7.3.1     TracerController-Varianten über Vererbung umsetzen

7.3.2     Den InputHandler zur Behandlung von Tastaturabfragen erstellen

7.4    Die Reihenfolge der Scriptaufrufe bestimmen

8       Veröffentlichung vorbereiten

8.1    Ein Startmenü hinzufügen

8.1.1     Eine neue Szene anlegen

8.1.2     Über Internationalisierung und Lokalisierung

8.2    Das Startmenü mit Unity UI umsetzen

8.2.1     Das Unity-UI-Layout verstehen und anwenden

8.2.2     Unity Events: den MenuController implementieren

8.3    Den Spieler gewinnen oder verlieren lassen

8.3.1     Einen GameStateManager implementieren

8.3.2     Den Spielzustand sichtbar machen

8.4    Unity Audio: Stimmung! Soundeffekte! Musik!

8.4.1     Hintergrundmusik für Startmenü und Level auswählen

8.4.2     Soundeffekte für das Spiel hinzufügen

8.4.3     Dem Tracer ein Motorengeräusch geben

8.4.4     Dramatischere Drehungen entwickeln

8.4.5     Das Einsammeln von Äpfeln und das Gewinnen akustisch untermalen

8.4.6     Audio-Engineering: Musik und Effekte aufeinander abstimmen

9       Aus dem Editor zu den Spielern

9.1    Einen Webplayer veröffentlichen

9.2    Das Spiel mittels WebGL veröffentlichen

9.3    Standalones für Windows, Mac OS X und Linux

9.4    Mobile Zielplattformen: Tablets und Handys

9.4.1     Unity Remote

9.4.2     Steuerungsmöglichkeit für mobile Geräte einführen

9.4.3     Builds für Android-Handys und -Tablets veröffentlichen

9.4.4     Builds für iOS-Geräte veröffentlichen

9.4.5     Builds für Windows Store/Phone veröffentlichen

9.5    Builds für Oculus Rift veröffentlichen

9.6    Builds für weitere Zielplattformen veröffentlichen

10     Project Polishing – Iteration 2

10.1  Die Level-Geometrie durch ein 3D-Modell ersetzen

10.2  Neues Modell für das Fahrzeug mit verschiedenen LODs einbinden

10.2.1   Materialien und Texturen einstellen

10.2.2   Performance über Game View Stats analysieren

10.2.3   Einen optimierten Tracer mit LODs erstellen

10.2.4   Qualitätseinstellungen verstehen und LODs optimieren

10.2.5   Texturgröße bei LODs anpassen

10.3  Benutzerfarben für Tracer und Wand

10.3.1   Den Tracer einfärben

10.3.2   Die Wände einfärben

10.3.3   Die Wände dynamisch einfärben

10.3.4   Den Startscreen um eine Farbauswahl erweitern

10.3.5   Die Spielerfarbe über Szenenwechsel hinweg speichern

10.4  Mehr Action: Spielen auf Zeit mit Punkte-Bonus

10.4.1   Einen Timer einführen

10.4.2   Punktekategorien erstellen und im Level verteilen

10.4.3   Zeitmultiplikator und Punktedarstellung hinzufügen

11     Unsere GUI aufhübschen

11.1  Die wesentlichen Darstellungselemente von Unity UI

11.2  Das Startmenü aufhübschen

11.2.1   Echte 3D-Objekte als Pseudo-Hintergrundgrafik einsetzen

11.2.2   Masking verwenden, um einen scrollbaren Text umzusetzen

11.2.3   Bilder und Farben aus der Designer-Vorlage übernehmen

11.2.4   Den Titel mit mehreren Farben formatieren

11.2.5   Button-Animationen mit Mecanim umsetzen

11.2.6   Einen Einstellungsscreen erstellen

11.2.7   Zwischen Hauptmenü und Einstellungsscreen wechseln

11.2.8   Die GUI auf 3D umstellen

11.2.9   Wechsel zwischen den Screens animieren

11.3  Die InGameGUI aufhübschen

11.3.1   Runde Buttons als Prefabs verwenden

11.3.2   Steuerungsbuttons nur bei Touch-Devices einblenden

11.3.3   Eine Fortschrittsanzeige für die Äpfel implementieren

11.4  Anpassungen für hochauflösende Displays

12     Beleuchtung mit Erleuchtung: Enlighten

12.1  Umgebungslicht einstellen

12.2  Lichtquellen setzen

12.2.1   Licht ausrichten mit Directional Light

12.2.2   Strahlende Lichtpunkte setzen

12.2.3   Mit einem Spot anstrahlen

12.2.4   Virtuelle Lichtschirme: Area Lights

12.3  Still halten oder sich bewegen

12.3.1   Lightbaking für statische Objekte aktivieren

12.3.2   Lightprobes für bewegliche Objekte einrichten

12.4  Renderpfade: Forward oder Deferred wählen

12.5  Licht mit Layern einschränken

13     Project Polishing – Iteration 3

13.1  Scripts ordnen

13.1.1   Verzeichnisstruktur verbessern

13.1.2   Eigene Klassen in Namespaces zusammenfassen

13.2  InputHandler auf Events umstellen

14     Ein minimales Multiplayer-Spiel

14.1  Die Spieler vervielfältigen

14.2  Kameras aufräumen und Splitscreen einführen

14.3  Die Tastatur gerecht aufteilen

14.4  Das Punktekonto zusammenführen

14.5  Spaß haben!

14.6  Übung: PowerUps hinzufügen

15     Terrain Engine: Eine Landschaft bauen

15.1  Was ist eigentlich ein Terrain in Unity?

15.2  Vorbereitungen treffen

15.2.1   Die Grundeinstellungen konfigurieren

15.2.2   Terrain Assets importieren und registrieren

15.3  Die Landschaft formen

16     Durch die Landschaft laufen

16.1  Third Person Controller studieren

16.2  Den Charakter an unser Spiel anpassen

17     Durch die Landschaft fahren

18     Eine neue Dimension: Virtual Reality

18.1  Die VR-Brillen-Seh-Krankheit: Motion Sickness

18.2  Eine entspannte VR-Erfahrung gestalten

18.3  Interaktion mit Objekten im virtuellen Raum

18.4  VR-Anpassungen für unser Spiel umsetzen

18.4.1   First-Person-Variante unseres Landschaftsspiels

18.4.2   VR-Racing Apple Collection Games

18.4.3   Back to the roots: Im Tracer sitzen!

19     Enter the Endgame

20     Glossar

20.1  Begriffe

20.2  Icons und Buttons

Stichwortverzeichnis

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 sind.