Spiele entwickeln mit Unity 5 - 2D- und 3D-Games mit Unity und C# für Desktop, Web & Mobile. Für Unity 5.6

Carsten Seifert, Jan Wislaug

Spiele entwickeln mit Unity 5

2D- und 3D-Games mit Unity und C# für Desktop, Web & Mobile. Für Unity 5.6

2017

674 Seiten

Format: PDF, ePUB, Online Lesen

E-Book: €  31,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446453685

 

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

 

© 2009-2021 ciando GmbH