Inhalt | 6 |
Vorwort | 24 |
1 Einleitung | 26 |
1.1?Multiplattform-Publishing | 26 |
1.2?Das kann Unity (nicht) | 27 |
1.3?Lizenzmodelle | 27 |
1.4?Aufbau und Ziel des Buches | 28 |
1.5?Weiterentwicklung von Unity | 29 |
1.6?Online-Zusatzmaterial | 29 |
2 Grundlagen | 32 |
2.1?Installation | 32 |
2.2?Oberfläche | 32 |
2.2.1?Hauptmenü | 34 |
2.2.2?Scene View | 35 |
2.2.2.1?Navigieren in der Scene View | 36 |
2.2.2.2?Scene Gizmo | 36 |
2.2.3?Game View | 37 |
2.2.4?Toolbar | 38 |
2.2.5?Hierarchy | 40 |
2.2.5.1?Parenting | 41 |
2.2.6?Inspector | 42 |
2.2.6.1?Kopfinformationen im Inspector | 43 |
2.2.6.2?Variablen Werte zuweisen | 43 |
2.2.6.3?Komponenten-Menüs | 44 |
2.2.6.4?Preview-Fenster | 45 |
2.2.7?Project Browser | 45 |
2.2.7.1?Assets suchen und finden | 46 |
2.2.7.2?Assets importieren | 47 |
2.2.8?Console | 47 |
2.3?Das Unity-Projekt | 48 |
2.3.1?Neues Projekt anlegen | 48 |
2.3.2?Bestehendes Projekt öffnen | 49 |
2.3.2.1?Ältere Projekte öffnen | 50 |
2.3.3?Projektdateien | 50 |
2.3.4?Szene | 50 |
2.3.5?Game Objects | 51 |
2.3.6?Components | 52 |
2.3.7?Tags | 53 |
2.3.8?Layer | 54 |
2.3.9?Assets | 54 |
2.3.9.1?UnityPackage | 55 |
2.3.9.2?Asset Import | 55 |
2.3.9.3?Asset Export | 56 |
2.3.9.4?Asset Store | 56 |
2.3.10?Frames | 57 |
2.4?Das erste Übungsprojekt | 58 |
3 C# und Unity | 60 |
3.1?Die Sprache C# | 60 |
3.2?Syntax | 61 |
3.3?Kommentare | 62 |
3.4?Variablen | 62 |
3.4.1?Namenskonventionen | 62 |
3.4.2?Datentypen | 63 |
3.4.3?Schlüsselwort var | 64 |
3.4.4?Datenfelder/Array | 64 |
3.4.4.1?Arrays erstellen | 64 |
3.4.4.2?Zugriff auf ein Array-Element | 65 |
3.4.4.3?Anzahl aller Array-Items ermitteln | 65 |
3.4.4.4?Mehrdimensionale Arrays | 65 |
3.5?Konstanten | 66 |
3.5.1?Enumeration | 66 |
3.6?Typkonvertierung | 67 |
3.7?Rechnen | 68 |
3.8?Verzweigungen | 69 |
3.8.1?if-Anweisungen | 69 |
3.8.1.1?Komplexere if-Anweisungen | 70 |
3.8.2?switch-Anweisung | 71 |
3.9?Schleifen | 72 |
3.9.1?for-Schleife | 72 |
3.9.1.1?Negative Schrittweite | 73 |
3.9.1.2?break | 73 |
3.9.2?Foreach-Schleife | 73 |
3.9.3?while-Schleife | 74 |
3.9.4?do-Schleife | 74 |
3.10?Klassen | 75 |
3.10.1?Komponenten per Code zuweisen | 75 |
3.10.2?Instanziierung von Nichtkomponenten | 76 |
3.10.3?Werttypen und Referenztypen | 78 |
3.10.4?Überladene Methoden | 78 |
3.11?Der Konstruktor | 79 |
3.11.1?Konstruktoren in Unity | 79 |
3.12?Lokale und globale Variablen | 80 |
3.12.1?Namensverwechslung verhindern mit this | 80 |
3.13?Zugriff und Sichtbarkeit | 80 |
3.14?Statische Klassen und Klassenmember | 81 |
3.15?Parametermodifizierer out/ref | 82 |
3.16?Array-Übergabe mit params | 83 |
3.17?Eigenschaften und Eigenschaftsmethoden | 84 |
3.18?Vererbung | 85 |
3.18.1?Basisklasse und abgeleitete Klassen | 85 |
3.18.2?Vererbung und die Sichtbarkeit | 86 |
3.18.3?Geerbte Methode überschreiben | 86 |
3.18.4?Zugriff auf die Basisklasse | 87 |
3.18.5?Klassen versiegeln | 87 |
3.19?Polymorphie | 88 |
3.20?Schnittstellen | 88 |
3.20.1?Schnittstelle definieren | 88 |
3.20.2?Schnittstellen implementieren | 89 |
3.20.2.1?Unterstützung durch MonoDevelop | 90 |
3.20.3?Zugriff über eine Schnittstellen | 90 |
3.21?Namespaces | 91 |
3.21.1?Eigene Namespaces definieren | 91 |
3.22?Generische Klassen und Methoden | 92 |
3.22.1?List | 93 |
3.22.2?Dictionary | 94 |
4 Skript-Programmierung | 96 |
4.1?MonoDevelop | 96 |
4.1.1?Hilfe in MonoDevelop | 97 |
4.1.2?Syntaxfehler | 97 |
4.2?Nutzbare Programmiersprachen | 98 |
4.2.1?Warum C#? | 98 |
4.3?Unitys Vererbungsstruktur | 99 |
4.3.1?Object | 99 |
4.3.2?GameObject | 100 |
4.3.3?ScriptableObject | 100 |
4.3.4?Component | 100 |
4.3.5?Transform | 101 |
4.3.6?Behaviour | 101 |
4.3.7?MonoBehaviour | 101 |
4.4?Skripte erstellen | 101 |
4.4.1?Skripte umbenennen | 102 |
4.5?Das Skript-Grundgerüst | 102 |
4.6?Unitys Event-Methoden | 103 |
4.6.1?Update | 103 |
4.6.2?FixedUpdate | 104 |
4.6.3?Awake | 105 |
4.6.4?Start | 105 |
4.6.5?OnGUI | 105 |
4.6.6?LateUpdate | 106 |
4.7?Komponentenprogrammierung | 106 |
4.7.1?Auf GameObjects zugreifen | 107 |
4.7.1.1?FindWithTag | 107 |
4.7.1.2?FindGameObjectsWithTag | 108 |
4.7.1.3?Find | 108 |
4.7.2?GameObjects aktivieren und deaktivieren | 108 |
4.7.3?GameObjects zerstören | 109 |
4.7.4?GameObjects erstellen | 109 |
4.7.5?Auf Components zugreifen | 109 |
4.7.5.1?GetComponent | 110 |
4.7.5.2?SendMessage | 110 |
4.7.5.3?Direktzugriff | 111 |
4.7.6?Components hinzufügen | 111 |
4.7.7?Components entfernen | 112 |
4.7.8?Components aktivieren und deaktivieren | 112 |
4.7.9?Attribute | 112 |
4.8?Zufallswerte | 114 |
4.9?Parallel Code ausführen | 115 |
4.9.1?WaitForSeconds | 116 |
4.10?Verzögerte und wiederholende Funktionsaufrufe mit Invoke | 116 |
4.10.1?Invoke | 116 |
4.10.2?InvokeRepeating, IsInvoking und CancelInvoke | 117 |
4.11?Daten speichern und laden | 118 |
4.11.1?PlayerPrefs-Voreinstellungen | 118 |
4.11.2?Daten speichern | 119 |
4.11.3?Daten laden | 119 |
4.11.4?Key überprüfen | 120 |
4.11.5?Löschen | 120 |
4.11.6?Save | 120 |
4.12?Szeneübergreifende Daten | 121 |
4.12.1?Werteübergabe mit PlayerPrefs | 121 |
4.12.1.1?Startmenüs zur Initialisierung nutzen | 122 |
4.12.2?Zerstörung unterbinden | 123 |
4.12.2.1?DontDestroyOnLoad als Singleton | 123 |
4.13?Debug-Klasse | 124 |
4.14?Kompilierungsreihenfolge | 125 |
4.14.1?Programmsprachen mischen und der sprachübergreifende Zugriff | 125 |
4.15?Ausführungsreihenfolge | 126 |
4.16?Plattformabhängig Code kompilieren | 126 |
4.17?Eigene Assets mit ScriptableObject | 127 |
4.17.1?Neue ScriptableObject-Subklasse erstellen | 128 |
4.17.2?Instanzen eines ScriptableObjects erstellen | 129 |
4.17.2.1?Eigener Menü-Knopf zum Erstellen von Assets | 129 |
5 Objekte in der zweiten und dritten Dimension | 132 |
5.1?Das 3D-Koordinatensystem | 132 |
5.2?Vektoren | 133 |
5.2.1?Ort, Winkel und Länge | 134 |
5.2.2?Normalisieren | 135 |
5.3?Das Mesh | 136 |
5.3.1?Normalenvektor | 137 |
5.3.2?MeshFilter und MeshRenderer | 137 |
5.4?Transform | 139 |
5.4.1?Kontextmenü der Transform-Komponente | 139 |
5.4.2?Objekthierarchien | 140 |
5.4.3?Scripting mit Transform | 141 |
5.4.4?Quaternion | 141 |
5.5?Shader und Materials | 142 |
5.5.1?Der Standard-Shader | 143 |
5.5.1.1?Rendering Mode | 145 |
5.5.1.2?Main Maps | 146 |
5.5.1.3?Secondary Maps | 152 |
5.5.1.4?Metallic vs. Specular | 154 |
5.5.2?Texturen | 158 |
5.5.2.1?Import von Texturen | 159 |
5.5.2.2?Normalmaps erstellen | 160 |
5.5.3?UV Mapping | 161 |
5.6?3D-Modelle einer Szene zufügen | 163 |
5.6.1?Primitives | 163 |
5.6.2?3D-Modelle importieren | 164 |
5.6.2.1?Model Import Settings | 165 |
5.6.3?In Unity modellieren | 165 |
5.6.4?Prozedurale Mesh-Generierung | 166 |
5.6.5?Level Of Detail | 166 |
5.6.5.1?LODGroups | 167 |
5.6.5.2?LOD-Qualitätseinstellungen | 168 |
5.7?2D in Unity | 168 |
5.7.1?Sprites | 169 |
5.7.1.1?Sprite Editor | 171 |
5.7.1.2?Sprite Packer | 172 |
5.7.2?SpriteRenderer | 174 |
5.7.2.1?Darstellungsreihenfolgen von Sprites | 175 |
5.7.2.2?Sprite-Shader | 176 |
5.7.3?Parallex Scrolling | 177 |
6 Kameras, die Augen des Spielers | 180 |
6.1?Die Kamera | 180 |
6.1.1?Komponenten eines Kamera-Objektes | 182 |
6.1.2?HDR – High Dynamic Range-Rendering | 182 |
6.1.2.1?Rückwandeln mit Tonemapping | 183 |
6.1.2.2?Abarbeitungsreihenfolge festlegen | 184 |
6.1.3?Linearer- und Gamma-Farbraum | 185 |
6.1.3.1?Die Gamma-Korrektur | 185 |
6.1.3.2?Linear-Space und Gamma-Space in Unity | 186 |
6.2?Kamerasteuerung | 188 |
6.2.1?Statische Kamera | 188 |
6.2.2?Parenting-Kamera | 188 |
6.2.3?Kamera-Skripte | 189 |
6.2.3.1?Kamera-Skripte programmieren | 189 |
6.3?ScreenPointToRay | 191 |
6.4?Mehrere Kameras | 191 |
6.4.1?Kamerawechsel | 191 |
6.4.2?Split-Screen | 193 |
6.4.3?Einfache Minimap | 194 |
6.4.4?Render Texture | 195 |
6.5?Image Effects | 197 |
6.5.1?Beispiel: Haus bei Nacht | 197 |
6.6?Skybox | 199 |
6.6.1?Mehrere Skyboxen gleichzeitig einsetzen | 200 |
6.6.2?Skybox selber erstellen | 201 |
6.7?Occlusion Culling | 202 |
6.7.1?Occluder Static und Occludee Static | 203 |
6.7.2?Occlusion Culling erstellen | 204 |
7 Licht und Schatten | 206 |
7.1?Ambient Light | 206 |
7.2?Lichtarten | 207 |
7.2.1?Directional Light | 208 |
7.2.2?Point Light | 209 |
7.2.3?Spot Light | 209 |
7.2.4?Area Light | 210 |
7.3?Schatten | 211 |
7.3.1?Einfluss des MeshRenderers auf Schatten | 212 |
7.4?Light Cookies | 213 |
7.4.1?Import Settings eines Light Cookies | 213 |
7.4.2?Light Cookies und Point Lights | 214 |
7.5?Light Halos | 215 |
7.5.1?Unabhängige Halos | 216 |
7.6?Lens Flares | 216 |
7.6.1?Eigene Lens Flares | 217 |
7.7?Projector | 217 |
7.7.1?Standard Projectors | 217 |
7.8?Lightmapping | 219 |
7.8.1?Light Probes | 221 |
7.9?Rendering Paths | 223 |
7.9.1?Forward Rendering | 224 |
7.9.2?Vertex Lit | 225 |
7.9.3?Deferred Lighting | 226 |
7.10?Global Illumination | 227 |
7.10.1?Baked GI | 227 |
7.10.2?Precomputed Realtime GI | 228 |
7.11?Reflexionen (Spiegelungen) | 228 |
7.11.1?Reflection Probes | 229 |
7.12?Qualitätseinstellungen | 232 |
7.12.1?Quality Settings | 232 |
7.12.2?Qualitätsstufen per Code festlegen | 232 |
8 Physik in Unity | 234 |
8.1?Physikberechnung | 234 |
8.2?Rigidbodies | 235 |
8.2.1?Rigidbodies kennenlernen | 236 |
8.2.2?Masseschwerpunkt | 237 |
8.2.3?Kräfte und Drehmomente zufügen | 238 |
8.2.3.1?AddForce-Methode | 238 |
8.2.3.2?AddTorque-Methode | 239 |
8.2.3.3?ConstantForce-Komponente | 241 |
8.3?Kollisionen | 241 |
8.3.1?Collider | 241 |
8.3.1.1?Mesh Collider | 242 |
8.3.1.2?Collider modifizieren | 243 |
8.3.1.3?OnCollision-Methoden | 244 |
8.3.2?Trigger | 245 |
8.3.3?Static Collider | 246 |
8.3.4?Kollisionen mit schnellen Objekten | 246 |
8.3.5?Terrain Collider | 248 |
8.3.6?Layer-basierende Kollisionserkennung | 248 |
8.3.7?Mit Layer-Masken arbeiten | 248 |
8.4?Wheel Collider | 250 |
8.4.1?Wheel Friction Curve | 251 |
8.4.2?Entwicklung einer Fahrzeugsteuerung | 253 |
8.4.2.1?CarController.cs | 258 |
8.4.3?Autokonfiguration | 260 |
8.4.4?Fahrzeugstabilität | 262 |
8.5?Physic Materials | 263 |
8.6?Joints | 264 |
8.6.1?Fixed Joint | 264 |
8.6.2?Spring Joint | 264 |
8.6.3?Hinge Joint | 264 |
8.7?Raycasting | 265 |
8.8?Character Controller | 266 |
8.8.1?SimpleMove | 267 |
8.8.2?Move | 268 |
8.8.3?Kräfte zufügen | 269 |
8.8.4?Einfacher First Person Controller | 270 |
8.9?2D-Physik | 272 |
8.9.1?OnCollision2D- und OnTrigger2D-Methoden | 273 |
8.9.2?2D Physic Effectors | 275 |
9 Maus, Tastatur, Touch | 276 |
9.1?Virtuelle Achsen und Tasten | 276 |
9.1.1?Der Input-Manager | 276 |
9.1.2?Virtuelle Achsen | 278 |
9.1.3?Virtuelle Tasten | 278 |
9.1.4?Steuern mit Mauseingaben | 279 |
9.1.5?Joystick-Inputs | 279 |
9.1.6?Anlegen neuer Inputs | 280 |
9.2?Achsen- und Tasteneingaben auswerten | 280 |
9.2.1?GetAxis | 280 |
9.2.2?GetButton | 281 |
9.3?Tastatureingaben auswerten | 282 |
9.3.1?GetKey | 282 |
9.3.2?anyKey | 282 |
9.4?Mauseingaben auswerten | 283 |
9.4.1?GetMouseButton | 283 |
9.4.2?mousePosition | 284 |
9.4.3?Mauszeiger ändern | 285 |
9.5?Touch-Eingaben auswerten | 286 |
9.5.1?Der Touch-Typ | 286 |
9.5.2?Input.touches | 287 |
9.5.3?TouchCount | 287 |
9.5.4?GetTouch | 288 |
9.5.5?CrossPlatformInput | 288 |
9.6?Beschleunigungssensor auswerten | 290 |
9.6.1?Input.acceleration | 290 |
9.6.2?Tiefpass-Filter | 291 |
9.7?Steuerungen bei Mehrspieler-Games | 292 |
9.7.1?Split-Screen-Steuerung | 292 |
9.7.2?Netzwerkspiele | 293 |
10 Audio | 294 |
10.1?AudioListener | 294 |
10.2?AudioSource | 295 |
10.2.1?Durch Mauern hören verhindern | 297 |
10.2.2?Sound starten und stoppen | 299 |
10.2.3?Temporäre AudioSource | 300 |
10.3?AudioClip | 301 |
10.3.1?Länge ermitteln | 301 |
10.4?Reverb Zone | 301 |
10.5?Filter | 303 |
10.6?Audio Mixer | 303 |
10.6.1?Das Audio Mixer-Fenster | 303 |
10.6.1.1?Die Audio-Steuerungseinheit | 305 |
10.6.2?Audiosignalwege | 307 |
10.6.2.1?Send & Receive | 308 |
10.6.2.2?Duck Volume | 309 |
10.6.3?Mit Snapshots arbeiten | 311 |
10.6.4?Views erstellen | 312 |
11 Partikeleffekte mit Shuriken | 314 |
11.1?Editor-Fenster | 315 |
11.2?Particle Effect Control | 316 |
11.3?Numerische Parametervarianten | 316 |
11.4?Farbparameter-Varianten | 317 |
11.5?Default-Modul | 317 |
11.6?Effekt-Module | 318 |
11.6.1?Emission | 319 |
11.6.2?Shape | 319 |
11.6.2.1?Sphere | 319 |
11.6.2.2?HemiSphere | 319 |
11.6.2.3?Cone | 319 |
11.6.2.4?Box | 320 |
11.6.2.5?Mesh | 320 |
11.6.3?Velocity over Lifetime | 320 |
11.6.4?Limit Velocity over Lifetime | 321 |
11.6.5?Force over Lifetime | 321 |
11.6.6?Color over Lifetime | 321 |
11.6.7?Color by Speed | 321 |
11.6.8?Size over Lifetime | 322 |
11.6.9?Size by Speed | 322 |
11.6.10?Rotation over Lifetime | 322 |
11.6.11?Rotation by Speed | 322 |
11.6.12?External Forces | 322 |
11.6.13?Collision | 323 |
11.6.13.1?Planes | 323 |
11.6.13.2?World | 324 |
11.6.14?Sub Emitter | 324 |
11.6.15?Texture-Sheet-Animation | 324 |
11.6.16?Renderer | 325 |
11.6.16.1?Billboard | 326 |
11.6.16.2?Stretched Billboard | 326 |
11.6.16.3?Horizontal Billboard | 326 |
11.6.16.4?Vertical Billboard | 326 |
11.6.16.5?Mesh | 327 |
11.7?Partikelemission starten, stoppen und unterbrechen | 327 |
11.7.1?Play | 327 |
11.7.2?Stop | 328 |
11.7.3?Pause | 328 |
11.7.4?enableEmission | 328 |
11.8?OnParticleCollision | 328 |
11.8.1?GetCollisionEvents | 329 |
11.9?Feuer erstellen | 329 |
11.9.1?Materials erstellen | 330 |
11.9.2?Feuer-Partikelsystem | 331 |
11.9.3?Rauch-Partikelsystem | 334 |
11.10?Wassertropfen erstellen | 337 |
11.10.1?Tropfen-Material erstellen | 337 |
11.10.2?Wassertropfen-Partikelsystem | 338 |
11.10.3?Kollisionspartikelsystem | 340 |
11.10.4?Kollisionssound | 342 |
12 Landschaften gestalten | 344 |
12.1?Was Terrains können und wo die Grenzen liegen | 345 |
12.2?Terrainhöhe verändern | 345 |
12.2.1?Pinsel | 346 |
12.2.2?Oberflächen anheben und senken | 346 |
12.2.3?Plateaus und Schluchten erstellen | 347 |
12.2.4?Oberflächen weicher machen | 348 |
12.2.5?Heightmaps | 348 |
12.2.5.1?Reale Landschaften als Vorlagen nutzen | 349 |
12.3?Terrain texturieren | 350 |
12.3.1?Textur-Pinsel | 351 |
12.3.2?Texturen verwalten | 351 |
12.4?Bäume und Sträucher | 353 |
12.4.1?Bedienung des Place Tree-Tools | 353 |
12.4.2?Wälder erstellen | 354 |
12.4.3?Mit Bäumen kollidieren | 354 |
12.5?Gräser und Details hinzufügen | 355 |
12.5.1?Detail-Meshs | 355 |
12.5.2?Gräser | 356 |
12.5.3?Quelldaten nachladen | 357 |
12.6?Terrain-Einstellungen | 357 |
12.6.1?Base Terrain | 358 |
12.6.2?Resolution | 358 |
12.6.3?Tree & Details Objects | 359 |
12.6.4?Wind Settings | 359 |
12.6.5?Zur Laufzeit Terrain-Eigenschaften verändern | 360 |
12.7?Der Weg zum perfekten Terrain | 361 |
12.8?Gewässer | 362 |
13 Wind Zones | 364 |
13.1?Spherical vs. Directional | 365 |
13.2?Wind Zone – Eigenschaften | 366 |
13.3?Frische Brise | 367 |
13.4?Turbine | 367 |
14 GUI | 368 |
14.1?Das UI-System uGUI | 369 |
14.1.1?Canvas | 369 |
14.1.1.1?Render Modes | 370 |
14.1.1.2?Canvas Scaler | 372 |
14.1.2?RectTransform | 373 |
14.1.2.1?Anchors | 375 |
14.1.3?UI-Sprite Import | 377 |
14.1.4?Grafische Controls | 378 |
14.1.4.1?Text | 378 |
14.1.4.2?Image | 379 |
14.1.4.3?Raw Image | 380 |
14.1.4.4?Panel | 380 |
14.1.4.5?Effects | 380 |
14.1.5?Interaktive Controls | 381 |
14.1.5.1?Button | 384 |
14.1.5.2?InputField | 385 |
14.1.5.3?Toggle und Toggle Group | 385 |
14.1.5.4?Slider | 386 |
14.1.5.5?Scrollbar | 387 |
14.1.6?Controls designen | 387 |
14.1.7?Animationen in uGUI | 388 |
14.1.8?Event Trigger | 389 |
14.2?Screen-Klasse | 390 |
14.2.1?Schriftgröße dem Bildschirm anpassen | 391 |
14.3?OnGUI-Programmierung | 391 |
14.3.1?GUI | 392 |
14.3.1.1?Label | 392 |
14.3.1.2?Button und RepeatButton | 393 |
14.3.1.3?TextField und TextArea | 393 |
14.3.1.4?Subfenster | 394 |
14.3.2?GUILayout | 395 |
14.3.2.1?Ausrichtung festlegen | 395 |
14.3.3?GUIStyle und GUISkin | 396 |
15 Prefabs | 398 |
15.1?Prefabs erstellen und nutzen | 398 |
15.2?Prefab-Instanzen erzeugen | 398 |
15.2.1?Instanzen per Code erstellen | 399 |
15.2.2?Instanzen weiter bearbeiten | 399 |
15.3?Prefabs ersetzen und zurücksetzen | 400 |
16 Internet und Datenbanken | 402 |
16.1?Die WWW-Klasse | 402 |
16.1.1?Rückgabewert-Formate | 403 |
16.1.2?Parameter übergeben | 404 |
16.1.2.1?WWWForm | 404 |
16.2?Datenbank-Kommunikation | 405 |
16.2.1?Daten in einer Datenbank speichern | 405 |
16.2.2?Daten von einer Datenbank abfragen | 406 |
16.2.3?Rückgabewerte parsen | 408 |
16.2.4?Datenhaltung in eigenen Datentypen | 408 |
16.2.5?HighscoreCommunication.cs | 410 |
16.2.6?Datenbankverbindung in PHP | 412 |
17 Animationen | 414 |
17.1?Allgemeiner Animation-Workflow | 415 |
17.2?Animationen erstellen | 415 |
17.2.1?Animation View | 416 |
17.2.2?Curves vs. Dope Sheet | 417 |
17.2.3?Animationsaufnahme | 417 |
17.2.3.1?Ansicht im Animation-Fenster anpassen | 418 |
17.2.3.2?Sprite-Animationen | 418 |
17.2.3.3?Root Motion-Kurven erstellen | 421 |
17.2.4?Beispiel Fallgatter-Animation | 422 |
17.3?Animationen importieren | 423 |
17.3.1?Rig | 424 |
17.3.1.1?Generic | 424 |
17.3.1.2?Humanoid | 424 |
17.3.2?Animationen | 426 |
17.3.2.1?Animationen aufteilen | 426 |
17.3.2.2?Importierte Animation-Clips bearbeiten | 427 |
17.3.2.3?Mask | 429 |
17.3.2.4?Events | 429 |
17.4?Animationen einbinden | 429 |
17.4.1?Animator Controller | 429 |
17.4.1.1?Animation States erstellen | 430 |
17.4.1.2?Transitions – Animation States wechseln | 431 |
17.4.1.3?Any State nutzen | 433 |
17.4.1.4?Blend Trees | 433 |
17.4.1.5?Layer und Avatar Masks | 434 |
17.4.1.6?Sub-State Machines | 436 |
17.4.1.7?State Machine Behaviours | 441 |
17.4.2?Animator-Komponente | 445 |
17.4.3?Beispiel Fallgatter: Animator Controller | 446 |
17.5?Controller-Skripte | 448 |
17.5.1?Parameter des Animator Controllers setzen | 448 |
17.5.1.1?Mit Hash-Werten arbeiten | 449 |
17.5.2?Animation States abfragen | 449 |
17.5.3?Beispiel Fallgatter Controller-Skript | 450 |
17.6?Animation Events | 452 |
18 Künstliche Intelligenz | 454 |
18.1?NavMeshAgent | 455 |
18.1.1?Eigenschaften der Navigationskomponente | 456 |
18.1.2?Zielpunkt zuweisen | 456 |
18.1.3?Pfadsuche unterbrechen und fortsetzen | 457 |
18.2?NavigationMesh | 457 |
18.2.1?Object Tab | 459 |
18.2.2?Bake Tab | 459 |
18.2.3?Areas Tab | 460 |
18.3?NavMeshObstacle | 461 |
18.4?Off-Mesh Link | 462 |
18.4.1?Automatische Off-Mesh Links | 462 |
18.4.2?Manuelle Off-Mesh Links | 463 |
18.5?Point & Click-Steuerung für Maus und Touch | 464 |
19 Fehlersuche und Performance | 468 |
19.1?Fehlersuche | 468 |
19.1.1?Breakpoints | 469 |
19.1.2?Variablen beobachten | 470 |
19.1.3?Console Tab nutzen | 470 |
19.1.4?GUI- und GUILayout nutzen | 471 |
19.2?Performance | 471 |
19.2.1?Rendering-Statistik | 472 |
19.2.2?Batching-Verfahren | 473 |
19.2.3?Analyse mit dem Profiler | 475 |
19.2.4?Echtzeit-Analyse auf Endgeräten | 476 |
19.2.4.1?Webplayer-Game remote analysieren | 476 |
19.2.4.2?Android-Game remote analysieren | 477 |
19.2.4.3?iOS-Game remote analysieren | 477 |
20 Spiele erstellen und publizieren | 478 |
20.1?Der Build-Prozess | 478 |
20.1.1?Szenen des Spiels | 479 |
20.1.2?Plattformen | 480 |
20.1.3?Notwendige SDKs | 480 |
20.1.4?Plattformspezifische Optionen | 481 |
20.1.5?Developer Builds | 481 |
20.1.5.1?Autoconnect Profiler | 481 |
20.1.5.2?Script Debugging | 481 |
20.2?Publizieren | 482 |
20.2.1?App | 483 |
20.2.2?Browser-Game | 483 |
20.2.3?Desktop-Anwendung | 484 |
21 Erstes Beispiel-Game: 2D-Touch-Game | 486 |
21.1?Projekt und Szene | 486 |
21.1.1?Die Kamera | 488 |
21.1.2?Texturen importieren und Sprites definieren | 488 |
21.2?Gespenster und Hintergrund | 490 |
21.2.1?Gespenster animieren | 493 |
21.2.2?Gespenster laufen lassen | 497 |
21.2.3?Gespenster-Prefab erstellen | 499 |
21.3?Der GameController | 499 |
21.3.1?Der Spawner | 500 |
21.3.2?Level-Anzeige | 502 |
21.3.3?Der Input-Controller | 503 |
21.3.4?Game Over-UI | 505 |
21.3.5?Hintergrundmusik | 511 |
21.4?Punkte zählen | 512 |
21.5?Spielende | 513 |
21.6?Spiel erstellen | 514 |
22 Zweites Beispiel-Game: 3D Dungeon Crawler | 516 |
22.1?Level-Design | 517 |
22.1.1?Modellimport | 518 |
22.1.1.1?Allgemeine Import Settings | 518 |
22.1.1.2?bat_03 Import Settings | 518 |
22.1.1.3?crate_01 Import Settings | 519 |
22.1.1.4?stone_01 Import Settings | 519 |
22.1.1.5?floor_01 Import Settings | 519 |
22.1.2?Materials konfigurieren | 519 |
22.1.3?Prefabs erstellen | 520 |
22.1.3.1?Wall Prefab | 520 |
22.1.3.2?Torch Prefab | 520 |
22.1.3.3?Wall_Torch Prefab | 521 |
22.1.3.4?Floor Prefab | 521 |
22.1.3.5?Ceiling Prefab | 522 |
22.1.4?Dungeon erstellen | 522 |
22.1.4.1?Boden erstellen | 522 |
22.1.4.2?Wände erstellen | 523 |
22.1.4.3?Decke erstellen | 524 |
22.1.4.4?Allgemeine Licht-Einstellungen | 524 |
22.1.4.5?Fackelbeleuchtung | 524 |
22.1.4.6?Akzent-Beleuchtung | 526 |
22.1.5?Dekoration erstellen | 527 |
22.1.5.1?Crate Prefab | 527 |
22.1.5.2?Barrel Prefabs | 527 |
22.2?Inventarsystem erstellen | 528 |
22.2.1?Verwaltungslogik | 528 |
22.2.1.1?InventoryItem.cs | 532 |
22.2.1.2?CreateInventoryItem.cs | 532 |
22.2.1.3?Inventory.cs | 533 |
22.2.1.4?PickableItem.cs | 535 |
22.2.2?Oberfläche des Inventarsystems | 535 |
22.2.3?Inventar-Items | 539 |
22.2.3.1?HoverEffects.cs | 544 |
22.3?Game Controller | 545 |
22.4?Spieler erstellen | 546 |
22.4.1?Lebensverwaltung | 547 |
22.4.1.1?LifePointController.cs | 555 |
22.4.1.2?HealthController.cs | 556 |
22.4.1.3?PlayerHealth.cs | 556 |
22.4.2?Spielersteuerung | 558 |
22.4.2.1?PlayerController.cs | 563 |
22.4.2.2?Footsteps.cs | 564 |
22.4.2.3?Shooting.cs | 565 |
22.4.3?Wurfstein entwickeln | 566 |
22.4.3.1?StoneBehaviour.cs | 569 |
22.4.3.2?Zerberstenden Stein konfigurieren | 570 |
22.4.4?Lautstärke steuern | 572 |
22.5?Quest erstellen | 573 |
22.5.1?Erfahrungspunkte verwalten | 573 |
22.5.1.1?EPController.cs | 574 |
22.5.2?Questgeber erstellen | 575 |
22.5.2.1?WaterQuest.cs | 580 |
22.5.2.2?WaterdropSound.cs | 582 |
22.5.2.3?InGameMenu.cs | 582 |
22.5.3?Sub-Quest erstellen | 583 |
22.5.3.1?AnimateDoor.cs | 587 |
22.6?Gegner erstellen | 589 |
22.6.1?Model-, Rig- und Animationsimport | 589 |
22.6.2?Komponenten und Prefab konfigurieren | 590 |
22.6.3?Animator Controller erstellen | 592 |
22.6.4?NavMesh erstellen | 594 |
22.6.5?Umgebung und Feinde erkennen | 595 |
22.6.5.1?EnemySonar.cs | 596 |
22.6.6?Gesundheitszustand verwalten | 597 |
22.6.6.1?EnemyHealth.cs | 600 |
22.6.7?Künstliche Intelligenz entwickeln | 601 |
22.6.7.1?EnemyAI.cs | 607 |
22.7?Eröffnungsszene | 610 |
22.7.1?Szene erstellen | 610 |
22.7.2?Startmenü-Logik erstellen | 611 |
22.7.2.1?MainMenu.cs | 612 |
22.7.3?Menü-GUI erstellen | 613 |
22.8?Web-Player-Anpassungen | 615 |
22.8.1?Web-Player-Template ändern | 615 |
22.8.2?Quit-Methode im Web-Player abfangen | 615 |
22.9?Finale Einstellungen | 616 |
22.10?So könnte es weitergehen | 619 |
23 Der Produktionsprozess in der Spieleentwicklung | 620 |
23.1?Die Produktionsphasen | 620 |
23.1.1?Ideen- und Konzeptionsphase | 621 |
23.1.2?Planungsphase | 621 |
23.1.3?Entwicklungsphase | 621 |
23.1.4?Testphase | 622 |
23.1.5?Veröffentlichung und Postproduktion | 622 |
23.2?Das Game-Design-Dokument | 622 |
24 Schlusswort | 624 |
Index | 626 |