GEC1
Tag 1 · 09.10.2026

Was eine Engine tut

Die Spielschleife, unsere Arbeitsweise und das erste Objekt, das sich bewegt.

Alles steht auf der Kursseite

QR-Code zur Kursseite

allknivesnobagel.com

/teaching/gec1

Was ihr am Ende abgebt

Eine interaktive Spielwelt in Unity. Klein ist erlaubt: Ein einziger Raum reicht.

Wofür es Punkte gibt

  • Idee und Konzept: 30
  • Audio-visuell: 20 · Funktionalität: 20
  • Struktur und Build: 10 · Implementierung: 10 · Dokumentation: 10

Drei Wege zum Spiel

  1. Von Hand im Editor: Objekte, Komponenten, später Knoten im Graphen
  2. Code lesen: verstehen, was ein Skript in jedem Frame tut
  3. Mit einem Agenten: beschreiben, prüfen, übernehmen oder verwerfen

Ein Spiel ist eine Schleife

Jeder Durchlauf ist ein Frame, viele davon pro Sekunde.

Was in einem Frame passiert

  1. Eingabe lesen
  2. Zustand ändern
  3. Bild zeichnen

Eure Skripte laufen im zweiten Schritt. Unity ruft dafür in jedem Frame Update auf: bei jedem eingeschalteten Skript auf einem aktiven GameObject, das diese Methode hat.

Was die Engine euch abnimmt

  • Bilder zeichnen
  • Physik und Kollisionen
  • Eingabe, Ton, Animation
  • Den Build für Windows

Alles ist ein GameObject

Ein GameObject ist zunächst leer. Was es kann, bestimmen seine Komponenten.

Komponenten bestimmen das Verhalten

  • Transform: wo es ist
  • Mesh Renderer: wie es aussieht
  • Collider: womit es zusammenstößt
  • Euer Skript: was es tut

Jede Component ist ein Baustein mit eigenen Einstellungen im Inspector. Auch ein Skript ist eine Komponente.

So arbeiten wir

  1. Beschreiben, was passieren soll
  2. Bauen
  3. Spielen
  4. Prüfen, was sich geändert hat
  5. Committen

Git ist euer Rückgängig-Knopf

Ein Commit ist ein Speicherpunkt. Geht etwas kaputt, springt ihr dorthin zurück.

Was eine KI im Projekt verändert, kommt ins KI-Verzeichnis

Werkzeug, Modell, Zweck, Dateien. Das Verzeichnis ist Pflicht, auch ohne KI-Nutzung.

Zwischen den Freitagen

Dreizehn Tage ohne Kurs. Bringt jedes Mal etwas mit, das läuft, und eine Frage.

Drei Fragen an jede Idee

  1. Worum geht es in eurem Spiel?
  2. Wie handelt das Spiel davon?
  3. Wofür belohnt es die Spielenden?

Bis zum 23.10.

  1. Pitch: zwei Minuten, mit Folie, Referenzbildern und Spielreferenzen
  2. Eine Seite: zwei Alternativen, das angestrebte Erlebnis, warum diese Idee
  3. Eine Designfrage, die sich testen lässt, und ein Satz zur Kernmechanik
  4. Setup abschließen, dann „Das erste Objekt bewegt sich“ nachbauen

Zu Hause: Das erste Objekt bewegt sich

Ein Würfel, ein Skript, eine Zeile in Update.

Pro Frame

void Update()
{
    transform.Translate(0, 0.05f, 0);
}

Seht selbst

Erklärer: Frame, Update und deltaTime
Als Text

Ein Spiel läuft in Frames: In jedem Frame ruft die Engine Update() auf. Zwei Würfel steigen nach oben, beide im selben Spiel. Der eine rechnet „pro Frame 0,05 weiter“ (transform.Translate(0, 0.05f, 0); ohne deltaTime), der andere „3 pro Sekunde mal deltaTime“ (transform.Translate(0, 3f * Time.deltaTime, 0); mit deltaTime). deltaTime ist die Zeit seit dem letzten Frame in Sekunden: bei 60 Frames pro Sekunde etwa 0,0167, bei 15 etwa 0,0667. Das Diagramm zeigt den Weg über der Zeit. Jeder Frame ist eine Stufe der Treppe und ein Strich auf der Frame-Leiste unter der Zeitachse; der Abstand zweier Striche ist deltaTime. Eine gestrichelte Linie zeigt das Soll: 3 Einheiten pro Sekunde. Bei 60 Frames pro Sekunde liegen beide Treppen auf dieser Linie. Bei 15 Frames pro Sekunde schafft der Würfel ohne deltaTime nur ein Viertel des Wegs (seine Treppe ist flacher), bei 144 Frames das 2,4-Fache (steiler). Der Würfel mit deltaTime bleibt bei jeder Bildrate auf der Linie: wenige Frames heißt große Stufen, viele Frames kleine. Ein Ruckler (ein Frame dauert eine halbe Sekunde) lässt den Würfel ohne deltaTime zurückfallen; der mit deltaTime springt in einer Stufe 1,5 Einheiten hoch und ist wieder auf der Linie. Merksatz: Ohne deltaTime gilt die Bewegung pro Frame, mit deltaTime pro Sekunde.

tempo = 3;

// in Update()
y += tempo
  * Time
  .deltaTime;

Pro Sekunde

void Update()
{
    transform.Translate(0, 3f * Time.deltaTime, 0);
}

Ohne deltaTime gilt Bewegung pro Frame, mit deltaTime pro Sekunde.

deltaTime ist die Zeit seit dem letzten Frame. Wer damit multipliziert, bewegt Objekte pro Sekunde statt pro Frame.

Lasst euch die Zeilen erklären

„Erkläre Zeile für Zeile, was dieses Skript in jedem Frame tut. Ändere nichts.“