Was eine Engine tut
Die Spielschleife, unsere Arbeitsweise und das erste Objekt, das sich bewegt.
Alles steht auf der 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
- Von Hand im Editor: Objekte, Komponenten, später Knoten im Graphen
- Code lesen: verstehen, was ein Skript in jedem Frame tut
- 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
- Eingabe lesen
- Zustand ändern
- 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
- Beschreiben, was passieren soll
- Bauen
- Spielen
- Prüfen, was sich geändert hat
- 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
- Worum geht es in eurem Spiel?
- Wie handelt das Spiel davon?
- Wofür belohnt es die Spielenden?
Bis zum 23.10.
- Pitch: zwei Minuten, mit Folie, Referenzbildern und Spielreferenzen
- Eine Seite: zwei Alternativen, das angestrebte Erlebnis, warum diese Idee
- Eine Designfrage, die sich testen lässt, und ein Satz zur Kernmechanik
- 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
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.“