Cover

Inhalt

Titelei

Impressum

Inhalt

00c Vorwort

01 Einleitung

1.1 Multiplattform-Publishing

1.2 Das kann Unity (nicht)

1.3 Lizenzmodelle

1.4 Aufbau und Ziel des Buches

1.5 Weiterentwicklung von Unity

1.6 Online-Zusatzmaterial

02 Grundlagen

2.1 Installation

2.2 Oberfläche

2.2.1 Hauptmenü

2.2.2 Scene View

2.2.3 Game View

2.2.4 Toolbar

2.2.5 Hierarchy

2.2.6 Inspector

2.2.7 Project Browser

2.2.8 Console

2.3 Das Unity-Projekt

2.3.1 Neues Projekt anlegen

2.3.2 Bestehendes Projekt öffnen

2.3.3 Projektdateien

2.3.4 Szene

2.3.5 Game Objects

2.3.6 Tags

2.3.7 Layer

2.3.8 Assets

2.3.9 Frames

2.4 Das erste Übungsprojekt

03 C# und Unity

3.1 Die Sprache C#

3.2 Syntax

3.3 Kommentare

3.4 Variablen

3.4.1 Namenskonventionen

3.4.2 Datentypen

3.4.3 Schlüsselwort var

3.4.4 Datenfelder/Array

3.5 Konstanten

3.5.1 Enumeration

3.6 Typkonvertierung

3.7 Rechnen

3.8 Verzweigungen

3.8.1 if-Anweisungen

3.8.2 switch-Anweisung

3.9 Schleifen

3.9.1 for-Schleife

3.9.2 Foreach-Schleife

3.9.3 while-Schleife

3.9.4 do-Schleife

3.10 Klassen

3.10.1 Komponenten per Code zuweisen

3.10.2 Instanziierung von Nichtkomponenten

3.10.3 Werttypen und Referenztypen

3.10.4 Überladene Methoden

3.11 Der Konstruktor

3.11.1 Konstruktoren in Unity

3.12 Lokale und globale Variablen

3.12.1 Namensverwechslung verhindern mit this

3.13 Zugriff und Sichtbarkeit

3.14 Statische Klassen und Klassenmember

3.15 Parametermodifizierer out/ref

3.16 Array-Übergabe mit params

3.17 Eigenschaften und Eigenschaftsmethoden

3.18 Vererbung

3.18.1 Basisklasse und abgeleitete Klassen

3.18.2 Vererbung und die Sichtbarkeit

3.18.3 Geerbte Methode überschreiben

3.18.4 Zugriff auf die Basisklasse

3.18.5 Klassen versiegeln

3.19 Polymorphie

3.20 Schnittstellen

3.20.1 Schnittstelle definieren

3.20.2 Schnittstellen implementieren

3.20.3 Zugriff über eine Schnittstelle

3.21 Namespaces

3.21.1 Eigene Namespaces definieren

3.22 Generische Klassen und Methoden

3.22.1 List

3.22.2 Dictionary

04 Skript-Programmierung

4.1 MonoDevelop

4.1.1 Hilfe in MonoDevelop

4.1.2 Syntaxfehler

4.2 Nutzbare Programmiersprachen

4.2.1 Warum C#?

4.3 Unitys Vererbungsstruktur

4.3.1 Object

4.3.2 GameObject

4.3.3 ScriptableObject

4.3.4 Component

4.3.5 Transform

4.3.6 Behaviour

4.3.7 MonoBehaviour

4.4 Skripte erstellen

4.4.1 Skripte umbenennen

4.5 Das Skript-Grundgerüst

4.6 Unitys Event-Methoden

4.6.1 Update

4.6.2 FixedUpdate

4.6.3 Awake

4.6.4 Start

4.6.5 OnGUI

4.6.6 LateUpdate

4.6.7 Aufruf-Reihenfolge

4.7 Komponentenprogrammierung

4.7.1 Auf GameObjects zugreifen

4.7.2 GameObjects aktivieren und deaktivieren

4.7.3 GameObjects zerstören

4.7.4 GameObjects erstellen

4.7.5 Auf Components zugreifen

4.7.6 Components hinzufügen

4.7.7 Components entfernen

4.7.8 Components aktivieren und deaktivieren

4.7.9 Attribute

4.8 Zufallswerte

4.9 Parallel Code ausführen

4.9.1 WaitForSeconds

4.10 Verzögerte und wiederholende Funktionsaufrufe mit Invoke

4.10.1 Invoke

4.10.2 InvokeRepeating, IsInvoking und CancelInvoke

4.11 Daten speichern und laden

4.11.1 PlayerPrefs-Voreinstellungen

4.11.2 Daten speichern

4.11.3 Daten laden

4.11.4 Key überprüfen

4.11.5 Löschen

4.11.6 Save

4.12 Szeneübergreifende Daten

4.12.1 Werteübergabe mit PlayerPrefs

4.12.2 Zerstörung unterbinden

4.13 Debug-Klasse

4.14 Kompilierungsreihenfolge

4.14.1 Programmsprachen mischen und der sprachübergreifende Zugriff

4.15 Ausführungsreihenfolge

4.16 Plattformabhängig Code kompilieren

4.17 Eigene Assets mit ScriptableObject

4.17.1 Neue ScriptableObject-Subklasse erstellen

4.17.2 Instanzen eines ScriptableObjects erstellen

05 Objekte in der zweiten und dritten Dimension

5.1 Das 3D-Koordinatensystem

5.2 Vektoren

5.2.1 Ort, Winkel und Länge

5.2.2 Normalisieren

5.3 Das Mesh

5.3.1 Normalenvektor

5.3.2 MeshFilter und MeshRenderer

5.4 Transform

5.4.1 Kontextmenü der Transform-Komponente

5.4.2 Objekthierarchien

5.4.3 Scripting mit Transform

5.4.4 Quaternion

5.5 Shader und Materials

5.5.1 Der Standard-Shader

5.5.2 Texturen

5.5.3 UV Mapping

5.6 3D-Modelle einer Szene zufügen

5.6.1 Primitives

5.6.2 3D-Modelle importieren

5.6.3 In Unity modellieren

5.6.4 Prozedurale Mesh-Generierung

5.6.5 Level Of Detail

5.7 2D in Unity

5.7.1 Sprites

5.7.2 SpriteRenderer

5.7.3 Parallax Scrolling

06 Kameras, die Augen des Spielers

6.1 Die Kamera

6.1.1 Komponenten eines Kamera-Objektes

6.1.2 HDR – High Dynamic Range-Rendering

6.1.3 Linearer- und Gamma-Farbraum

6.2 Kamerasteuerung

6.2.1 Statische Kamera

6.2.2 Parenting-Kamera

6.2.3 Kamera-Skripte

6.3 ScreenPointToRay

6.4 Mehrere Kameras

6.4.1 Kamerawechsel

6.4.2 Split-Screen

6.4.3 Einfache Minimap

6.4.4 Render Texture

6.5 Image Effects

6.5.1 Beispiel: Haus bei Nacht

6.6 Skybox

6.6.1 Mehrere Skyboxen gleichzeitig einsetzen

6.6.2 Skybox selber erstellen

6.7 Occlusion Culling

6.7.1 Occluder Static und Occludee Static

6.7.2 Occlusion Culling erstellen

07 Licht und Schatten

7.1 Environment Lighting

7.2 Lichtarten

7.2.1 Directional Light

7.2.2 Point Light

7.2.3 Spot Light

7.2.4 Area Light

7.3 Schatten

7.3.1 Einfluss des MeshRenderers auf Schatten

7.4 Light Cookies

7.4.1 Import Settings eines Light Cookies

7.4.2 Light Cookies und Point Lights

7.5 Light Halos

7.5.1 Unabhängige Halos

7.6 Lens Flares

7.6.1 Eigene Lens Flares

7.7 Projector

7.7.1 Standard Projectors

7.8 Lightmapping

7.8.1 Light Probes

7.9 Rendering Paths

7.9.1 Forward Rendering

7.9.2 Vertex Lit

7.9.3 Deferred Lighting

7.10 Global Illumination

7.10.1 Baked GI

7.10.2 Realtime Lighting

7.10.3 Lightmapping Settings

7.11 Light Explorer

7.12 Reflexionen (Spiegelungen)

7.12.1 Reflection Probes

7.13 Qualitätseinstellungen

7.13.1 Quality Settings

7.13.2 Qualitätsstufen per Code festlegen

08 Physik in Unity

8.1 Physikberechnung

8.2 Rigidbodies

8.2.1 Rigidbodies kennenlernen

8.2.2 Masseschwerpunkt

8.2.3 Kräfte und Drehmomente zufügen

8.3 Kollisionen

8.3.1 Collider

8.3.2 Trigger

8.3.3 Static Collider

8.3.4 Kollisionen mit schnellen Objekten

8.3.5 Terrain Collider

8.3.6 Layer-basierende Kollisionserkennung

8.3.7 Mit Layer-Masken arbeiten

8.4 Wheel Collider

8.4.1 Wheel Friction Curve

8.4.2 Entwicklung einer Fahrzeugsteuerung

8.4.3 Autokonfiguration

8.4.4 Fahrzeugstabilität

8.5 Physic Materials

8.6 Joints

8.6.1 Fixed Joint

8.6.2 Spring Joint

8.6.3 Hinge Joint

8.7 Raycasting

8.8 Character Controller

8.8.1 SimpleMove

8.8.2 Move

8.8.3 Kräfte zufügen

8.8.4 Einfacher First Person Controller

8.9 2D-Physik

8.9.1 OnCollision2D- und OnTrigger2D-Methoden

8.9.2 2D Physic Effectors

09 Maus, Tastatur, Touch

9.1 Virtuelle Achsen und Tasten

9.1.1 Der Input-Manager

9.1.2 Virtuelle Achsen

9.1.3 Virtuelle Tasten

9.1.4 Steuern mit Mauseingaben

9.1.5 Joystick-Inputs

9.1.6 Anlegen neuer Inputs

9.2 Achsen- und Tasteneingaben auswerten

9.2.1 GetAxis

9.2.2 GetButton

9.3 Tastatureingaben auswerten

9.3.1 GetKey

9.3.2 anyKey

9.4 Mauseingaben auswerten

9.4.1 GetMouseButton

9.4.2 Mauseingaben auf Objekten per Event

9.4.3 mousePosition

9.4.4 Mauszeiger ändern

9.5 Touch-Eingaben auswerten

9.5.1 Der Touch-Typ

9.5.2 Input.touches

9.5.3 TouchCount

9.5.4 GetTouch

9.5.5 CrossPlatformInput

9.6 Beschleunigungssensor auswerten

9.6.1 Input.acceleration

9.6.2 Tiefpass-Filter

9.7 Steuerungen bei Mehrspieler-Games

9.7.1 Split-Screen-Steuerung

9.7.2 Netzwerkspiele

10 Audio

10.1 AudioListener

10.2 AudioSource

10.2.1 Durch Mauern hören verhindern

10.2.2 Sound starten und stoppen

10.2.3 Temporäre AudioSource

10.3 AudioClip

10.3.1 Länge ermitteln

10.4 Reverb Zone

10.5 Filter

10.6 Audio Mixer

10.6.1 Das Audio Mixer-Fenster

10.6.2 Audiosignalwege

10.6.3 Mit Snapshots arbeiten

10.6.4 Views erstellen

10.6.5 Parameter per Skript bearbeiten

11 Partikeleffekte mit Shuriken

11.1 Editor-Fenster

11.2 Particle Effect Control

11.3 Numerische Parametervarianten

11.4 Farbparameter-Varianten

11.5 Default-Modul

11.6 Effekt-Module

11.6.1 Emission

11.6.2 Shape

11.6.3 Velocity over Lifetime

11.6.4 Limit Velocity over Lifetime

11.6.5 Inherit Velocity

11.6.6 Force over Lifetime

11.6.7 Color over Lifetime

11.6.8 Color by Speed

11.6.9 Size over Lifetime

11.6.10 Size by Speed

11.6.11 Rotation over Lifetime

11.6.12 Rotation by Speed

11.6.13 External Forces

11.6.14 Noise

11.6.15 Collision

11.6.16 Triggers

11.6.17 Sub Emitter

11.6.18 Texture-Sheet-Animation

11.6.19 Lights

11.6.20 Trails

11.6.21 Renderer

11.7 Partikelemission starten, stoppen und unterbrechen

11.7.1 Play

11.7.2 Stop

11.7.3 Pause

11.7.4 enableEmission

11.8 OnParticleCollision

11.8.1 GetCollisionEvents

11.9 Feuer erstellen

11.9.1 Materials erstellen

11.9.2 Feuer-Partikelsystem

11.9.3 Rauch-Partikelsystem

11.10 Wassertropfen erstellen

11.10.1 Tropfen-Material erstellen

11.10.2 Wassertropfen-Partikelsystem

11.10.3 Kollisionspartikelsystem

11.10.4 Kollisionssound

12 Landschaften gestalten

12.1 Was Terrains können und wo die Grenzen liegen

12.2 Terrainhöhe verändern

12.2.1 Pinsel

12.2.2 Oberflächen anheben und senken

12.2.3 Plateaus und Schluchten erstellen

12.2.4 Oberflächen weicher machen

12.2.5 Heightmaps

12.3 Terrain texturieren

12.3.1 Textur-Pinsel

12.3.2 Texturen verwalten

12.4 Bäume und Sträucher

12.4.1 Bedienung des Place Tree-Tools

12.4.2 Wälder erstellen

12.4.3 Mit Bäumen kollidieren

12.5 Gräser und Details hinzufügen

12.5.1 Detail-Meshs

12.5.2 Gräser

12.5.3 Quelldaten nachladen

12.6 Terrain-Einstellungen

12.6.1 Base Terrain

12.6.2 Resolution

12.6.3 Tree & Details Objects

12.6.4 Wind Settings

12.6.5 Zur Laufzeit Terrain-Eigenschaften verändern

12.7 Der Weg zum perfekten Terrain

12.8 Gewässer

13 Wind Zones

13.1 Spherical vs. Directional

13.2 Wind Zone – Eigenschaften

13.3 Frische Brise

13.4 Turbine

14 GUI

14.1 Das UI-System uGUI

14.1.1 Canvas

14.1.2 RectTransform

14.1.3 UI-Sprite Import

14.1.4 Grafische Controls

14.1.5 Interaktive Controls

14.1.6 Controls designen

14.1.7 Animationen in uGUI

14.1.8 Event Trigger

14.2 Screen-Klasse

14.2.1 Schriftgröße dem Bildschirm anpassen

14.3 OnGUI-Programmierung

14.3.1 GUI

14.3.2 GUILayout

14.3.3 GUIStyle und GUISkin

15 Prefabs

15.1 Prefabs erstellen und nutzen

15.2 Prefab-Instanzen erzeugen

15.2.1 Instanzen per Code erstellen

15.2.2 Instanzen weiter bearbeiten

15.3 Prefabs ersetzen und zurücksetzen

15.4 Prefab-Verbindungen auflösen

16 Internet und Datenbanken

16.1 Die WWW-Klasse

16.1.1 Rückgabewert-Formate

16.1.2 Parameter übergeben

16.2 Datenbank-Kommunikation

16.2.1 Daten in einer Datenbank speichern

16.2.2 Daten von einer Datenbank abfragen

16.2.3 Rückgabewerte parsen

16.2.4 Datenhaltung in eigenen Datentypen

16.2.5 HighscoreCommunication.cs

16.2.6 Datenbankverbindung in PHP

17 Animationen

17.1 Allgemeiner Animation-Workflow

17.2 Animationen erstellen

17.2.1 Animation View

17.2.2 Curves vs. Dope Sheet

17.2.3 Animationsaufnahme

17.2.4 Beispiel Fallgatter-Animation

17.3 Animationen importieren

17.3.1 Rig

17.3.2 Animationen

17.4 Animationen einbinden

17.4.1 Animator Controller

17.4.2 Animator-Komponente

17.4.3 Beispiel Fallgatter: Animator Controller

17.5 Controller-Skripte

17.5.1 Parameter des Animator Controllers setzen

17.5.2 Animation States abfragen

17.5.3 Beispiel Fallgatter Controller-Skript

17.6 Animation Events

17.7 Das „alte“ Animationssystem

18 Künstliche Intelligenz

18.1 NavMeshAgent

18.1.1 Eigenschaften der Navigationskomponente

18.1.2 Zielpunkt zuweisen

18.1.3 Pfadsuche unterbrechen und fortsetzen

18.2 Navigation-Fenster

18.2.1 Agents Tab

18.2.2 Object Tab

18.2.3 Bake Tab

18.2.4 Areas Tab

18.3 NavMeshObstacle

18.4 Off-Mesh Link

18.4.1 Automatische Off-Mesh Links

18.4.2 Manuelle Off-Mesh Links

18.5 Point & Click-Steuerung für Maus und Touch

19 Fehlersuche und Performance

19.1 Fehlersuche

19.1.1 Breakpoints

19.1.2 Variablen beobachten

19.1.3 Console Tab nutzen

19.1.4 GUI- und GUILayout nutzen

19.1.5 Fehlersuche bei mobilen Plattformen

19.2 Performance

19.2.1 Rendering-Statistik

19.2.2 Batching-Verfahren

19.2.3 Analyse mit dem Profiler

19.2.4 Echtzeit-Analyse auf Endgeräten

20 Spiele erstellen und publizieren

20.1 Der Build-Prozess

20.1.1 Szenen des Spiels

20.1.2 Plattformen

20.1.3 Notwendige SDKs

20.1.4 Plattformspezifische Optionen

20.1.5 Developer Builds

20.2 Publizieren

20.2.1 App

20.2.2 Browser-Game

20.2.3 Desktop-Anwendung

21 Erstes Beispiel-Game: 2D-Touch-Game

21.1 Projekt und Szene

21.1.1 Die Kamera

21.1.2 Texturen importieren und Sprites definieren

21.2 Gespenster und Hintergrund

21.2.1 Gespenster animieren

21.2.2 Gespenster laufen lassen

21.2.3 Gespenster-Prefab erstellen

21.3 Der GameController

21.3.1 Der Spawner

21.3.2 Level-Anzeige

21.3.3 Der Input-Controller

21.3.4 Game Over-UI

21.3.5 Hintergrundmusik

21.4 Punkte zählen

21.5 Spielende

21.6 Spiel erstellen

22 Zweites Beispiel-Game: 3D Dungeon Crawler

22.1 Level-Design

22.1.1 Modellimport

22.1.2 Materials konfigurieren

22.1.3 Prefabs erstellen

22.1.4 Dungeon erstellen

22.1.5 Dekoration erstellen

22.2 Inventarsystem erstellen

22.2.1 Verwaltungslogik

22.2.2 Oberfläche des Inventarsystems

22.2.3 Inventar-Items

22.3 Game Controller

22.4 Spieler erstellen

22.4.1 Lebensverwaltung

22.4.2 Spielersteuerung

22.4.3 Wurfstein entwickeln

22.4.4 Lautstärke steuern

22.5 Quest erstellen

22.5.1 Erfahrungspunkte verwalten

22.5.2 Questgeber erstellen

22.5.3 Sub-Quest erstellen

22.6 Gegner erstellen

22.6.1 Model-, Rig- und Animationsimport

22.6.2 Komponenten und Prefab konfigurieren

22.6.3 Animator Controller erstellen

22.6.4 NavMesh erstellen

22.6.5 Umgebung und Feinde erkennen

22.6.6 Gesundheitszustand verwalten

22.6.7 Künstliche Intelligenz entwickeln

22.7 Eröffnungsszene

22.7.1 Szene erstellen

22.7.2 Startmenü-Logik erstellen

22.7.3 Menü-GUI erstellen

22.8 WebGL-Anpassungen

22.8.1 WebGL-Input ändern

22.8.2 Quit-Methode in WebGL abfangen

22.9 Finale Einstellungen

22.10 So könnte es weitergehen

23 Der Produktionsprozess in der Spieleentwicklung

23.1 Die Produktionsphasen

23.1.1 Ideen- und Konzeptionsphase

23.1.2 Planungsphase

23.1.3 Entwicklungsphase

23.1.4 Testphase

23.1.5 Veröffentlichung und Postproduktion

23.2 Das Game-Design-Dokument

24 Schlusswort

Carsten Seifert
Jan Wislaug

Spiele entwickeln mit Unity 5

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

3., aktualisierte Auflage

Die Autoren:

Carsten Seifert,Süderbrarup, www.hummelwalker.de
Jan Wislaug, Witten, www.jan-wislaug.de

Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.

Ebenso übernehmen Autoren und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen­ und Markenschutz­Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

Lektorat: Sylvia Hasselbach
Erstellung der Dateien für das Beispiel-Game: Alexej Bodemer, Stuhr, www.alexejbodemer.de
Umschlagdesign: Marc Müller-Bremer, München, www.rebranding.de
Umschlagrealisation: Stephan Rönigk
Gesamtherstellung: Kösel, Krugzell
Printed in Germany

ISBN 978-3-446-45197-1
E-Book ISBN 978-3-446-45368-5

Verwendete Schriften: SourceSansPro und SourceCodePro (Lizenz)
CSS-Version: 1.0

Font License Zurück zum Impressum

Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

00cVorwort

Für viele von uns sind Computerspiele und Handygames heutzutage allgegenwärtige Wegbegleiter. Egal ob auf dem Smartphone, dem Tablet, installiert auf dem heimischen PC oder direkt aufgerufen im Browser werden sie von uns täglich genutzt. Manchmal dienen sie als Zeitvertreib, bis der nächste Bus kommt, manchmal sind sie aber auch Bestandteil eines intensiven Hobbys.

Aber nicht nur das Spielen kann Spaß machen, auch das Entwickeln dieser Games kann begeistern. Sowohl im Freizeitbereich als auch in der Arbeitswelt wird der Beruf des Spieleentwicklers immer beliebter. Es ist also kein Wunder, dass mittlerweile viele, teilweise sogar staatlich anerkannte, Studiengänge existieren, die sich dem Entwickeln von Computerspielen widmen.

In diesem Buch möchten wir Ihnen Unity, eine weit verbreitete Entwicklungsumgebung für Computerspiele und auch andere Anwendungen, näherbringen. Wir erklären und erläutern ausführlich, wie Sie mit diesem Werkzeug Spiele entwickeln können. Dabei richtet sich das Buch sowohl an Einsteiger und Umsteiger als auch an Spieleentwickler, die mit Unity nun richtig durchstarten möchten.

Als ursprünglicher Autor dieses Buches möchte ich, Carsten Seifert, mich an dieser Stelle ganz besonders bei meiner Frau Cornelia bedanken, die mich während des Schreibens so geduldig unterstützt hat und mir jederzeit beim Formulieren und Korrigieren hilfsbereit zur Seite stand.

Weiter möchte ich Sieglinde Schärl, Kristin Rothe und dem gesamten Hanser-Verlag-Team danken, die mir nicht nur das Schreiben dieses Buches ermöglicht haben, sondern auch bei der Arbeit an den ersten beiden Auflagen des Buches jederzeit mit Rat und Tat zur Seite standen.

Auch danke ich ganz herzlich Alexej Bodemer, der für das Beispiel-Game dieses Buches alle 3D-Modelle, Texturen und Musikdateien entworfen und zur Verfügung gestellt hat.

Ich, Jan Wislaug, möchte mich als überarbeitender Autor vor allem bei Sylvia Hasselbach vom Hanser Verlag bedanken. Sie stand mir bei der Arbeit an der dritten Auflage immer freundlich mit Rat und Tat beiseite.

Darüber hinaus danke ich Carsten Seifert für die gute Zusammenarbeit und dafür, dass sich sein Werk dank der guten Struktur so toll überarbeiten ließ.

Zusammen möchten wir beide Will Goldstone und Unity Technologies danken, die uns die bis dato aktuellsten Beta-Versionen zur Verfügung gestellt haben.

Nicht zuletzt danken wir auch der gesamten Community, die zum einen Carsten Seifert auf seinem Blog und seinen sozialen Kanälen begleitet hat und zum anderen Jan Wislaug bei seiner Überarbeitung auf die neue Unity-Version unterstützte.

Carsten Seifert und Jan Wislaug

im Juli 2017

01Einleitung

Computerspiele gehören heutzutage zu den beliebtesten Freizeitgestaltungen unserer Zeit. Mit Zunahme der Popularität ist aber auch der Anspruch an diese Spiele gestiegen. Während in den ersten Jahren bis Jahrzehnten dieser jungen Branche noch ein einziger Programmierer ausreichte, um alle notwendigen Aufgaben zu erledigen, werden anspruchsvolle Computerspiele heutzutage meist von großen Teams umgesetzt. Hier arbeiten 3D-Modellierer, Grafiker, Sounddesigner, Level-Designern und natürlich auch Programmierer aus unterschiedlichen Sparten Hand in Hand.

Um den stetig wachsenden Ansprüchen zu genügen, sind aber auch die Werkzeuge der Entwickler ständig mitgewachsen. Eines dieser Werkzeuge ist Unity. Unity ist eine Spieleentwicklungsumgebung für Windows- und Mac OS X-Systeme und wird von der aus Dänemark stammenden Firma Unity Technologies entwickelt. Mit ihr können Sie sowohl interaktive 3D- als auch 2D-Inhalte erstellen. Wir sprechen deshalb von Inhalten und nicht nur von Spielen, weil Unity zwar eigentlich für die Entwicklung von 3D-Spielen gedacht war, mittlerweile aber auch immer häufiger Anwendung in anderen Bereichen findet. So wird es beispielsweise für Architekturvisualisierungen genutzt, im E-Learning-Bereich eingesetzt oder in der Digital-Signage-Branche für das Erstellen digitaler Werbe- und Informationssysteme genommen.

Da Unity ursprünglich für die Entwicklung von 3D-Spielen konzipiert wurde, lautet die Internet-Adresse der Firma unity3d.com. Dies ist der Grund, weshalb die Entwicklungssoftware auch gerne mal „Unity3D“ genannt wird, was aber eben nicht ganz korrekt ist.

1.1 Multiplattform-Publishing

Eine besondere Stärke von Unity ist die Unterstützung von Multiplattform-Publishing. Das bedeutet, dass Sie in Unity ein Spiel einmal entwickeln können, das Sie dann aber für mehrere Plattformen exportieren können. Aktuell werden mehr als 25 Plattformen unterstützt, die sich grob in folgende Kategorien einteilen lassen:

In Verbindung mit diesen Plattformen bietet Unity die Möglichkeit, Inhalte direkt für verschiedene Virtual-Reality-Systeme zu entwickeln. Hierzu gehören: Occulus-Rift, Google-Cardboard, Steam-VR, Playstation-VR, Gear-VR, Microsoft Hololens und Daydream.

Auch für Web-Inhalte bietet Unity entsprechende Features. Mit der Plattform „WebGL“, die im Browser läuft und auf HTML5 basiert, können Sie Nutzern direkten Zugriff auf Ihre Inhalte geben.

Bei den erwähnten Spielekonsolen müssen Sie allerdings noch eine Einschränkung beachten: Sie müssen hier extra Lizenzen erwerben, die zum einen nicht günstig und zum anderen nur für Firmen verfügbar sind, die von den jeweiligen Konsolenherstellern auch als Entwickler akzeptiert wurden. Deshalb werden wir die Konsolenentwicklung in diesem Buch auch außen vor lassen und nicht näher beleuchten.

1.2 Das kann Unity (nicht)

Unity bringt eine ganze Reihe an nützlichen Werkzeugen mit, um Spiele und andere 2D- und 3D-Anwendungen zu entwickeln. So gibt es neben einer ausgeklügelten Physik-Engine auch Tools für Partikeleffekte, zur Landschaftsgestaltung oder auch für Animationen. Außerdem wird Unity mit einer extra angepassten Version der Softwareentwicklungsumgebung MonoDevelop ausgeliefert, in der die Programmierung umgesetzt und das Debugging vorgenommen werden kann.

Eines ist Unity allerdings nicht: Es ist keine 3D-Modellierungssoftware. Unity bietet zwar von Haus aus einige 3D-Grundobjekte an, sogenannte Primitives, die für kleinere Aufgaben genutzt werden können, aber für richtige Modellierungsaufgaben sollten Sie auf die dafür entwickelten Spezialtools wie 3ds Max oder das kostenlose Blender zurückgreifen.

1.3 Lizenzmodelle

Sie haben die Möglichkeit, auf verschiedene Modelle zurückzugreifen, wenn Sie Unity nutzen möchten. Zum eine gibt es eine komplett kostenfreie Variante, welche bereits alle oben genannten Zielplattformen unterstützt und eine komplette Spieleentwicklung bis hin zum fertigen Spiel erlaubt. Es gibt jedoch auch einige Einschränkungen, die sich allerdings nur auf erweiterte oder visuelle Features beziehen. So müssen Sie zum Beispiel auf die dunkle Oberfläche (Skin) Ihres Unity-Programms verzichten oder haben auch keinen Zugriff auf den Premium-Support von Unity.

Bei der kostenpflichtigen Variante unterscheidet man die drei Abo-Modelle „Plus“, „Pro“ und „Enterprise“, welche jeweils monatlich zu bezahlen sind. Je teurer das Abo ist, umso mehr Funktionen stehen zur Verfügung.

Da sowohl die kostenfreie als auch die kostenpflichtige Edition kommerziell genutzt werden darf, gibt es beim Einsatz der kostenlosen Version die Vorgabe, dass nur Firmen bzw. Entwickler diese einsetzen dürfen, die nicht mehr als 100.000 US-Dollar Umsatz in einem Geschäftsjahr machen.

1.4 Aufbau und Ziel des Buches

Mit diesem Buch werden Sie lernen, auf Basis von Unity eigene 2D- und 3D-Spiele zu entwickeln. Sie werden sich mit den unterschiedlichen Tools der Game Engine vertraut machen und die Skript-Programmierung erlernen. Dabei steht aber nicht das Ziel im Fokus, wirklich jede einzelne Funktion und Möglichkeit zu beleuchten, die Unity dem Entwickler anbietet. Vielmehr zeigen wir Ihnen, wie die unterschiedlichen Bereiche von Unity funktionieren und miteinander zusammenarbeiten. Denn der Funktionsumfang dieser Spieleentwicklungsumgebung ist mittlerweile so umfangreich geworden, dass es gar nicht mehr möglich ist, alle Tools und deren Möglichkeiten bis ins letzte Detail in einem einzigen Buch ausführlich zu behandeln. Daher liegt der Schwerpunkt auf den Kernfunktionen und wichtigen Optimierungstechniken, die in Unity für die 2D- und 3D-Spieleentwicklung bereitgestellt werden, ergänzt um Anwendungsbeispiele und Praxistipps.

Möchten Sie weiter in die Tiefe eines speziellen Tools gehen oder mehr Informationen zu bestimmten Scripting-Klassen erhalten, empfehlen wir Ihnen die mit Unity mitgelieferten Hilfe-Dokumente, die Sie über das Help-Menü erreichen. Dort finden Sie sowohl ein ausführliches Manual über die in Unity integrierten Tools sowie eine Scripting-Referenz über alle Unity-Klassen und deren Möglichkeiten. Letztere finden Sie auch über die Hilfe von MonoDevelop, der mitgelieferten Programmierumgebung.

Spieleentwicklung wird häufig auch als Spieleprogrammierung bezeichnet, auch wenn viele Aufgaben in der Spieleentwicklung heutzutage nicht mehr programmiert, sondern mithilfe von Tools erledigt werden. Nichtsdestotrotz ist der Programmieranteil bei der Entwicklung eines Spiels doch immer noch sehr hoch. Deshalb wird auch das Buch zunächst mit zwei größeren programmierbezogenen Kapiteln beginnen. Das erste behandelt allgemeine Grundlagen der Programmierung, das zweite geht auf die Unity-spezifischen Themen ein. Erst danach werden wir in die 3D-Welt von Unity eintauchen und die verschiedenen Werkzeuge behandeln. Der Aufbau ist deshalb so gewählt, weil wir in den folgenden Kapiteln immer wieder kleinere Skript-Beispiele zeigen, die Einsatzmöglichkeiten in der Praxis demonstrieren.

Ganz grundsätzlich ist die Reihenfolge der einzelnen Kapitel so gewählt, dass die Inhalte aufeinander aufbauen. Aus diesem Grund kommen auch erst zum Ende des Buches die beiden Beispiel-Games, eines für 2D und eines für 3D. In diesen werden alle angesprochenen Themen noch einmal aufgegriffen und die gesamten Zusammenhänge in der Praxis gezeigt. Nichtsdestotrotz können Sie gerne diese Kapitel auch vorziehen. Speziell das 2D-Spiel eignet sich hierfür gut.

Im Buch werden wir Hinweiskästen, wie den obigen, einsetzen, um Hinweise und Tipps zu geben. Je nach Typ des Hinweises werden diese mit unterschiedlichen Icons ausgezeichnet.

Image

Image ImageHinweise zu weiterführenden Inhalten im InternetPraxistippsAllgemeine Hinweise

1.5 Weiterentwicklung von Unity

Die Spieleindustrie gehört zu den Branchen, die sich aktuell am schnellsten verändern. Kein Wunder also, dass auch Unity ständig weiterentwickelt wird und neue Funktionen erhält. Sollten Sie Unterschiede zwischen dem Buch und Ihrer Unity-Version erkennen, wird dies sicher der ständigen Weiterentwicklung von Unity geschuldet sein.

Aber nicht nur der Funktionsumfang wird ständig weiterentwickelt, auch das Lizenzmodell von Unity ist nicht von Veränderungen ausgeschlossen. In den letzten Jahren hat sich dieses zunehmend geändert. Seit es die kostenlose Version von Unity gibt, wurde deren Funktionsumfang gravierend erweitert (genauso wie der der Pro-Version). So standen anfangs nur Basisfunktionalitäten zur Verfügung. Später kamen dann die Mobile-Export-Möglichkeiten hinzu, bis 2015 schließlich auch alle anderen Pro-Features der Engine in die kostenlose Version integriert wurden, wobei noch eine Ausnahme besteht. So lässt die Personal Edition mittlerweile zwar den Customizable Splash Screen zu, aber es erscheint vor jedem Spiel, das mit dieser Version erstellt wurde, immer noch der Unity-Schriftzug. Besitzen Sie allerdings Unity Professional, können Sie auch das anpassen.

Aktuell arbeitet Unity mit Facebook zusammen, um die Plattform „Facebook Gameroom“ weiter voranzubringen. Auch der Bereich „Virtual Reality“ wird kontinuierlich ausgebaut. In kommenden Versionen der Software wird sich also immer wieder etwas tun, um ein noch breiteres Spektrum an Funktionen zu bieten. Auf der Firmen-Website von Unity Technologies können Sie sich immer über den aktuellen Entwicklungstand informieren.

1.6 Online-Zusatzmaterial

Auf einer Unterseite meiner Homepage stelle ich Ihnen einen Bereich zur Verfügung, in dem Sie Zusatzmaterialien erhalten. Im oberen, für jedermann sichtbaren Abschnitt, befindet sich eine Sammlung an kleinen Ausbesserungen und Hinweisen zum Buch. Darunter finden Sie die Beispielprojekte, welche aber nur nach einem erfolgreichen Login sichtbar sind.

Image

Passwortgeschützter Bereich für ZusatzmaterialienZusatzmaterialien zum Buch

URL: http://jan-wislaug.de/Unitybuch_ZusatzMaterialien.htm

Benutzername: Leser

Passwort: Unity5Buch!

In dem geschützten Bereich finden Sie Links zu Projektdaten unter anderem für:

Ein touch-basiertes 2D-Beispiel-Game mit allen dazugehörigen Ressourcen

Ein 3D-Beispiel-Game (Dungeon Crawler) mit allen dazugehörigen Ressourcen

Ein Anwendungsbeispiel für eine Auto-Steuerung inklusive eines 3D-Modells mit zusätzlichen Skripten

Ein Beispiel für eine Sprite-Animation

Ein Anwendungsbeispiel für Parallax Scrolling

Eine Vorlage für ein einfaches Übungsprojekt

Außerdem finden Sie auf der Webseite www.hummelwalker.de einige Video-Tutorials zu Unity 5.

02Grundlagen