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
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 MarkenschutzGesetzgebung 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.
© 2017 Carl Hanser Verlag München
www.hanser-fachbuch.de
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.
00c | Vorwort |
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
01 | Einleitung |
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:
Die sogenannten „Standalones“. Hierzu gehören: Windows Desktop, Mac, Linux (und Steam OS)
Die mobilen Smartphone-/Tablet-Plattformen: iOS, Android, Windows Phone, Fire OS
Die Spielekonsolen: PlayStation 4, PlayStation Vita, Xbox One, Nintendo Switch, Wii U, Nintendo 3DS
Die Kategorie „Smart-TV“. Hier werden folgende Systeme unterstützt: AndroidTV, Samsung SMART-TV, tvOS
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.
Hinweise 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.
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.
02 | Grundlagen |