Unity 2021/22 und C# online lernen

Die Heise Medien Gmbh, bekannt u.a. vom IT-Portal heise.de, bietet mit Heise-Academy online-Fortbildungen im IT-Bereich an. Hier findest Du nun auch meinen Video-Kurs „Unity und C#: Einstieg ins Game-Engineering“, bei dem ich Dich durch die technischen Grundlagen von Unity 2021 führe. Ab Februar 2023 ist der Kurs zudem bei Udemy erhältlich.

Wie wird eine Game-Engine programmiert?

In diesem Kurs geht es um die Grundlagen der Spielentwicklung in Unity. Dabei lernst Du virtuelle Welten aufzubauen und Programmlogik mit C# zu formulieren. Wir schauen uns Lösungswege und auch typische Probleme an, die bei der Arbeit mit Unity üblicherweise auftreten. 

Am Ende dieses Kurses hast du einen kompletten Überblick über Unity und kennst alle wichtigen Funktionen die du brauchst um deine Inhalte umzusetzen. Beginnend bei der Frage wie du Modelle von Blender nach Unity exportierst, über die Organisation von Szenen, dem Anlegen von Animationen, Beleuchtung, Kameraeinstellungen und 2D-Grafik bis hin zur Verbindung mit Programmlogik, Physikberechnungen und Interaktionsmöglichkeiten wird der gesamte Workflow abgebildet.

Leistungsfähige Echtzeit-Grafik für virtuelle Szenarios

Nicht nur Spiele sondern auch viele andere Produkte wie z.B. Simulationen oder Produktvisualisierungen stellen hohe technische Ansprüche, die eine GameEngine erfüllt. Das in diesem Kurs erworbene Wissen lässt sich somit zur Umsetzung von Spielen wie auch zahlreichen weiteren Anwendungsgebieten nutzen.

Die einzelnen Funktionen des Programms werden Schritt für Schritt besprochen und direkt innerhalb der Software erklärt. Die einzelnen Umsetzungsbeispiele und Übungen kannst du sofort mitmachen und so das Gelernte selbst ausprobieren. 

Inhalte dieses Video-Kurses

Gesamtlänge: ca. 14 Stunden

Kapitel 1:  Einführung und Setup

ca. 15 Minuten

  • Unitys Lizenzmodell und Installation
    Lizenzen, Versionen und Module in Unity, Unity. Anmeldung & Installation. Aktivierung und Lizenz einrichten. Was ist Unity Hub? Installationprozess durchlaufen.
  • Anbindung von Visual Studio
    Visual Studio als Code-Editor installieren, bestehende VS-Installation anbinden. Plattform-Ziele (nach)installieren. Problem: Keine Auto-Vervollständigung in VS.

Kapitel 2:  Unity-Grundlagen

Kapiteldauer ca. 65 Minuten

  • Elemente von Unity-Projekten
    Struktur eines Unity-Projekts, Projekte in Unity-Hub anlegen, Projekt-Struktur, Projektdarstellung im Editor, Problem: Objekt-Beziehungen gehen verloren, „Asset“.
  • Ein minimales Programm in Unity
    Code schreiben & ausführen, Hello World, Aufbau eines minimalen Unity-Scripts.
  • Unity-Message-Methoden
    Was ist sind Unity-Messages? Welche vordefinierten Messages gibt es? Sichtbarkeitsmodifikatoren. Welchen Schutzgrad brauchen Messages wie z.B. Start()? Aufbau eines minimalen Unity-Scripts.
  • Komponenten-Architektur
    Begriff der Komponente. Fehler: „Can‘t add script component […] because the script class cannot be found.
  • Felder, Attribute und der Inspector
    Was sind Felder? Feld-Werte über den Inspector steuern. Wie funktionieren Inspector-Werte technisch gesehen? Was sind „Attribute“ und was bewirkt [SerializeField]?
  • IMGUI – Einfache grafische Diagnosetools
    Was ist das IMGUI (Immediate Mode GUI)? Funktion von OnGUI().
  • Eingabe-Elemente im IMGUI
    Wie unterscheidet sich das IMGUI vom sonst üblichen Programmierstil in Unity? Problem: Die manuelle Angabe der Zeichnen-Koordinaten ist sehr mühsam.
  • Interaktives Quiz zu diesem Kapitel

Kapitel 3: Raum und Input

Kapiteldauer ca. 80 Minuten

  • Organisation von 3D-Elementen
    Objekte im virtuellen Raum, Game Objects als Grundtyp, GameObject und gameObject, Szenengraph und Hierarchie
  • Transform-Eigenschaft
    Objekte im Raum transformieren, Code-Element „transform“: Zugriff auf die Objekt-Position.
  • Objekte per Code im Raum verschieben
    Vector3 und Vector2. Positionen zuweisen. Problem: Der Rückgabewert von Transform.position ist keine Variable und kann nicht geändert werden.“ [CS1612]
  • Objekte per Code skalieren
  • Objekte per Code rotieren
    Zugriff auf die Rotation, Besonderheiten der Rotation, Objekt per C# um die eigene Y-Achse um 45° drehen.
  • Wie wird ein Objekt nach vorne bewegt?
  • Objekte hierarchisch organisieren
    Zugriff auf die Hierarchie und Elternobjekte.
  • Reflektion: Erkenntnisse zum „Transform“
  • Zeitliche Verläufe mit Update und deltaTime realisieren
    Eingaben per Input erfassen. Wie wird ein Tastendruck abgefragt?
  • Eingabeachsen
    Spiel-Eingaben erfassen, Input-Axes einrichten, Wie wird ein Achsensignal abgefragt?
  • Interaktives Quiz zu diesem Kapitel

Kapitel 4:  Assets und Instanzen

Kapiteldauer ca. 90 Minuten

  • Klickereignisse auf 3D-Objekten
    Grundlagen Mausinteraktionen, Wie reagiert ein Objekt auf konkrete Mausinteraktionen? OnMouseUpAsButton(). Problem: Rechte Maustaste nicht identifizierbar.
  • Modelle von Blender nach Unity portieren
    Modell von Blender nach Unity exportieren, Welches Dateiformat für Exporte verwenden? Export-Import-Ablauf
  • Problemlösungen beim Portieren: Objektursprung und Größenverhältnisse
    Wo soll der Objektursprung in Blender liegen? Größenverhältnisse zwischen Blender und Unity stimmen nicht. Unterschiedliche Koordinatensysteme. Importierte Modelle sind in Unity gedreht und skaliert.
  • Austauschen eines lückenhaft erscheinenden Modells
    Das Modell ist in Unity irgendwie löchrig.
  • Arbeitsfluss bei der Asset-Produktion
    Asset-Pipeline: Was wird wo gebaut? Allgemeine Entscheidungshilfe: Dynamik & Interaktivität. Wie sieht die Produktionspipeline für ein Maisfeld im Spiel aus?
  • Modell-Instanzen per Code ansteuern
    Mit Assets und Instanzen programmieren, Game Object – Instanzen, Duplikate, Instantiate(originalGO), Destroy(gameObject), DestroyImmediate(gameObject)
  • Aktivieren und Deaktivieren von Objekten und Komponenten
    SetActive(zustand) vs. enabled-Eigenschaft. Problem: Meine Komponente hat kein Häkchen.
  • Objekte suchen und finden
    Wie findet ein GameObject ein anderes? Wie findet eine Komponente eine andere? Häufige Suchläufe. Objekte explizit koppeln.
  • Objektkomposition per Prefab
    Wie lassen sich Objektkompositionen wiederverwenden? Was sind Prefabs? Wie wird ein Prefab erzeugt? Eigenschaften und Verhalten von Prefab-Instanzen. Eigenschaften und Verhalten von Prefab-Assets
  • Interaktives Quiz zu diesem Kapitel

Kapitel 5:  Material, Textur und Shader

Kapiteldauer ca. 100 Minuten

  • Unterscheidung Materialien, Shader & Texturen
    Begriffsunterscheidung. Material in Unity. Welche Rolle spielen Shader?
  • Render-Pipelines
    Was ist die Render-Pipeline (RP)? Render-Pipelines in Unity. Wie wird die Universal Render Pipeline (URP) in neuem Projekt aktiviert? Was ist der Package Manager? Umstellung auf Universal Render Pipeline. Problem: Nach Umstellung auf URP erscheinen die Szenen-Objekte pink.
  • Shader Graph-Editor
    Installation des Shader Graph per Package Manager, Wie funktioniert der Shader-Graph-Editor?
  • Portierung von Materialien
    Mythos: „Um Materialien aus Blender zu exportieren, muss man diese backen. Wie wird ein Blender-Material nach Unity überführt? Texturemaps als Materialfundament
  • Arbeiten mit Material-Assets
    Wie ändert man das Material eines importierten Modells in Unity? Wie werden Material-Assets erzeugt? Wie ändert man das Material eines einzelnen Modells in der Szene? Wie ändert man ein Material per C#?
  • Problem: Material-Änderung per Code wirkt nicht.
    Typische Textur-Probleme, Ausgangssituation. Probleme: Pixel tauchen auf, die in der Textur garnicht vorkommen, Texturkanten zeigen einen Farbschimmer. Wie wird eine Textur gekachelt? Pixel und Kanten werden immer geglättet. Die Textur wird verzerrt importiert.
  • Mapping-Koordinaten
    UV-Koordinaten in Unity, Wie erreicht Code die UV-Koordinaten? Beispiel: 2D-Gesichter bei Klick ändern.
  • Videotexturen
  • Interaktives Quiz zu diesem Kapitel

Kapitel 6:  Animation und Bewegung

Kapiteldauer ca. 130 Minuten

  • Animationsprogrammierung
    Wie fährt ein Objekt von A nach B? Lerp(von, bis, prozent). Version mit Kopplung über öffentliches Feld.
  • Bewegungsprogrammierung mittels iTween.
    Installation der iTween-Bibliothek per Package Manager. Bewegung mit iTween. iTween: Easing (Bewegungsabschwächung). Wie werden Parameter an iTween übergeben? Welche Parameter unterstützt iTween.Hash?
  • Pfadanimation
    Installation des iTween-Pfadeditors per Download. Wie wird eine Pfadanimation in Unity mittels iTween realisiert? Beim Loop springt die Animation.
  • Anmerkungen zu iTween
  • Hierarchische Animation
    Bones & Rigging. Produktions-Pipeline einer Bones-Animation.
  • Clips
    Wie wird ein Clip-Asset abgespielt? Animation als Zustandsvisualisierung. Clips auf Zustände (States) abbilden. Zustandsübergänge (Transitions).
  • Typische Probleme im Animator
    Wie wird ein Clip im Animator wiederholt? Der Clip wirkt abgeschnitten. Eine dem FBX hinzugefügte Animation erscheint nicht als Clip.
  • Übergänge und Parameter im Animator
    Zustandswerte (Parameter). Wie löst C# den Animation-State-Wechsel aus? Fehler: Pro State einen Parameter anlegen. Was bedeuten die Standard-Zustände im Animator?
  • Ebenen und Gewichte
    Animator-Layer
  • Weitere Animationstechnik: Vertex- Animation
  • Interaktives Quiz zu diesem Kapitel

Kapitel 7:  KI und Physik

Kapiteldauer ca. 90 Minuten

  • Überblick KI / AI in Games
  • Unitys Physik-System
    Collider: Typische Funktionen. Wann simuliert Unity Physik auf Objekten?
  • Physiksimulation gezielt beeinflussen
    Problem: Explizite Transformation & Physik stören sich. isKinematic-Eigenschaft.
  • Kollisionen
    OnCollisionEnter und Typische Collider-Funktionen
  • Physik-bezogener Code
    Was gehört in Update bzw. FixedUpdate? Wie werden Objekte gezielt per Physik bewegt?
  • Kollisionsabfrage per Strahlverfolgung (Raycast)
    Raycast(strahl, …) und grafische Diagnose eines Raycast.
  • Pfadfindung in Unity
    Navigationsprobleme in der Praxis. Was sind statische Game-Objects?
  • Bewegung per NavMesh-System
    Was sind NavMeshes und NavAgents? Wie wird ein NavMesh in Unity erstellt? Wie wird ein NavAgent in Unity erstellt? Das Navmesh geht nicht bis zum Rand. Wie verhindert ein NavAgent dynamische Objekte?
  • Feinderkennung durch NPCs
    Wie sieht ein NPC ein anderes Objekt? Welche Objekte liegen im Sichtfeld des NPC?
  • Interaktives Quiz zu diesem Kapitel

Kapitel 8:  Kamera-Steuerung

Kapiteldauer ca. 65 Minuten

  • Second-Person-Perspektive
    Modell der „Gott“-Kamera bzw. Vogelperspektive. Blickweite vs. Clipping, Linienverkürzung
  • Panning-Bewegung der Kamera
    Wie wird ein Panning im 3D-Raum realisiert?
  • Third-Person-Perspektive
    Modell der „Cinematic“-Kamera in Beobachterperspektive. Verfolgerkamera per Parenting umsetzen.
  • Constraints
    Was sind Constraints? Wann Constraints und wann z.B. transform.LookAt?
  • Mehrere Kameras einsetzen
    Wie wird ein Kamerawechsel programmiert?
  • First-Person-Perspektive
    Modell der „Ego“-Kamera in Normalsicht. Wie ist ein MouseLook aufgebaut? Wie wird ein MouseLook umgesetzt?
  • Essentielle Kamera-Eigenschaften
    Kamera-Eigenschaften, Brennweite, Zoom und Dolly
  • Explizites Rendern
    Wie wird ein echter Spiegel realisiert?
  • Interaktives Quiz zu diesem Kapitel

Kapitel 9:  Beleuchtungseffekte in der Universal Render Pipeline

Kapiteldauer ca. 85 Minuten

  • Einführung Beleuchtung
    Rolle der Beleuchtung, Beleuchtungsarten in Unity
  • Indirektes Licht
    Wie wird indirektes Licht in Unity aufgesetzt?
  • Probleme beim indirekten Licht
    Mein Mesh empfängt kein indirektes Licht. Lightmaps ignorieren dynamische Objekte. Wie werden bewegliche Objekte indirekt beleuchtet?
  • Spiegelungen
    Spiegelungen per Lichtsystem, Performance von Reflexionen verbessern.
  • Gerichtetes Licht
  • Umgebungslicht
    Licht der Skybox
  • Punkt- und Kegellicht
  • Flächen-Licht
  • Material-Emissionen
  • Schatten
    Schattenwurf konfigurieren, komplexe Schatten simulieren: Ambient Occlusion
  • Transparenz
    Alpha-Transparenz
  • Programmierung eines Flackerlichts
  • Interaktives Quiz zu diesem Kapitel

Kapitel 10:  2D-Graphik und GUIs

Kapiteldauer ca. 95 Minuten

  • Wie unterscheidet sich 2D von 3D in Unity?
    Ist mein Projekt 2D oder 3D?
  • Sprites
    Was sind Sprites? Sprites in der (3D-)Szene rendern
  • Animation von Sprites
    Unity-Keyframe-Animation aufsetzen
  • 2D-Physik und Kollisionen
    Canvas-Layout-System (UGUI), Bild-Eigenschaften von Spielszenen, Bild-Eigenschaften von GUI-Elementen, Kernbestandteile von Unitys GUI-System. Wie wird das UI-Layout-System angelegt?
  • Grundlagen des Canvas
    RectTransform, Werkzeuge für UI-Bearbeitung, RectTransform: Pivotpunkt und Anker.
  • Dynamische Layouts
    Problem: Elemente überlappen sich bei wenig Platz. RectTransform: Anker-Streckung. Ergebnis bei Änderung der Bildschirmgröße. Wie wird eine Vignette oder ein Bloodscreen realisiert?
  • UI-Skalierung aufgrund der Bildschirmgröße
    Problem bei Größenänderung mit Inhaltsblöcken, Canvas Scaler, Prinzip von Scale With Screen Size.
  • Skalierbare Sprites
    Unterschied Skalierung und Größenänderung. Was ist ein 9-Slice oder 9-Grid?
  • Autolayouts
    Wie werden GUI-Elemente als Liste angeordnet?
  • Event System
    Wie wird eine Methode an einen GUI-Button gebunden?
  • Interaktives Quiz zu diesem Kapitel

Kapitel 11:  Daten und Persistenz

Kapiteldauer ca. 45 Minuten

  • Hintergrund zur Notwendigkeit der Datentrennung
    Das Spiel als Zustandssammlung persistente und transiente Informationen. Spielmechaniken nach J. Schell (Wh. Game Design) Objekte, Attribute, Status. Inspiration: Endlicher Automat.
  • Daten vom Szenengraph trennen
    Wie werden Spielinhalt und Darstellung getrennt? Warum ist die strenge Trennung von Daten und Darstellung wichtig? Fehler: Datenobjekte und Engineobjekte mischen
  • Spielobjekt durch Spieldaten steuern
    Sonnenlichtwinkel durch Uhrzeit steuern
  • Speichern und Laden von Daten
    Serialisierung“ und „Deserialisierung“. Wie wird ein Daten-Objekt in einen String konvertiert?
  • Daten/Dateien schreiben und lesen
    Wohin werden Savegames gespeichert? Woraus entsteht Application.persistentDataPath?
  • Scriptable Objects
    Serialisierungsformen in Unity. Wie wird ein Scriptable Object erzeugt und benutzt?
  • Szenenmanagement
    Wie wird zu einer anderen Szene gewechselt?
  • Wie bleiben Daten über Szenenwechsel hinweg erhalten?
    Laden und Mischen mehrerer Szenen. DontDestroyOnLoad.
  • Interaktives Quiz zu diesem Kapitel

Dr. René Bühling

Hi, mein Name ist René und ich möchte Dir dabei helfen, deinen Traum vom eigenen Computerspiel Wirklichkeit werden zu lassen. Mein erstes kommerziell veröffentlichtes Spiel habe ich Mitte der 1990er Jahre als Hobby-Projekt mit einem Basic-Dialekt unter Windows entwickelt. Seither verfolge ich das Thema Spieleentwicklung in Hobby, Studium und Beruf. Ich habe über 20 Jahre Erfahrung in allen Phasen des Entwicklungsprozesses, die ich gerne mit dir teilen möchte.