Inhalt | 5 |
Vorwort | 20 |
1 Einleitung | 22 |
1.1 Multiplattform-Publishing | 22 |
1.2 Das kann Unity (nicht) | 23 |
1.3 Lizenzmodelle | 23 |
1.4 Aufbau und Ziel des Buches | 24 |
1.5 Weiterentwicklung von Unity | 25 |
1.6 Online-Zusatzmaterial | 26 |
2 Grundlagen | 28 |
2.1 Installation | 28 |
2.2 Oberfläche | 28 |
2.2.1 Hauptmenü | 30 |
2.2.2 Scene View | 31 |
2.2.3 Game View | 33 |
2.2.4 Toolbar | 35 |
2.2.5 Hierarchy | 37 |
2.2.6 Inspector | 38 |
2.2.7 Project Browser | 42 |
2.2.8 Console | 44 |
2.3 Das Unity-Projekt | 44 |
2.3.1 Neues Projekt anlegen | 45 |
2.3.2 Bestehendes Projekt öffnen | 46 |
2.3.3 Projektdateien | 47 |
2.3.4 Szene | 47 |
2.3.5 Game Objects | 48 |
2.3.6 Tags | 50 |
2.3.7 Layer | 51 |
2.3.8 Assets | 52 |
2.3.9 Frames | 55 |
2.4 Das erste Übungsprojekt | 55 |
3 C# und Unity | 58 |
3.1 Die Sprache C# | 58 |
3.2 Syntax | 59 |
3.3 Kommentare | 60 |
3.4 Variablen | 60 |
3.4.1 Namenskonventionen | 60 |
3.4.2 Datentypen | 61 |
3.4.3 Schlüsselwort var | 62 |
3.4.4 Datenfelder/Array | 62 |
3.5 Konstanten | 64 |
3.5.1 Enumeration | 64 |
3.6 Typkonvertierung | 65 |
3.7 Rechnen | 65 |
3.8 Verzweigungen | 66 |
3.8.1 if-Anweisungen | 67 |
3.8.2 switch-Anweisung | 69 |
3.9 Schleifen | 70 |
3.9.1 for-Schleife | 70 |
3.9.2 Foreach-Schleife | 71 |
3.9.3 while-Schleife | 71 |
3.9.4 do-Schleife | 72 |
3.10 Klassen | 72 |
3.10.1 Komponenten per Code zuweisen | 73 |
3.10.2 Instanziierung von Nichtkomponenten | 73 |
3.10.3 Werttypen und Referenztypen | 75 |
3.10.4 Überladene Methoden | 76 |
3.11 Der Konstruktor | 76 |
3.11.1 Konstruktoren in Unity | 77 |
3.12 Lokale und globale Variablen | 77 |
3.12.1 Namensverwechslung verhindern mit this | 77 |
3.13 Zugriff und Sichtbarkeit | 78 |
3.14 Statische Klassen und Klassenmember | 78 |
3.15 Parametermodifizierer out/ref | 79 |
3.16 Array-Übergabe mit params | 80 |
3.17 Eigenschaften und Eigenschaftsmethoden | 81 |
3.18 Vererbung | 82 |
3.18.1 Basisklasse und abgeleitete Klassen | 83 |
3.18.2 Vererbung und die Sichtbarkeit | 83 |
3.18.3 Geerbte Methode überschreiben | 84 |
3.18.4 Zugriff auf die Basisklasse | 84 |
3.18.5 Klassen versiegeln | 85 |
3.19 Polymorphie | 85 |
3.20 Schnittstellen | 86 |
3.20.1 Schnittstelle definieren | 86 |
3.20.2 Schnittstellen implementieren | 86 |
3.20.3 Zugriff über eine Schnittstelle | 87 |
3.21 Namespaces | 88 |
3.21.1 Eigene Namespaces definieren | 89 |
3.22 Generische Klassen und Methoden | 90 |
3.22.1 List | 90 |
3.22.2 Dictionary | 91 |
4 Skript-Programmierung | 94 |
4.1 MonoDevelop | 94 |
4.1.1 Hilfe in MonoDevelop | 95 |
4.1.2 Syntaxfehler | 95 |
4.2 Nutzbare Programmiersprachen | 96 |
4.2.1 Warum C#? | 97 |
4.3 Unitys Vererbungsstruktur | 97 |
4.3.1 Object | 98 |
4.3.2 GameObject | 98 |
4.3.3 ScriptableObject | 98 |
4.3.4 Component | 98 |
4.3.5 Transform | 99 |
4.3.6 Behaviour | 99 |
4.3.7 MonoBehaviour | 99 |
4.4 Skripte erstellen | 99 |
4.4.1 Skripte umbenennen | 100 |
4.5 Das Skript-Grundgerüst | 101 |
4.6 Unitys Event-Methoden | 101 |
4.6.1 Update | 102 |
4.6.2 FixedUpdate | 102 |
4.6.3 Awake | 103 |
4.6.4 Start | 103 |
4.6.5 OnGUI | 103 |
4.6.6 LateUpdate | 104 |
4.6.7 Aufruf-Reihenfolge | 104 |
4.7 Komponentenprogrammierung | 105 |
4.7.1 Auf GameObjects zugreifen | 105 |
4.7.2 GameObjects aktivieren und deaktivieren | 107 |
4.7.3 GameObjects zerstören | 107 |
4.7.4 GameObjects erstellen | 107 |
4.7.5 Auf Components zugreifen | 108 |
4.7.6 Components hinzufügen | 110 |
4.7.7 Components entfernen | 110 |
4.7.8 Components aktivieren und deaktivieren | 110 |
4.7.9 Attribute | 111 |
4.8 Zufallswerte | 112 |
4.9 Parallel Code ausführen | 113 |
4.9.1 WaitForSeconds | 114 |
4.10 Verzögerte und wiederholende Funktionsaufrufe mit Invoke | 115 |
4.10.1 Invoke | 115 |
4.10.2 InvokeRepeating, IsInvoking und CancelInvoke | 115 |
4.11 Daten speichern und laden | 116 |
4.11.1 PlayerPrefs-Voreinstellungen | 116 |
4.11.2 Daten speichern | 117 |
4.11.3 Daten laden | 118 |
4.11.4 Key überprüfen | 118 |
4.11.5 Löschen | 118 |
4.11.6 Save | 118 |
4.12 Szeneübergreifende Daten | 119 |
4.12.1 Werteübergabe mit PlayerPrefs | 119 |
4.12.2 Zerstörung unterbinden | 121 |
4.13 Debug-Klasse | 123 |
4.14 Kompilierungsreihenfolge | 123 |
4.14.1 Programmsprachen mischen und der sprachübergreifende Zugriff | 124 |
4.15 Ausführungsreihenfolge | 124 |
4.16 Plattformabhängig Code kompilieren | 125 |
4.17 Eigene Assets mit ScriptableObject | 126 |
4.17.1 Neue ScriptableObject-Subklasse erstellen | 126 |
4.17.2 Instanzen eines ScriptableObjects erstellen | 127 |
5 Objekte in der zweiten und dritten Dimension | 130 |
5.1 Das 3D-Koordinatensystem | 130 |
5.2 Vektoren | 131 |
5.2.1 Ort, Winkel und Länge | 132 |
5.2.2 Normalisieren | 133 |
5.3 Das Mesh | 134 |
5.3.1 Normalenvektor | 135 |
5.3.2 MeshFilter und MeshRenderer | 136 |
5.4 Transform | 138 |
5.4.1 Kontextmenü der Transform-Komponente | 138 |
5.4.2 Objekthierarchien | 139 |
5.4.3 Scripting mit Transform | 140 |
5.4.4 Quaternion | 140 |
5.5 Shader und Materials | 141 |
5.5.1 Der Standard-Shader | 142 |
5.5.2 Texturen | 159 |
5.5.3 UV Mapping | 162 |
5.6 3D-Modelle einer Szene zufügen | 163 |
5.6.1 Primitives | 163 |
5.6.2 3D-Modelle importieren | 165 |
5.6.3 In Unity modellieren | 166 |
5.6.4 Prozedurale Mesh-Generierung | 167 |
5.6.5 Level Of Detail | 167 |
5.7 2D in Unity | 169 |
5.7.1 Sprites | 170 |
5.7.2 SpriteRenderer | 175 |
5.7.3 Parallax Scrolling | 178 |
6 Kameras, die Augen des Spielers | 182 |
6.1 Die Kamera | 182 |
6.1.1 Komponenten eines Kamera-Objektes | 184 |
6.1.2 HDR – High Dynamic Range-Rendering | 184 |
6.1.3 Linearer- und Gamma-Farbraum | 187 |
6.2 Kamerasteuerung | 190 |
6.2.1 Statische Kamera | 190 |
6.2.2 Parenting-Kamera | 191 |
6.2.3 Kamera-Skripte | 191 |
6.3 ScreenPointToRay | 193 |
6.4 Mehrere Kameras | 194 |
6.4.1 Kamerawechsel | 194 |
6.4.2 Split-Screen | 195 |
6.4.3 Einfache Minimap | 196 |
6.4.4 Render Texture | 198 |
6.5 Image Effects | 200 |
6.5.1 Beispiel: Haus bei Nacht | 200 |
6.6 Skybox | 202 |
6.6.1 Mehrere Skyboxen gleichzeitig einsetzen | 203 |
6.6.2 Skybox selber erstellen | 204 |
6.7 Occlusion Culling | 205 |
6.7.1 Occluder Static und Occludee Static | 207 |
6.7.2 Occlusion Culling erstellen | 207 |
7 Licht und Schatten | 210 |
7.1 Environment Lighting | 210 |
7.2 Lichtarten | 212 |
7.2.1 Directional Light | 213 |
7.2.2 Point Light | 214 |
7.2.3 Spot Light | 215 |
7.2.4 Area Light | 216 |
7.3 Schatten | 217 |
7.3.1 Einfluss des MeshRenderers auf Schatten | 218 |
7.4 Light Cookies | 219 |
7.4.1 Import Settings eines Light Cookies | 219 |
7.4.2 Light Cookies und Point Lights | 220 |
7.5 Light Halos | 221 |
7.5.1 Unabhängige Halos | 222 |
7.6 Lens Flares | 222 |
7.6.1 Eigene Lens Flares | 223 |
7.7 Projector | 223 |
7.7.1 Standard Projectors | 223 |
7.8 Lightmapping | 225 |
7.8.1 Light Probes | 228 |
7.9 Rendering Paths | 230 |
7.9.1 Forward Rendering | 231 |
7.9.2 Vertex Lit | 232 |
7.9.3 Deferred Lighting | 233 |
7.10 Global Illumination | 234 |
7.10.1 Baked GI | 235 |
7.10.2 Realtime Lighting | 236 |
7.10.3 Lightmapping Settings | 237 |
7.11 Light Explorer | 238 |
7.12 Reflexionen (Spiegelungen) | 239 |
7.12.1 Reflection Probes | 240 |
7.13 Qualitätseinstellungen | 243 |
7.13.1 Quality Settings | 243 |
7.13.2 Qualitätsstufen per Code festlegen | 243 |
8 Physik in Unity | 246 |
8.1 Physikberechnung | 246 |
8.2 Rigidbodies | 247 |
8.2.1 Rigidbodies kennenlernen | 248 |
8.2.2 Masseschwerpunkt | 249 |
8.2.3 Kräfte und Drehmomente zufügen | 250 |
8.3 Kollisionen | 253 |
8.3.1 Collider | 253 |
8.3.2 Trigger | 257 |
8.3.3 Static Collider | 259 |
8.3.4 Kollisionen mit schnellen Objekten | 259 |
8.3.5 Terrain Collider | 260 |
8.3.6 Layer-basierende Kollisionserkennung | 260 |
8.3.7 Mit Layer-Masken arbeiten | 261 |
8.4 Wheel Collider | 263 |
8.4.1 Wheel Friction Curve | 264 |
8.4.2 Entwicklung einer Fahrzeugsteuerung | 266 |
8.4.3 Autokonfiguration | 273 |
8.4.4 Fahrzeugstabilität | 275 |
8.5 Physic Materials | 275 |
8.6 Joints | 276 |
8.6.1 Fixed Joint | 276 |
8.6.2 Spring Joint | 277 |
8.6.3 Hinge Joint | 277 |
8.7 Raycasting | 277 |
8.8 Character Controller | 279 |
8.8.1 SimpleMove | 279 |
8.8.2 Move | 280 |
8.8.3 Kräfte zufügen | 281 |
8.8.4 Einfacher First Person Controller | 282 |
8.9 2D-Physik | 284 |
8.9.1 OnCollision2D- und OnTrigger2D-Methoden | 286 |
8.9.2 2D Physic Effectors | 287 |
9 Maus, Tastatur, Touch | 290 |
9.1 Virtuelle Achsen und Tasten | 290 |
9.1.1 Der Input-Manager | 290 |
9.1.2 Virtuelle Achsen | 292 |
9.1.3 Virtuelle Tasten | 292 |
9.1.4 Steuern mit Mauseingaben | 293 |
9.1.5 Joystick-Inputs | 293 |
9.1.6 Anlegen neuer Inputs | 294 |
9.2 Achsen- und Tasteneingaben auswerten | 294 |
9.2.1 GetAxis | 294 |
9.2.2 GetButton | 295 |
9.3 Tastatureingaben auswerten | 296 |
9.3.1 GetKey | 296 |
9.3.2 anyKey | 296 |
9.4 Mauseingaben auswerten | 297 |
9.4.1 GetMouseButton | 297 |
9.4.2 Mauseingaben auf Objekten per Event | 298 |
9.4.3 mousePosition | 298 |
9.4.4 Mauszeiger ändern | 299 |
9.5 Touch-Eingaben auswerten | 301 |
9.5.1 Der Touch-Typ | 301 |
9.5.2 Input.touches | 302 |
9.5.3 TouchCount | 302 |
9.5.4 GetTouch | 302 |
9.5.5 CrossPlatformInput | 303 |
9.6 Beschleunigungssensor auswerten | 304 |
9.6.1 Input.acceleration | 305 |
9.6.2 Tiefpass-Filter | 306 |
9.7 Steuerungen bei Mehrspieler-Games | 307 |
9.7.1 Split-Screen-Steuerung | 307 |
9.7.2 Netzwerkspiele | 308 |
10 Audio | 310 |
10.1 AudioListener | 310 |
10.2 AudioSource | 311 |
10.2.1 Durch Mauern hören verhindern | 313 |
10.2.2 Sound starten und stoppen | 315 |
10.2.3 Temporäre AudioSource | 316 |
10.3 AudioClip | 317 |
10.3.1 Länge ermitteln | 317 |
10.4 Reverb Zone | 317 |
10.5 Filter | 319 |
10.6 Audio Mixer | 319 |
10.6.1 Das Audio Mixer-Fenster | 319 |
10.6.2 Audiosignalwege | 323 |
10.6.3 Mit Snapshots arbeiten | 327 |
10.6.4 Views erstellen | 328 |
10.6.5 Parameter per Skript bearbeiten | 328 |
11 Partikeleffekte mit Shuriken | 332 |
11.1 Editor-Fenster | 333 |
11.2 Particle Effect Control | 334 |
11.3 Numerische Parametervarianten | 334 |
11.4 Farbparameter-Varianten | 335 |
11.5 Default-Modul | 335 |
11.6 Effekt-Module | 337 |
11.6.1 Emission | 337 |
11.6.2 Shape | 337 |
11.6.3 Velocity over Lifetime | 339 |
11.6.4 Limit Velocity over Lifetime | 339 |
11.6.5 Inherit Velocity | 340 |
11.6.6 Force over Lifetime | 340 |
11.6.7 Color over Lifetime | 340 |
11.6.8 Color by Speed | 341 |
11.6.9 Size over Lifetime | 341 |
11.6.10 Size by Speed | 341 |
11.6.11 Rotation over Lifetime | 341 |
11.6.12 Rotation by Speed | 342 |
11.6.13 External Forces | 342 |
11.6.14 Noise | 342 |
11.6.15 Collision | 343 |
11.6.16 Triggers | 344 |
11.6.17 Sub Emitter | 346 |
11.6.18 Texture-Sheet-Animation | 346 |
11.6.19 Lights | 347 |
11.6.20 Trails | 347 |
11.6.21 Renderer | 348 |
11.7 Partikelemission starten, stoppen und unterbrechen | 350 |
11.7.1 Play | 351 |
11.7.2 Stop | 351 |
11.7.3 Pause | 351 |
11.7.4 enableEmission | 351 |
11.8 OnParticleCollision | 352 |
11.8.1 GetCollisionEvents | 352 |
11.9 Feuer erstellen | 353 |
11.9.1 Materials erstellen | 353 |
11.9.2 Feuer-Partikelsystem | 354 |
11.9.3 Rauch-Partikelsystem | 357 |
11.10 Wassertropfen erstellen | 361 |
11.10.1 Tropfen-Material erstellen | 361 |
11.10.2 Wassertropfen-Partikelsystem | 362 |
11.10.3 Kollisionspartikelsystem | 364 |
11.10.4 Kollisionssound | 366 |
12 Landschaften gestalten | 368 |
12.1 Was Terrains können und wo die Grenzen liegen | 369 |
12.2 Terrainhöhe verändern | 369 |
12.2.1 Pinsel | 370 |
12.2.2 Oberflächen anheben und senken | 370 |
12.2.3 Plateaus und Schluchten erstellen | 371 |
12.2.4 Oberflächen weicher machen | 372 |
12.2.5 Heightmaps | 372 |
12.3 Terrain texturieren | 374 |
12.3.1 Textur-Pinsel | 375 |
12.3.2 Texturen verwalten | 375 |
12.4 Bäume und Sträucher | 377 |
12.4.1 Bedienung des Place Tree-Tools | 378 |
12.4.2 Wälder erstellen | 378 |
12.4.3 Mit Bäumen kollidieren | 378 |
12.5 Gräser und Details hinzufügen | 379 |
12.5.1 Detail-Meshs | 380 |
12.5.2 Gräser | 381 |
12.5.3 Quelldaten nachladen | 381 |
12.6 Terrain-Einstellungen | 382 |
12.6.1 Base Terrain | 382 |
12.6.2 Resolution | 382 |
12.6.3 Tree & Details Objects | 383 |
12.6.4 Wind Settings | 383 |
12.6.5 Zur Laufzeit Terrain-Eigenschaften verändern | 384 |
12.7 Der Weg zum perfekten Terrain | 385 |
12.8 Gewässer | 386 |
13 Wind Zones | 388 |
13.1 Spherical vs. Directional | 389 |
13.2 Wind Zone – Eigenschaften | 390 |
13.3 Frische Brise | 391 |
13.4 Turbine | 391 |
14 GUI | 392 |
14.1 Das UI-System uGUI | 393 |
14.1.1 Canvas | 393 |
14.1.2 RectTransform | 397 |
14.1.3 UI-Sprite Import | 401 |
14.1.4 Grafische Controls | 402 |
14.1.5 Interaktive Controls | 406 |
14.1.6 Controls designen | 413 |
14.1.7 Animationen in uGUI | 414 |
14.1.8 Event Trigger | 415 |
14.2 Screen-Klasse | 416 |
14.2.1 Schriftgröße dem Bildschirm anpassen | 416 |
14.3 OnGUI-Programmierung | 417 |
14.3.1 GUI | 418 |
14.3.2 GUILayout | 420 |
14.3.3 GUIStyle und GUISkin | 421 |
15 Prefabs | 424 |
15.1 Prefabs erstellen und nutzen | 424 |
15.2 Prefab-Instanzen erzeugen | 424 |
15.2.1 Instanzen per Code erstellen | 425 |
15.2.2 Instanzen weiter bearbeiten | 426 |
15.3 Prefabs ersetzen und zurücksetzen | 426 |
15.4 Prefab-Verbindungen auflösen | 427 |
16 Internet und Datenbanken | 428 |
16.1 Die WWW-Klasse | 428 |
16.1.1 Rückgabewert-Formate | 429 |
16.1.2 Parameter übergeben | 430 |
16.2 Datenbank-Kommunikation | 431 |
16.2.1 Daten in einer Datenbank speichern | 431 |
16.2.2 Daten von einer Datenbank abfragen | 432 |
16.2.3 Rückgabewerte parsen | 434 |
16.2.4 Datenhaltung in eigenen Datentypen | 435 |
16.2.5 HighscoreCommunication.cs | 437 |
16.2.6 Datenbankverbindung in PHP | 438 |
17 Animationen | 440 |
17.1 Allgemeiner Animation-Workflow | 441 |
17.2 Animationen erstellen | 441 |
17.2.1 Animation View | 442 |
17.2.2 Curves vs. Dope Sheet | 443 |
17.2.3 Animationsaufnahme | 443 |
17.2.4 Beispiel Fallgatter-Animation | 448 |
17.3 Animationen importieren | 449 |
17.3.1 Rig | 450 |
17.3.2 Animationen | 452 |
17.4 Animationen einbinden | 455 |
17.4.1 Animator Controller | 456 |
17.4.2 Animator-Komponente | 471 |
17.4.3 Beispiel Fallgatter: Animator Controller | 472 |
17.5 Controller-Skripte | 474 |
17.5.1 Parameter des Animator Controllers setzen | 475 |
17.5.2 Animation States abfragen | 475 |
17.5.3 Beispiel Fallgatter Controller-Skript | 476 |
17.6 Animation Events | 478 |
17.7 Das „alte“ Animationssystem | 479 |
18 Künstliche Intelligenz | 482 |
18.1 NavMeshAgent | 483 |
18.1.1 Eigenschaften der Navigationskomponente | 484 |
18.1.2 Zielpunkt zuweisen | 485 |
18.1.3 Pfadsuche unterbrechen und fortsetzen | 485 |
18.2 Navigation-Fenster | 486 |
18.2.1 Agents Tab | 487 |
18.2.2 Object Tab | 488 |
18.2.3 Bake Tab | 488 |
18.2.4 Areas Tab | 489 |
18.3 NavMeshObstacle | 490 |
18.4 Off-Mesh Link | 491 |
18.4.1 Automatische Off-Mesh Links | 491 |
18.4.2 Manuelle Off-Mesh Links | 492 |
18.5 Point & Click-Steuerung für Maus und Touch | 493 |
19 Fehlersuche und Performance | 496 |
19.1 Fehlersuche | 496 |
19.1.1 Breakpoints | 497 |
19.1.2 Variablen beobachten | 498 |
19.1.3 Console Tab nutzen | 499 |
19.1.4 GUI- und GUILayout nutzen | 499 |
19.1.5 Fehlersuche bei mobilen Plattformen | 500 |
19.2 Performance | 502 |
19.2.1 Rendering-Statistik | 503 |
19.2.2 Batching-Verfahren | 504 |
19.2.3 Analyse mit dem Profiler | 505 |
19.2.4 Echtzeit-Analyse auf Endgeräten | 507 |
20 Spiele erstellen und publizieren | 510 |
20.1 Der Build-Prozess | 510 |
20.1.1 Szenen des Spiels | 511 |
20.1.2 Plattformen | 512 |
20.1.3 Notwendige SDKs | 512 |
20.1.4 Plattformspezifische Optionen | 513 |
20.1.5 Developer Builds | 513 |
20.2 Publizieren | 514 |
20.2.1 App | 515 |
20.2.2 Browser-Game | 515 |
20.2.3 Desktop-Anwendung | 516 |
21 Erstes Beispiel-Game: 2D-Touch-Game | 518 |
21.1 Projekt und Szene | 518 |
21.1.1 Die Kamera | 520 |
21.1.2 Texturen importieren und Sprites definieren | 521 |
21.2 Gespenster und Hintergrund | 523 |
21.2.1 Gespenster animieren | 526 |
21.2.2 Gespenster laufen lassen | 530 |
21.2.3 Gespenster-Prefab erstellen | 532 |
21.3 Der GameController | 533 |
21.3.1 Der Spawner | 533 |
21.3.2 Level-Anzeige | 535 |
21.3.3 Der Input-Controller | 536 |
21.3.4 Game Over-UI | 538 |
21.3.5 Hintergrundmusik | 545 |
21.4 Punkte zählen | 546 |
21.5 Spielende | 547 |
21.6 Spiel erstellen | 548 |
22 Zweites Beispiel-Game: 3D Dungeon Crawler | 550 |
22.1 Level-Design | 551 |
22.1.1 Modellimport | 552 |
22.1.2 Materials konfigurieren | 553 |
22.1.3 Prefabs erstellen | 554 |
22.1.4 Dungeon erstellen | 556 |
22.1.5 Dekoration erstellen | 561 |
22.2 Inventarsystem erstellen | 563 |
22.2.1 Verwaltungslogik | 563 |
22.2.2 Oberfläche des Inventarsystems | 571 |
22.2.3 Inventar-Items | 574 |
22.3 Game Controller | 581 |
22.4 Spieler erstellen | 581 |
22.4.1 Lebensverwaltung | 583 |
22.4.2 Spielersteuerung | 594 |
22.4.3 Wurfstein entwickeln | 602 |
22.4.4 Lautstärke steuern | 608 |
22.5 Quest erstellen | 609 |
22.5.1 Erfahrungspunkte verwalten | 609 |
22.5.2 Questgeber erstellen | 611 |
22.5.3 Sub-Quest erstellen | 620 |
22.6 Gegner erstellen | 625 |
22.6.1 Model-, Rig- und Animationsimport | 625 |
22.6.2 Komponenten und Prefab konfigurieren | 626 |
22.6.3 Animator Controller erstellen | 628 |
22.6.4 NavMesh erstellen | 630 |
22.6.5 Umgebung und Feinde erkennen | 631 |
22.6.6 Gesundheitszustand verwalten | 634 |
22.6.7 Künstliche Intelligenz entwickeln | 638 |
22.7 Eröffnungsszene | 647 |
22.7.1 Szene erstellen | 647 |
22.7.2 Startmenü-Logik erstellen | 648 |
22.7.3 Menü-GUI erstellen | 650 |
22.8 WebGL-Anpassungen | 652 |
22.8.1 WebGL-Input ändern | 652 |
22.8.2 Quit-Methode in WebGL abfangen | 653 |
22.9 Finale Einstellungen | 654 |
22.10 So könnte es weitergehen | 657 |
23 Der Produktionsprozess in der Spieleentwicklung | 658 |
23.1 Die Produktionsphasen | 658 |
23.1.1 Ideen- und Konzeptionsphase | 659 |
23.1.2 Planungsphase | 659 |
23.1.3 Entwicklungsphase | 659 |
23.1.4 Testphase | 660 |
23.1.5 Veröffentlichung und Postproduktion | 660 |
23.2 Das Game-Design-Dokument | 660 |
24 Schlusswort | 662 |
Index | 664 |