Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Materialien zum Buch
25
Vorwort
27
1 Einführung
29
1.1 Das Problem vieler Einsteiger
29
1.2 Wichtige Ansätze des Buches
30
1.2.1 Die Mischung macht’s – Theorie und Praxis
30
1.2.2 Übung macht den Meister
31
1.2.3 Community
31
1.3 Lernen mit dem Buch
32
1.3.1 Voraussetzungen für das Buch
32
1.3.2 Wie du am besten mit dem Buch lernst
32
1.3.3 Englisch als Sprache für das Buch
33
1.3.4 Was kannst du nach dem Lesen?
34
1.4 Vorstellung der Kapitel
35
2 Die Unity-Engine
39
2.1 Was ist eigentlich Unity?
39
2.1.1 Game Engines
39
2.1.2 Die Unity Game Engine
40
2.1.3 Warum gerade Unity?
41
2.2 Installation
42
2.2.1 Download und Installation des Unity-Hubs
42
2.2.2 Einrichtung der Unity-Lizenz unter Unity Hub
46
2.2.3 Installation einer Unity-Version über Unity Hub
49
2.3 Erstellung des ersten Unity-Projekts
55
2.4 Mit den Downloadmaterialien zum Buch arbeiten
58
2.4.1 Zugriff über heruntergeladene Dateien
58
2.4.2 Zugriff über GitHub
59
3 Grundlegende Konzepte in der Engine
61
3.1 Der erste Überblick über Unity
61
3.1.1 Scene
62
3.1.2 Überblick über die wichtigsten Fenster
63
3.1.3 Pakete für das Projekt installieren
69
3.1.4 Ordnerstruktur des Projekts
72
3.2 Game Objects und Components
74
3.2.1 Game Objects
74
3.2.2 Components
75
3.2.3 Beispiel: Ein Würfel ohne Haut? Components in der Praxis verstehen
78
3.2.4 Das Game Object als leerer Behälter
83
3.2.5 Die Transform-Component
84
3.2.6 Übung 03.01: Objektumformung
90
3.2.7 Licht und Kamera – die Standardobjekte der 3D-Scene
90
3.2.8 Game Objects und Components deaktivieren
94
3.3 Orientierung in der Scene View
95
3.3.1 Maus- und Tastaturkürzel in der Scene View
95
3.3.2 Die Transform Toolbar
96
3.3.3 Übung 03.02: Tischlermeister
99
3.3.4 Gizmos
99
3.3.5 Weitere Tools der Scene View
99
3.4 Parenting
102
3.4.1 Grundidee des Parentings
103
3.4.2 Relativer Bezug zum Elternteil
104
3.4.3 Verschachtelte Hierarchien und mehrere Kinder
105
3.4.4 Empty Parents – auch leere Eltern sind gute Eltern
106
3.4.5 Übung 03.03: Frankensteins Monster
107
3.5 Musterlösungen für die Übungen
107
3.5.1 Lösung für Übung 03.01: Objektumformung
108
3.5.2 Lösung für Übung 03.02: Tischlermeister
108
3.5.3 Lösung für Übung 03.03: Frankensteins Monster
108
4 Das erste Script
109
4.1 Scripts und die Sprache C#
110
4.2 Das erste Script erstellen
110
4.2.1 Erstellung eines neuen Scripts
111
4.2.2 Das erste Script mit Visual Studio öffnen
112
4.3 Aufbau eines neu erstellten Scripts
115
4.4 Das erste Script zum Leben erwecken
120
4.4.1 Nachrichten in die Konsole schreiben
120
4.4.2 Ein Script in Unity einsetzen
122
4.4.3 Konsolenausgabe über Update
124
4.4.4 Übung 04.01: Stell dich vor
126
4.4.5 Ein Script wiederverwenden
126
4.4.6 Übung 04.02: Mehrfachausgabe
127
4.5 Musterlösungen für die Übungen
127
4.5.1 Lösung für Übung 04.01: Stell dich vor
127
4.5.2 Lösung für Übung 04.02: Mehrfachausgabe
127
5 Grundlegende Konzepte der Sprache C#
129
5.1 Einfache Methoden
130
5.1.1 void-Methoden
130
5.1.2 Unity-Eventmethoden
135
5.1.3 Übung 05.01: Willkommen im Spiel!
136
5.2 Datentypen und Variablen
136
5.2.1 Variablen
136
5.2.2 Aufbau einer Variablen und Datentypen
137
5.2.3 Scope – lokale Variablen und Felder
141
5.2.4 Zugriffsmodifikatoren – »public« und »private« bei Feldern
144
5.2.5 Übung 05.02: Alter und Körpergröße, bitte!
151
5.3 Datentypen für Zahlen und Textzeichen
152
5.3.1 Übersicht über Zahlendatentypen
152
5.3.2 Rechenoperationen
159
5.3.3 Übersicht über Textdatentypen
164
5.3.4 String Concatenation
165
5.4 Methoden mit Rückgabewerten und Parametern
167
5.4.1 Zugriffsmodifikatoren bei Methoden
168
5.4.2 Methoden mit Parametern
169
5.4.3 Überladen von Methoden
171
5.4.4 Benannte Argumente und optionale Parameter
172
5.4.5 Übung 05.03: Gegnerdaten ausgeben
174
5.4.6 Methoden mit Rückgabewerten
174
5.4.7 Rückgabewerte mit Parametern verbinden
178
5.4.8 Übung 05.04: Vierecksrechner
179
5.5 Boolesche Logik
179
5.5.1 Der Datentyp »bool«
179
5.5.2 Vergleichsoperatoren
181
5.5.3 Logikoperatoren
185
5.6 if-Abfragen
188
5.6.1 if-Abfragen anlegen
189
5.6.2 else-Anweisungen
190
5.6.3 else-if-Anweisungen
191
5.6.4 Übung 05.05: Lebensstatus
194
5.6.5 if-Abfragen und Methoden mit Rückgabewerten
194
5.6.6 Verschachtelung von Abfragen
196
5.6.7 Early Return
196
5.6.8 Der ternär bedingte Operator
199
5.6.9 Übung 05.06: Zahlenvergleich
201
5.7 Arrays
201
5.7.1 Ein Array erstellen
201
5.7.2 Auf Array-Elemente zugreifen und Werte ändern
205
5.7.3 Übung 05.07: Früchtesammlung
207
5.7.4 Mehrdimensionale Arrays
207
5.7.5 Übung 05.08: Tic-Tac-Toe-Spielfeld
209
5.8 Schleifen
209
5.8.1 for-Schleife (Zählschleife)
210
5.8.2 Übung 05.09: Rückwärts zählen
213
5.8.3 Übung 05.10: Das große Zahlen-Array
213
5.8.4 while-Schleife
213
5.8.5 foreach-Schleife
215
5.8.6 »break« und »continue«
217
5.8.7 Endlosschleifen
218
5.8.8 Übung 05.11: Angriff auf einen Gegner
218
5.9 Enumerationstypen
219
5.9.1 Einen Enumerationstyp anlegen
219
5.9.2 Enumerationstypen zuweisen
220
5.9.3 Vergleich von Enumerationstypen
221
5.9.4 Indexierung und Ausgabe von Enumerationstypen
222
5.10 switch-Anweisung
223
5.10.1 Verwendung der switch-Anweisung
223
5.10.2 switch-Anweisungen mit Rückgabewerten
226
5.11 Praktische Hilfsmittel für Zahlen und Text
227
5.11.1 Zufallszahlen
227
5.11.2 Interpolation von Zahlenwerten
228
5.11.3 Minimum, Maximum und Begrenzung von Zahlenräumen
229
5.11.4 Methoden für string-Werte
229
5.11.5 Text in eine Zahl umwandeln
231
5.12 Umgang mit Fehlern
231
5.12.1 Behandlung von Exceptions
235
5.12.2 Auslösen eigener Exceptions
238
5.12.3 Den Debugger in Visual Studio nutzen
240
5.13 Musterlösungen für die Übungen
243
5.13.1 Lösung für Übung 05.01: Willkommen im Spiel!
243
5.13.2 Lösung für Übung 05.02: Alter und Körpergröße, bitte!
244
5.13.3 Lösung für Übung 05.03: Gegnerdaten ausgeben
244
5.13.4 Lösung für Übung 05.04: Vierecksrechner
245
5.13.5 Lösung für Übung 05.05: Lebensstatus
245
5.13.6 Lösung für Übung 05.06: Zahlenvergleich
246
5.13.7 Lösung für Übung 05.07: Früchtesammlung
248
5.13.8 Lösung für Übung 05.08: Tic-Tac-Toe-Spielfeld
248
5.13.9 Lösung für Übung 05.09: Rückwärts zählen
248
5.13.10 Lösung für Übung 05.10: Das große Zahlen-Array
249
5.13.11 Lösung für Übung 05.11: Angriff auf einen Gegner
250
6 Scripting in Unity
251
6.1 Über Scripts die Transform-Component verändern
251
6.1.1 Zugriff auf Transform-Werte über das Script
251
6.1.2 Absoluter und relativer Bezug der Transform-Werte
258
6.1.3 Übung 06.01: Bin ich zu weit oben?
260
6.1.4 Werte der Transform-Component über das Script verändern
260
6.1.5 Vektoren mit Richtungen verwenden
262
6.2 Anwendungsbeispiel: Einen Spielcharakter steuern
266
6.2.1 Vektoroperationen
267
6.2.2 Übung 06.02: Vektorrechner
268
6.2.3 Das Legacy Input System
268
6.2.4 Eine Pfeiltastensteuerung programmieren
276
6.2.5 Übung 06.03: Der Drehdiamant
279
6.2.6 Übung 06.04: Warum einfach, wenn’s auch schwierig geht?
280
6.2.7 Exkurs: Eingaben auf mobilen Endgeräten
280
6.3 Interaktion zwischen mehreren Scripts
282
6.3.1 Zugriff über die Suche des Scripts
283
6.3.2 Verbindung über den Inspector
286
6.3.3 Mehrere Components laden
288
6.3.4 Performancetipps für die Suche nach Components
291
6.4 Game Objects und weitere nützliche Funktionen
294
6.4.1 Weitere Scriptaufrufe für Game Objects und Components
294
6.4.2 Game Objects und Components löschen
296
6.4.3 Tags
296
6.4.4 Zeitfunktionen
299
6.4.5 Mehr Möglichkeiten beim Scripting mit der Transform-Component
300
6.4.6 Weitere Unity-Eventmethoden
302
6.5 Weitere Kenntnisse zu Scenes
304
6.5.1 Scene Templates
304
6.5.2 Additives Laden von Scenes
306
6.5.3 Scene Unloading
307
6.5.4 Grundlagen – Scripting mit Scenes
308
6.6 Musterlösungen für die Übungen
311
6.6.1 Lösung für Übung 06.01: Bin ich zu weit oben?
311
6.6.2 Lösung für Übung 06.02: Vektorrechner
312
6.6.3 Lösung für Übung 06.03: Der Drehdiamant
312
6.6.4 Lösung für Übung 06.04: Warum einfach, wenn’s auch schwierig geht?
313
7 Übungskomplex 1
315
7.1 Aufgaben
315
7.1.1 Übung 07.01: Der Schaltjahrrechner
315
7.1.2 Übung 07.02: Objektverschiebung leicht gemacht
316
7.1.3 Übung 07.03: Stoppe die Verkleinerung!
316
7.1.4 Übung 07.04: Ballons platzen lassen
316
7.2 Tipps
317
7.2.1 Tipps für Übung 07.01: Der Schaltjahrrechner
317
7.2.2 Tipps für Übung 07.02: Objektverschiebung leicht gemacht
317
7.2.3 Tipps für Übung 07.03: Stoppe die Verkleinerung!
317
7.2.4 Tipps für Übung 07.04: Ballons platzen lassen
318
7.3 Lösungen
318
7.3.1 Lösung für Übung 07.01: Der Schaltjahrrechner
318
7.3.2 Lösung für Übung 07.02: Objektverschiebung leicht gemacht
318
7.3.3 Lösung für Übung 07.03: Stoppe die Verkleinerung!
319
7.3.4 Lösung für Übung 07.04: Ballons platzen lassen
320
8 Physik
323
8.1 Grundlagen physikalischer Simulationen
323
8.1.1 Die Rigidbody-Component
323
8.1.2 Kollisionen zwischen physikalischen Objekten
326
8.1.3 Trigger-Collider
331
8.1.4 Collider zusammensetzen
332
8.1.5 Physic Materials
332
8.1.6 Übung 08.01: Kugelbahn
333
8.1.7 Layer
333
8.2 Physik und Scripting
335
8.2.1 Kollisionen über Scripts erfassen
335
8.2.2 Übung 08.02: Die harte Wand
338
8.2.3 Trigger über Scripts erfassen
339
8.2.4 Übung 08.03: Lebenszone
341
8.2.5 Rigidbody und Scripting
341
8.2.6 Update-Rate des Physiksystems
345
8.2.7 Übung 08.04: Das unendliche Trampolin
349
8.3 Raycasting
349
8.3.1 Grundlagen des Raycastings
349
8.3.2 Raycasting durch die Kamera
352
8.3.3 Übung 08.05: Strahl der Zerstörung
353
8.3.4 Weitere Einstellungen für das Raycasting
353
8.3.5 Mehrere Objekte durch Raycasting erfassen
356
8.4 Musterlösungen für die Übungen
357
8.4.1 Lösung für Übung 08.01: Kugelbahn
357
8.4.2 Lösung für Übung 08.02: Die harte Wand
358
8.4.3 Lösung für Übung 08.03: Lebenszone
358
8.4.4 Lösung für Übung 08.04: Das unendliche Trampolin
358
8.4.5 Lösung für Übung 08.05: Strahl der Zerstörung
359
9 Fortgeschrittene Scripting-Themen
361
9.1 Coroutines
361
9.1.1 Grundlagen von Coroutines
361
9.1.2 Übung 09.01: Der Coroutine-Framezähler
365
9.1.3 Coroutines stoppen
365
9.1.4 Zeitverzögerungen durch Coroutines
368
9.1.5 Übung 09.02: Countdown
370
9.1.6 Asynchrones Laden von Scenes mit Coroutines
370
9.1.7 Eventmethoden als Coroutines
372
9.2 PlayerPrefs
373
9.2.1 Methoden der Klasse »PlayerPrefs«
373
9.2.2 Übung 09.03: Der Punktespeicher
375
9.3 Attribute
375
9.3.1 Attribute zur optischen Veränderung des Inspectors
375
9.3.2 Attribute für die Konfiguration von Variablen
379
9.3.3 Mehrere Attribute verknüpfen
382
9.3.4 Übung 09.04: Leveldesign leicht gemacht
382
9.4 Scriptable Objects
383
9.4.1 Ein Scriptable Object erstellen und über das Project Window anlegen
383
9.4.2 Übung 09.05: An Scriptable Objects herantass(t)en
387
9.4.3 Eventmethoden der Klasse »ScriptableObject«
387
9.4.4 Scriptable Objects per Code erstellen
387
9.5 Musterlösungen für die Übungen
389
9.5.1 Lösung für Übung 09.01: Der Coroutine-Framezähler
389
9.5.2 Lösung für Übung 09.02: Countdown
390
9.5.3 Lösung für Übung 09.03: Der Punktespeicher
391
9.5.4 Lösung für Übung 09.04: Leveldesign leicht gemacht
392
9.5.5 Lösung für Übung 09.05: An Scriptable Objects herantass(t)en
393
10 Prefabs
395
10.1 Prefabs erstellen
398
10.1.1 Einfache Prefabs erstellen und in der Scene verwenden
398
10.1.2 Prefabs in der Scene überschreiben
401
10.1.3 Prefab Variants
403
10.1.4 Übung 10.01: Hüte werden unterbewertet
405
10.1.5 Gelöschte Prefabs und Prefab Unpacking
405
10.2 Prefabs über Code instanziieren
407
10.2.1 Die Methode »Instantiate«
407
10.2.2 Übung 10.02: Kugel-Spawner
411
10.2.3 Das neue Objekt über »Instantiate« referenzieren
411
10.2.4 Übung 10.03: Anti-Schwerkraft-Prefabs
413
10.3 Musterlösungen für die Übungen
414
10.3.1 Lösung für Übung 10.01: Hüte werden unterbewertet
414
10.3.2 Lösung für Übung 10.02: Kugel-Spawner
414
10.3.3 Lösung für Übung 10.03: Anti-Schwerkraft-Prefabs
415
11 Übungskomplex 2
417
11.1 Aufgaben
417
11.1.1 Übung 11.01: Eine zeitgesteuerte Kanone
417
11.1.2 Übung 11.02: Eine eigene Jump-and-Run-Spielersteuerung
417
11.1.3 Übung 11.03: Finde den richtigen Schalter!
417
11.1.4 Übung 11.04: Der Kugelmann
418
11.1.5 Übung 11.05: Schnipsball
418
11.2 Tipps
419
11.2.1 Tipps für Übung 11.01: Eine zeitgesteuerte Kanone
419
11.2.2 Tipps für Übung 11.02: Eine eigene Jump-and-Run-Spielersteuerung
419
11.2.3 Tipps für Übung 11.03: Finde den richtigen Schalter!
420
11.2.4 Tipps für Übung 11.04: Der Kugelmann
420
11.2.5 Tipps für Übung 11.05: Schnipsball
421
11.3 Lösungen
421
11.3.1 Lösung für Übung 11.01: Eine zeitgesteuerte Kanone
421
11.3.2 Lösung für Übung 11.02: Eine eigene Jump-and-Run-Spielersteuerung
423
11.3.3 Lösung für Übung 11.03: Finde den richtigen Schalter!
425
11.3.4 Lösung für Übung 11.04: Der Kugelmann
428
11.3.5 Lösung für Übung 11.05: Schnipsball
430
12 Objektorientierte Programmierung
435
12.1 Grundlagen der objektorientierten Programmierung
435
12.1.1 Klassenmodellierung am Beispiel »Enemy«
437
12.1.2 Übung 12.01: Ein(e) klasse Stuhl
439
12.2 Referenz- und Wertetypen
439
12.2.1 Wertetypen
440
12.2.2 Referenztypen
441
12.2.3 Referenz- und Wertetypen vergleichen
442
12.2.4 Werte und Referenzen in Methoden
443
12.2.5 »ref« und »out«
445
12.2.6 Der Wert »null«
449
12.2.7 Praktisches Beispiel: null-Werte beim Suchen von Components
452
12.3 Der Konstruktor
454
12.3.1 Beispiel: Felder über den Konstruktor setzen
455
12.3.2 Konstruktoren überladen
457
12.3.3 Das Schlüsselwort »readonly«
459
12.4 Das Schlüsselwort »static«
460
12.4.1 Statische Variablen und Methoden
461
12.4.2 Statische Klassen
463
12.4.3 Einschränkungen statischer Klassenbestandteile
464
12.4.4 Übung 12.02: Der Instanzenzähler
465
12.4.5 Konstanten
465
12.5 Properties
466
12.5.1 Expression Body Definitions
466
12.5.2 Übung 12.03: Personen-Properties
468
12.5.3 Properties mit Backing Field
468
12.5.4 Auto-Implemented Properties
473
12.6 Vererbung
474
12.6.1 Typumwandlung von Klassentypen
479
12.6.2 Verändern von Methoden in einer Kindklasse
484
12.6.3 Aufrufen von Bestandteilen der Elternklasse
487
12.6.4 Übung 12.04: Pflanzenvererbung
489
12.6.5 Vererbung und Überschreibung verhindern
490
12.7 Die Basisklasse »object« und ihre Möglichkeiten
491
12.7.1 Die Klasse »object«
491
12.7.2 Textrepräsentation eines Objects
492
12.7.3 Referenztypen vergleichen
493
12.7.4 Die Methode »GetHashCode«
495
12.7.5 Übung 12.05: Benannte Punkte
497
12.8 Abstraktionen
497
12.8.1 Abstrakte Klassen
497
12.8.2 Beispiel: Abstrakte Components in Unity
502
12.8.3 Interfaces
505
12.8.4 Implizite und explizite Interface-Implementierung
510
12.8.5 Interfaces und abstrakte Klassen kombinieren
512
12.8.6 Wann eignet sich welche Abstraktion?
513
12.9 Musterlösungen für die Übungen
513
12.9.1 Lösung für Übung 12.01: Ein(e) klasse Stuhl
513
12.9.2 Lösung für Übung 12.02: Der Instanzenzähler
514
12.9.3 Lösung für Übung 12.03: Personen-Properties
515
12.9.4 Lösung für Übung 12.04: Pflanzenvererbung
515
12.9.5 Lösung für Übung 12.05: Benannte Punkte
517
13 2D-Inhalte
519
13.1 Projekte mit dem 2D-Template erstellen
519
13.2 Sprites
522
13.2.1 Bilddateien als Sprites importieren
523
13.2.2 Platzhalter-Sprites anlegen
526
13.2.3 Sprite Renderer
526
13.2.4 Der Sprite Editor
529
13.2.5 Sprite Masks
534
13.2.6 Übung 13.01: Es werde Farbe!
536
13.2.7 Scripting mit Sprites
536
13.2.8 Pixel Perfect Camera
541
13.3 2D-Physik
542
13.3.1 Components für das 2D-Physiksystem
542
13.3.2 Kollisionen in 2D erfassen
544
13.3.3 Übung 13.02: Und täglich grüßt die Murmel
545
13.3.4 Custom Physics Shapes
546
13.4 Tilemaps
547
13.4.1 Eine Tilemap anlegen
548
13.4.2 Eine Tile Palette anlegen
551
13.4.3 Platzieren von Tiles auf einer Tilemap
554
13.4.4 Übung 13.03: Deine Tile-Landschaft
555
13.4.5 Tilemap-Collider hinzufügen
555
13.5 Musterlösungen für die Übungen
556
13.5.1 Lösung für Übung 13.01: Es werde Farbe!
556
13.5.2 Lösung für Übung 13.02: Und täglich grüßt die Murmel
558
13.5.3 Lösung für Übung 13.03: Deine Tile-Landschaft
560
14 User Interfaces
561
14.1 Grundlagen zu UI in Unity
561
14.2 Grundlegende Anordnung von UI-Elementen
567
14.2.1 Rect Transform
567
14.2.2 Beispiel: Ein Bild im Canvas anzeigen
569
14.2.3 Anchoring im UI
574
14.2.4 Übung 14.01: Ecke in Ecke
584
14.3 UI-Components
585
14.3.1 Event System
585
14.3.2 Images
587
14.3.3 Übung 14.02: Leichter leben mit Lebensleisten
596
14.3.4 Texte (TextMeshPro)
596
14.3.5 Buttons
601
14.3.6 Übung 14.03: Bewegungs-Buttons
606
14.3.7 Text Input
606
14.3.8 Übung 14.04: Textaktualisierung
610
14.3.9 Dropdown
610
14.3.10 Übung 14.05: Dropdown-Objektauswahl
614
14.3.11 Slider
614
14.3.12 Übung 14.06: Slider-Bildfüller
616
14.3.13 Toggle
616
14.3.14 Übung 14.07: Objekt-Toggle
619
14.4 UI-Layouts zusammensetzen
619
14.4.1 UI-Layout Groups
619
14.4.2 Grid Layout Groups
624
14.4.3 Übung 14.08: Der Grid-Füller
626
14.4.4 Verschachtelung von Layout Groups
626
14.4.5 Layout Elements
628
14.4.6 Fitter
631
14.4.7 Übung 14.09: Baue ein Layout nach!
633
14.4.8 Scroll Views
634
14.5 Musterlösungen für die Übungen
637
14.5.1 Lösung für Übung 14.01: Ecke in Ecke
637
14.5.2 Lösung für Übung 14.02: Leichter leben mit Lebensleisten
638
14.5.3 Lösung für Übung 14.03: Bewegungs-Buttons
639
14.5.4 Lösung für Übung 14.04: Textaktualisierung
641
14.5.5 Lösung für Übung 14.05: Dropdown-Objektauswahl
641
14.5.6 Lösung für Übung 14.06: Slider-Bildfüller
643
14.5.7 Lösung für Übung 14.07: Objekt-Toggle
644
14.5.8 Lösung für Übung 14.08: Der Grid-Füller
644
14.5.9 Lösung für Übung 14.09: Baue ein Layout nach!
645
15 Visualisierung
647
15.1 Einstellungen im Projekt
647
15.1.1 Exkurs: Render Pipelines und ihre Features
648
15.1.2 Grafikeinstellungen
649
15.2 Licht
650
15.2.1 Die Light-Component
650
15.2.2 Light Baking
654
15.2.3 Übung 15.01: Der Raum der Erleuchtung
659
15.2.4 Zentrale Einstellungen im Lighting Window
659
15.3 Arbeit mit 3D-Assets
661
15.3.1 Importieren von 3D-Modellen
662
15.3.2 Materials
664
15.3.3 Eine Skybox einrichten
672
15.4 Partikelsysteme (Shuriken)
673
15.4.1 Grundlagen zu Shuriken-Partikelsystemen
673
15.4.2 Beispiele für Partikelsysteme
681
15.4.3 Übung 15.02: Zeit für eigene Partikelsysteme
685
15.5 Terrains
686
15.5.1 Erstellung eines Terrains
686
15.5.2 Die Terraintools
687
15.5.3 Beispiel: Ein Terrain formen und texturieren
695
15.5.4 Übung 15.03: Dein eigenes Terrain
698
15.6 Bauen des Spiels
698
16 Animation
703
16.1 Beispiel: Einführung in das Animationssystem
703
16.1.1 Erstellung des Animation Clips über das Animation Window
704
16.1.2 Animator Controller und Animator
710
16.1.3 Übung 16.01: Dreh dich im Kreis!
713
16.2 Details – Animation Clips
713
16.2.1 Fortgeschrittene Kenntnisse zum Animation Window
713
16.2.2 Preview Mode und Recording Mode
714
16.2.3 Animation Events
716
16.2.4 Dopesheet- und Curves-Ansicht
717
16.2.5 Animationen aus importierten Assets
719
16.2.6 Animieren von 2D-Assets
724
16.3 Details – Animator Controller
733
16.3.1 Mehrere Clips einem Animator Controller hinzufügen
734
16.3.2 Transitions
736
16.3.3 Transition-Parameter
741
16.3.4 Beispiel: Eine Charaktersteuerung mit Animationen
747
16.3.5 Übung 16.02: Flackerndes Licht
753
16.3.6 Blend Trees
753
16.3.7 Animation Layers
760
16.3.8 Sub-State Machines
764
16.3.9 Übung 16.03: Der tanzende Würfel
766
16.3.10 Weitere Funktionen im Animator Controller
766
16.4 Musterlösungen für die Übungen
766
16.4.1 Lösung für Übung 16.01: Dreh dich im Kreis!
766
16.4.2 Lösung für Übung 16.02: Flackerndes Licht
767
16.4.3 Lösung für Übung 16.03: Der tanzende Würfel
768
17 Sound
771
17.1 Grundlagen von Sound
771
17.1.1 Importieren von Audioclips
771
17.1.2 Audio Listener
773
17.1.3 Audio Source
773
17.2 Sounds und Scripting
778
17.2.1 Die Klasse »AudioSource«
778
17.2.2 Übung 17.01: Die Neustarttaste
782
17.2.3 Übung 17.02: Lauter oder leiser, bitte!
782
17.2.4 Clips unabhängig von einer Audio Source abspielen
782
17.3 Anpassung von Sounds
785
17.3.1 Audiofilter
785
17.3.2 Übung 17.03: Filter ausprobieren
786
17.3.3 Audio Mixer
786
17.3.4 Übung 17.04: Mixe dein eigenes Audiosignal!
793
17.3.5 Reverb Zones
793
17.4 Mikrofoneingaben
794
17.5 Musterlösung für die Übungen
796
17.5.1 Lösung für Übung 17.01: Die Neustarttaste
796
17.5.2 Lösung für Übung 17.02: Lauter oder leiser, bitte!
796
17.5.3 Lösung für Übung 17.03: Filter ausprobieren
797
17.5.4 Lösung für Übung 17.04: Mixe dein eigenes Audiosignal!
797
18 Navigation
799
18.1 Einführung in das Navigationssystem
799
18.1.1 Anlegen eines NavMeshes in der Scene
800
18.1.2 Anlegen eines NavMesh Agents
803
18.1.3 NavMesh Areas und Costs
806
18.1.4 Scripting mit NavMesh Agents
807
18.1.5 Übung 18.01: Verfolgungswahn
810
18.1.6 NavMesh Agents und Physik
810
18.2 Weitere NavMesh-Components
811
18.2.1 NavMesh Obstacles
811
18.2.2 NavMesh Links
813
18.2.3 OffMesh Links
814
18.2.4 Übung 18.02: Agentenparcours
815
18.2.5 NavMesh Modifier
815
18.3 Musterlösungen für die Übungen
817
18.3.1 Lösung für Übung 18.01: Verfolgungswahn
817
18.3.2 Lösung für Übung 18.02: Agentenparcours
818
19 Fortgeschrittene Konzepte der Sprache C#
819
19.1 Collections
819
19.1.1 Listen
820
19.1.2 Übung 19.01: Der Kugelspeicher
824
19.1.3 Dictionarys
824
19.1.4 Weitere praktische Collections
827
19.2 Datenklassen und ihre Möglichkeiten
827
19.2.1 Structs
828
19.2.2 Datenstrukturen im Inspector serialisieren
831
19.3 Generics
833
19.3.1 Generics mit mehreren Typparametern
835
19.3.2 Einschränkungen für Generics festlegen
836
19.3.3 Generics bei Methoden verwenden
839
19.4 Delegates
840
19.4.1 Grundlagen zu Delegates
840
19.4.2 Die Klassen »Action« und »Func«
845
19.4.3 Lambda-Ausdrücke
847
19.4.4 Delegates in Coroutines
850
19.4.5 Übung 19.02: Warten auf das Drücken einer Tastenkombination
852
19.5 Events
852
19.5.1 Grundlagen von Events
852
19.5.2 Beispiel: Ein Punkte-UI ohne und mit einem Event umsetzen
856
19.5.3 Übung 19.03: Ein lauter Punktezähler ist besser als ein leiser!
860
19.6 LINQ
860
19.6.1 Aneinanderketten von LINQ-Methoden
863
19.6.2 Wichtige LINQ-Methoden
864
19.6.3 Übung 19.04: Die Liste muss operiert werden!
867
19.7 Speicherung von Daten mit JSON
867
19.7.1 Umwandeln von Datenobjekten in das JSON-Format
869
19.7.2 Umwandeln von JSON in Datenobjekte
872
19.7.3 Grundlagen zur Arbeit mit Dateien
874
19.7.4 Beispiel: Ein JSON-Objekt mit einer Datei speichern und laden
876
19.8 Musterlösungen für die Übungen
879
19.8.1 Lösung für Übung 19.01: Der Kugelspeicher
879
19.8.2 Lösung für Übung 19.02: Warten auf das Drücken einer Tastenkombination
880
19.8.3 Lösung für Übung 19.03: Ein lauter Punktezähler ist besser als ein leiser!
881
19.8.4 Lösung für Übung 19.04: Die Liste muss operiert werden!
882
20 Übungskomplex 3
883
20.1 Aufgaben
883
20.1.1 Übung 20.01: Der Würfeleditor
883
20.1.2 Übung 20.02: Das Tastaturkeyboard
884
20.1.3 Übung 20.03: Wer ist der Schnellste? Ein Wettrennen gegen den Computer
884
20.1.4 Übung 20.04: Ein zeitloser Klassiker – Pong-Klon
884
20.1.5 Übung 20.05: Ein Game zur Ablenkung – dein eigenes Idle-Klickerspiel
885
20.2 Tipps
886
20.2.1 Tipps für Übung 20.01: Der Würfeleditor
886
20.2.2 Tipps für Übung 20.02: Das Tastaturkeyboard
886
20.2.3 Tipps für Übung 20.03: Wer ist der Schnellste? Ein Wettrennen gegen den Computer
886
20.2.4 Tipps für Übung 20.04: Ein zeitloser Klassiker – Pong-Klon
887
20.2.5 Tipps für Übung 20.05: Ein Game zur Ablenkung – dein eigenes Idle-Klickerspiel
888
20.3 Lösungen
888
20.3.1 Lösung für Übung 20.01: Der Würfeleditor
888
20.3.2 Lösung für Übung 20.02: Das Tastaturkeyboard
890
20.3.3 Lösung für Übung 20.03: Wer ist der Schnellste? Ein Wettrennen gegen den Computer
891
20.3.4 Lösung für Übung 20.04: Ein zeitloser Klassiker – Pong-Klon
899
20.3.5 Lösung für Übung 20.05: Ein Game zur Ablenkung – dein eigenes Idle-Klickerspiel
906
21 Übungskomplex 4
915
21.1 Aufgaben
916
21.1.1 Übung 21.01: Action trifft auf Konzentration – ein Flappy-Bird-Klon
916
21.1.2 Übung 21.02: Taktik ist die halbe Miete – dein eigenes Tower-Defense-Spiel
917
21.1.3 Übung 21.03: Vorbild »Super Mario« – dein eigenes Jump-and-Run-Spiel
918
21.1.4 Übung 21.04: Action mit Geschossen – dein eigenes Zielschießen
919
21.2 Tipps
921
21.2.1 Tipps für Übung 21.01: Action trifft auf Konzentration – ein Flappy-Bird-Klon
921
21.2.2 Tipps für Übung 21.02: Taktik ist die halbe Miete – dein eigenes Tower-Defense-Spiel
921
21.2.3 Tipps für Übung 21.03: Vorbild »Super Mario« – dein eigenes Jump-and-Run-Spiel
921
21.2.4 Tipps für Übung 21.04: Action mit Geschossen – dein eigenes Zielschießen
922
22 Ausblick
923
Index
925