Inhalt | 7 |
Vorwort | 17 |
1 Einleitung | 19 |
1.1 Virtual Reality | 20 |
1.2 Ziel des Buches | 20 |
1.3 Unterstützte Virtual-Reality-Brillen | 21 |
1.4 Unity | 22 |
1.4.1 Welche Unity-Version benötige ich? | 23 |
1.5 Was brauche ich? | 24 |
1.6 Weiterentwicklung der Technik | 25 |
1.7 Online-Zusatzmaterial | 25 |
2 Einführung in Virtual Reality | 27 |
2.1 Begriffserklärungen | 27 |
2.2 Augmented Reality, Mixed Reality und Virtual Reality | 29 |
2.3 Virtual Reality ist tot – lang lebe Virtual Reality | 30 |
2.4 Unterstützte Virtual-Reality-Brillen | 33 |
2.4.1 Oculus Rift | 34 |
2.4.2 HTC Vive | 35 |
2.4.3 Samsung GearVR | 36 |
2.4.4 Google Cardboard (nur teilweise unterstützt) | 37 |
2.4.5 Google Daydream | 38 |
2.5 Andere VR-Brillen | 39 |
2.5.1 Microsoft Mixed Reality | 39 |
2.5.2 PlayStation VR | 40 |
2.5.3 Razer OSVR | 41 |
2.6 Spiele, Anwendungen, Demos und Erfahrungen | 42 |
2.7 Seated, Standing & Room Scale | 43 |
2.8 „Bekannte“ Probleme | 44 |
2.8.1 Auflösung & Fliegengitter-Effekt | 45 |
2.8.2 Hardwareanforderungen | 45 |
2.8.3 Kurz- und Weitsichtigkeit | 46 |
2.8.4 Simulator Sickness | 46 |
3 Quickstart: 3D-Entwicklung mit Unity | 49 |
3.1 Installation | 49 |
3.1.1 Die Unity ID | 51 |
3.1.2 Android SDK & Java Development Kit(GearVR, GoogleVR) | 52 |
3.2 Der erste Start | 56 |
3.3 Ein neues Projekt anlegen | 57 |
3.4 Die Unity-Oberfläche | 58 |
3.4.1 Drag & Drop | 59 |
3.4.2 Project Browser | 60 |
3.4.3 Console | 61 |
3.4.4 Hierarchy | 62 |
3.4.5 Scene View | 64 |
3.4.6 Inspector | 66 |
3.5 Scenes | 72 |
3.5.1 Unity in der dritten Dimension | 72 |
3.5.2 GameObjects | 73 |
3.5.3 Prefabs | 75 |
3.6 Die wichtigsten Components | 76 |
3.6.1 Camera und Audio Listener | 76 |
3.6.2 Lights | 77 |
3.6.3 Mesh Filter und Mesh Renderer | 78 |
3.6.4 Collider | 79 |
3.6.5 Rigidbody | 80 |
3.6.6 Audio Source | 81 |
3.6.7 Scripts/Behaviours | 82 |
3.7 Assets | 82 |
3.7.1 Dateien importieren | 85 |
3.7.2 Unity Packages | 86 |
3.7.3 Asset Store | 89 |
3.7.4 Import Settings | 90 |
3.8 Projektvorbereitung (GearVR, GoogleVR) | 90 |
3.8.1 Zielplattform zu Android wechseln | 91 |
3.8.2 Externe Tools angeben (Android SDK, JDK) | 92 |
3.9 Test Scene erstellen und starten | 94 |
3.9.1 Rohbau für den Raum erstellen | 96 |
3.9.2 Scene speichern | 99 |
3.9.3 Licht anpassen | 100 |
3.9.4 Collider hinzufügen | 101 |
3.9.5 Möbelstücke einräumen | 102 |
3.9.6 Bücher hinzufügen | 105 |
3.9.7 Weitere Details | 109 |
3.9.8 Lichter und Lichteinstellungen optimieren | 110 |
3.9.9 Spieler positionieren | 113 |
3.10 VR-Unterstützung aktivieren | 114 |
3.10.1 Unitys VR-Unterstützung aktivieren | 114 |
3.11 Player Settings anpassen (GearVR, GoogleVR) | 115 |
3.12 Anti-Aliasing aktivieren | 117 |
3.13 Die Scene in VR testen | 118 |
3.13.1 Am PC in VR testen (Oculus Rift, SteamVR) | 119 |
3.13.2 Auf dem Smartphone in VR testen (GearVR, GoogleVR) | 120 |
3.14 So geht es weiter | 129 |
4 Dos and Don’ts – Game-Design für Virtual Reality | 131 |
4.1 Beispielprojekt | 132 |
4.2 Immersion | 132 |
4.2.1 Immersion brechen | 136 |
4.3 Positional Tracking | 136 |
4.3.1 Mobile VR-Brillen | 138 |
4.4 Locomotion | 139 |
4.4.1 Klassische Locomotion | 139 |
4.4.2 Teleport Locomotion | 142 |
4.4.3 Ohne künstliche Locomotion | 143 |
4.4.4 Andere Eingabemethoden für das Laufen | 146 |
4.5 Lebendige Spielwelt erschaffen | 147 |
4.6 User Interface | 151 |
4.6.1 Distanz und Größe | 154 |
4.7 Aufmerksamkeit lenken | 155 |
4.7.1 Objekte untersuchen | 156 |
4.7.2 Ereignisse nicht verpassen | 159 |
4.8 Uncanny Valley | 160 |
4.8.1 Auswirkung für dich | 163 |
4.9 Sound Design und Spatial Sound | 164 |
4.9.1 Spatial Sound | 164 |
4.9.2 Spatial-Audio-Engines | 167 |
5 C#-Scripte für Unity programmieren | 169 |
5.1 C#, .Net und Mono | 170 |
5.2 Grundlagen | 170 |
5.2.1 C#-Syntax | 170 |
5.2.2 Kommentare | 171 |
5.2.3 Variablen | 172 |
5.2.4 Methoden | 179 |
5.2.5 Klassen | 182 |
5.2.6 Dynamische Datentypen | 183 |
5.2.7 Statische Methoden und statische Variablen | 185 |
5.2.8 Vererbung | 186 |
5.2.9 Namespaces | 189 |
5.2.10 Lebenszyklus von Variablen | 190 |
5.2.11 Sichtbarkeiten | 191 |
5.2.12 Ausnahmen ? „Exceptions“ | 192 |
5.3 Erster Test | 193 |
5.3.1 Microsoft Visual Studio 2017 | 193 |
5.3.2 Script, Behaviour, Component und ihr Aufbau | 197 |
5.3.3 Debug-Ausgaben in die Console | 198 |
5.3.4 Eigenes Script testen | 199 |
5.3.5 Notation von Methoden und Variablen in diesem Buch | 201 |
5.4 Erweiterte Grundlagen | 201 |
5.4.1 Bedingungen und Verzweigungen | 201 |
5.4.2 Schleifen | 204 |
5.4.3 Eigenschaften | 209 |
5.4.4 Dynamische Listen | 210 |
5.5 Unity-spezifische Grundlagen | 214 |
5.5.1 Zufallswerte | 214 |
5.5.2 Editor-Eigenschaften | 215 |
5.5.3 MonoBehaviour Lebenszyklus-Methoden | 218 |
5.5.4 MonoBehaviour-Event-Methoden | 220 |
5.5.5 Auf GameObjects zugreifen | 221 |
5.5.6 GameObjects via Code erstellen | 224 |
5.5.7 GameObjects zerstören | 225 |
5.5.8 Transforms: GameObjects bewegen | 225 |
5.5.9 Auf andere Components zugreifen | 227 |
5.5.10 Components zu GameObject hinzufügen | 230 |
5.5.11 Components entfernen | 231 |
5.5.12 Parallele Methoden mit Coroutines | 231 |
5.5.13 Scripted-Event-Beispiel | 232 |
5.5.14 Methoden verzögert aufrufen mit Invoke | 233 |
5.6 Problemlösung | 234 |
5.6.1 Wort im Code ist rot unterstrichen | 234 |
5.6.2 Fehler in der Console im Editor | 235 |
5.6.3 Fehler in der Console, während das Spiel läuft | 235 |
5.6.4 „Can't add script“-Meldung oder Script ist nicht im „Add Component“-Menü vorhanden | 236 |
5.6.5 Sonstige Fehler | 237 |
6 Erweiterte Unity-Einführung | 239 |
6.1 Licht, Schatten und Lightmapping | 239 |
6.1.1 Global Illumination | 240 |
6.1.2 Farbräume | 250 |
6.1.3 Environment Light | 251 |
6.1.4 Lichter in der Scene | 252 |
6.1.5 Emissive Materials | 258 |
6.1.6 Light Probes | 258 |
6.1.7 Reflexionen | 261 |
6.1.8 Lighting-Fenster | 264 |
6.1.9 Light Explorer | 266 |
6.2 Shader | 267 |
6.2.1 Der Standard Shader | 268 |
6.2.2 Mobile Shader | 273 |
6.3 Audio | 276 |
6.3.1 AudioSources | 277 |
6.3.2 AudioSources via Script steuern | 280 |
6.3.3 Temporäre AuidoSource via Script | 282 |
6.3.4 Reverb Zones | 282 |
6.3.5 Audio Mixer | 283 |
6.4 Tastatur und Gamepad-Eingaben lesen | 287 |
6.4.1 Der Input-Manager | 288 |
6.4.2 Virtuelle Tasten und Achsen | 288 |
6.4.3 Konfiguration einer Achse | 289 |
6.4.4 Gamepad- und Tastatureingaben erfassen | 291 |
6.5 Physik | 293 |
6.5.1 Collider | 293 |
6.5.2 Rigidbody | 296 |
6.5.3 Kräfte und Beschleunigung | 298 |
6.5.4 Physics Joints ? Verknüpfungen | 299 |
6.5.5 Kollisionen und Trigger erkennen | 303 |
6.5.6 Raycasts | 309 |
6.5.7 Character Controller | 310 |
6.6 Partikeleffekte | 313 |
6.6.1 Partikelsysteme | 314 |
6.6.2 Particle-Effect-Steuerung | 315 |
6.6.3 Module des Particle Systems | 316 |
6.6.4 Particle Effect Editor | 323 |
6.6.5 Particle Systems via Script steuern | 323 |
6.6.6 Standard-Partikeleffekte | 324 |
6.7 Landschaften mit Terrains erstellen | 324 |
6.8 Animation System | 327 |
6.8.1 Animation Workflow | 328 |
6.8.2 Humanoide Animationen und Avatare | 330 |
6.8.3 Modelle & Animationen importieren | 331 |
6.8.4 Animation Controller | 335 |
6.9 Wegfindung | 339 |
6.9.1 Wegfindungssystem einrichten | 339 |
6.9.2 Grundlagen | 341 |
6.9.3 NavMeshs berechnen | 343 |
6.9.4 NavMeshs verbinden | 344 |
6.9.5 Dynamische Hindernisse | 344 |
6.9.6 NavMeshAgent erstellen | 345 |
6.9.7 NavMeshAgent über Script steuern | 345 |
6.9.8 Erweiterte Beispiele | 346 |
6.10 Savegames ? Daten speichern und laden | 347 |
6.11 Performance optimieren | 348 |
6.11.1 Batching | 348 |
6.11.2 Performance im Auge behalten | 349 |
6.11.3 VR-Optimierungs-Checkliste und Grenzen | 353 |
6.12 User Interface ? Quickstart | 355 |
6.12.1 User Interface im World Space erstellen | 355 |
6.12.2 User Interface in VR bedienen | 360 |
7 Die Virtual-Reality-SDKs | 363 |
7.1 Unitys-interne VR-Unterstützung | 364 |
7.1.1 Unitys interne VR-Unterstützung aktivieren | 364 |
7.1.2 Interne VR-Unterstützung in der Scripting-API | 366 |
7.1.3 InputTracking | 366 |
7.1.4 VRDevice | 367 |
7.1.5 VRSettings | 368 |
7.2 Oculus Integration for Unity (Rift und Gear) | 370 |
7.2.1 Download und Import | 370 |
7.2.2 Prefabs | 372 |
7.2.3 Gamepad-, Headset- und Touch-Eingaben lesen | 379 |
7.2.4 Haptisches Feedback | 381 |
7.2.5 Oculus Avatar SDK | 383 |
7.2.6 Mehr Infos und Hilfe | 385 |
7.3 SteamVR (u.?a. HTC Vive) | 386 |
7.3.1 Download und Import | 387 |
7.3.2 Prefabs | 389 |
7.3.3 Eingaben der Controller lesen | 396 |
7.3.4 Haptisches Feedback | 397 |
7.3.5 Interaktionsbeispiel aus The Lab (u.?a. Longbow, Teleport) | 398 |
7.3.6 Mehr Infos und Hilfe | 398 |
7.4 GoogleVR SDK | 399 |
7.4.1 Download und Import | 399 |
7.4.2 Prefabs | 400 |
7.4.3 Eingaben des Daydream Controllers lesen | 404 |
7.4.4 Erweiterte Editorfunktionen fürs Testen | 405 |
8 Beispielprojekte ? Einleitung | 409 |
9 Bow and Arrow Castle Defense – GoogleVR mit Controller | 411 |
9.1 Der Start | 412 |
9.2 Die Kernmechanik ? Bogenschießen | 414 |
9.2.1 Scene vorbereiten | 414 |
9.2.2 Einfaches Scene-Design | 414 |
9.2.3 Spieler konfigurieren und Daydream Controller einbinden | 417 |
9.2.4 Schusskraft für den Bogen | 419 |
9.2.5 Ein Pfeil für den Bogen | 421 |
9.2.6 Pfeile nachladen | 424 |
9.2.7 Dynamische Schusskraft | 426 |
9.2.8 Flugkurve Vorschau – Add-on | 428 |
9.2.9 Schaden und zerstörbare Ziele | 431 |
9.3 Game- & Level-Design | 432 |
9.4 Game Manager | 434 |
9.5 Gegner – Orks! | 439 |
9.5.1 NavMesh erstellen | 439 |
9.5.2 Ork-Animator Controller | 439 |
9.5.3 Die künstliche Intelligenz | 441 |
9.5.4 Der Ork | 442 |
9.5.5 Prefab erstellen und platzieren | 444 |
9.6 Abschluss | 444 |
9.6.1 Umsetzung dieses Beispiels für andere VR-Brillen | 445 |
10 Space Battle ? Oculus Rift & SteamVR | 447 |
10.1 Der Start | 448 |
10.1.1 Scene vorbereiten | 449 |
10.2 Die Kernmechanik ? ein Raumschiff fliegen | 452 |
10.2.1 Spieler-Raumschiff erstellen | 453 |
10.2.2 Raumschiff-Steuerung | 456 |
10.2.3 Starfield/Weltraumstaub | 463 |
10.2.4 Schadenssystem & Plasmakanone | 466 |
10.3 Feinde und Verbündete | 474 |
10.3.1 KI-Raumschiff | 474 |
10.3.2 Die künstliche Intelligenz | 476 |
10.4 Abschluss | 485 |
10.4.1 Umsetzung dieses Beispiels für andere VR-Brillen | 486 |
11 Dungeon Crawler ? GearVR | 487 |
11.1 Der Start | 488 |
11.1.1 Osig und Unity2017.1.0f3-Patch einfügen | 490 |
11.2 Einen Dungeon bauen | 490 |
11.2.1 Die Bauteile | 491 |
11.2.2 Level-Design | 491 |
11.2.3 Audio: Environment-Loop | 494 |
11.3 Occlusion Culling | 494 |
11.4 Kernmechanik ? Laufen, Kämpfen, Interagieren | 496 |
11.4.1 Spieler erstellen | 497 |
11.4.2 Bewegungen entlang des Gitters | 499 |
11.4.3 Interaktive und lebendige Objekte | 502 |
11.4.4 Die Spielerfunktionen | 504 |
11.4.5 Spielereingaben lesen | 509 |
11.4.6 Player fertigstellen | 512 |
11.5 Gegner: Goblins | 513 |
11.5.1 Die künstliche Intelligenz | 514 |
11.5.2 Das GameObject und Prefab | 516 |
11.5.3 Bevölkerung des Dungeons mit Goblins | 517 |
11.6 Pickups: Kristalle | 518 |
11.7 Dungeon-Ausgang | 520 |
11.8 Interaktive Hindernisse | 522 |
11.8.1 Falle: Stacheln | 522 |
11.8.2 Rätsel: Schalter und Tore | 524 |
11.9 Abschluss | 527 |
11.9.1 Umsetzung dieses Beispiels für andere VR-Brillen | 528 |
12 Sci-Fi-Stealth-Shooter ? Oculus Rift mit Oculus Touch und SteamVR | 529 |
12.1 Der Start | 530 |
12.2 Trainings-Areal anlegen | 532 |
12.3 Player-GameObject erstellen | 534 |
12.3.1 Oculus SDK: Player-GameObject erstellen | 534 |
12.3.2 SteamVR SDK: Player-GameObject erstellen | 535 |
12.3.3 Character Controller | 536 |
12.3.4 Locomotion – klassisch und teleportieren | 539 |
12.3.5 Eingaben lesen und Methoden aufrufen | 543 |
12.3.6 Nach Gegenständen greifen | 548 |
12.4 Lebensenergie verwalten | 558 |
12.4.1 Lebensenergie des Spielers und Game Over | 559 |
12.5 Laserpistole | 560 |
12.5.1 Das GameObject vorbereiten | 560 |
12.5.2 Die Laserpistolen-Funktion | 561 |
12.5.3 Der Laserstrahl | 563 |
12.6 Roboter-Gegner | 565 |
12.6.1 EnemyAi – wie funktioniert die KI? | 565 |
12.6.2 Roboter-GameObject anlegen | 566 |
12.6.3 Trigger Collider ignorieren | 568 |
12.7 Level erstellen | 569 |
12.7.1 Level-Ende | 570 |
12.8 Abschluss | 571 |
13 VR-Spiele teilen, präsentieren und Feedback erhalten | 573 |
13.1 Spieleidee entwickeln | 573 |
13.2 VR-Spiele Builds erstellen und teilen | 574 |
13.3 Feedback erhalten und Spiel bewerben | 576 |
13.3.1 Tipps für das Präsentieren von Virtual Reality | 577 |
13.4 Spiel veröffentlichen | 578 |
13.5 Kostenlose Assets | 579 |
14 Schlusswort | 581 |
Index | 583 |
Leere Seite | 2 |