diff --git a/README.md b/README.md index d8283d6..81e8fde 100644 --- a/README.md +++ b/README.md @@ -4,21 +4,21 @@ |------|-------------------| | **Unity Hub** | Aktuelle Version installieren | | **Unity Editor** | **6000.2.1f1** (Unity 6) | -| **Git** (optional) | Zum Klonen und Abgeben des Repos | +| **Git** (optional) | Zum Klonen und Einreichen des Repos | -Beim ersten Öffnen lädt Unity Pakete nach (URP, Input System, Cinemachine, …). Das kann einige Minuten dauern. +Beim ersten Öffnen lädt Unity alle benötigten Pakete herunter (URP, Input System, Cinemachine, …). Das kann einige Minuten dauern. --- -## Projekt öffnen (wichtig!) +## Projekt öffnen -Das Unity-Projekt liegt **nicht** im obersten Git-Ordner, sondern hier: +Das Unity-Projekt befindet sich **nicht** im obersten Git-Ordner, sondern im Unterordner `MMI2-project/`: ``` mmi2-project/ ├── README.md ← diese Datei ├── .gitignore -└── MMI2-project/ ← DIESEN Ordner in Unity Hub öffnen +└── MMI2-project/ ← diesen Ordner in Unity Hub öffnen ├── Assets/ ├── Packages/ └── ProjectSettings/ @@ -26,15 +26,15 @@ mmi2-project/ **Unity Hub → Add → Ordner `MMI2-project` auswählen → Open** -Die Hauptszene zum Testen: +Die Hauptszene für das Testen: **`Assets/Scenes/PlaneScene.unity`** -Doppelklick in der Project-Ansicht, dann oben **Play ▶**. +Doppelklick in der Project-Ansicht, dann **Play ▶** drücken. --- -## So funktioniert das Spiel (Überblick) +## Spielablauf (Überblick) ```mermaid flowchart LR @@ -45,12 +45,12 @@ flowchart LR E --> F[Landebahn / Runway] ``` -1. Du startest im **Flugmodus** (`Flying`). -2. **`RingCourseTracker`** zählt, welche Ringe du in **fester Reihenfolge** durchflogen hast. -3. Nach dem letzten Ring erscheint in der **Console** die Aufforderung zu landen. -4. Mit dem **Asset „Simple Airplane Controller“** landest du über die **Runway** (Landezone). +1. Das Spiel beginnt im **Flugmodus** (`Flying`). +2. **`RingCourseTracker`** überwacht, welche Ringe in **fester Reihenfolge** durchflogen wurden. +3. Nach dem letzten Ring erscheint in der **Console** die Aufforderung zur Landung. +4. Das Flugzeug landet über die **Runway** des Assets „Simple Airplane Controller". -Fortschritt siehst du in der **Console** (Fenster: *Window → General → Console*), z. B.: +Den aktuellen Fortschritt zeigt die **Console** (Menü: *Window → General → Console*), z. B.: `[RingCourse] Ring 2/3 passed: Ring` @@ -61,34 +61,61 @@ Fortschritt siehst du in der **Console** (Fenster: *Window → General → Conso | Taste | Funktion | |-------|----------| | **W / S** oder **Pfeil hoch/runter** | Nicken (Pitch) | -| **A / D** oder **Pfeil links/rechts** | Rollen | +| **A / D** oder **Pfeil links/rechts** | Rollen (Roll) | | **Q / E** | Gieren (Yaw) | | **Linke Umschalttaste** | Turbo | -| **Leertaste** | Nach Landung: wieder starten (auf der Runway) | +| **Leertaste** | Nach der Landung: Flugzeug neu starten | -**Tipp:** Einmal in die **Game**-Ansicht klicken, damit die Tastatur im Spiel ankommt (nicht im Inspector). +**Hinweis:** Einmal in die **Game**-Ansicht klicken, damit Tastatureingaben im Spiel ankommen und nicht im Inspector landen. --- -## Wichtige Ordner in `Assets/` +## Ordnerstruktur in `Assets/` | Ordner / Datei | Inhalt | |----------------|--------| -| **`Scenes/PlaneScene.unity`** | Unsere Hauptszene (Flugzeug, Ringe, Terrain, …) | +| **`Scenes/PlaneScene.unity`** | Hauptszene (Flugzeug, Ringe, Terrain, …) | | **`Scripts/`** | Eigene Skripte für den Ring-Kurs (siehe unten) | -| **`HeneGames/Simple Airplane Controller/`** | Asset Store: Flugzeug, Physik, Kamera, Runway, Beispiel-Szenen | +| **`HeneGames/Simple Airplane Controller/`** | Asset-Store-Paket: Flugphysik, Kamera, Runway, Beispielszenen | | **`Settings/`** | URP-Grafikeinstellungen (Universal Render Pipeline) | --- +## Skripte + +### Eigene Skripte (`Assets/Scripts/`) + +| Skript | Aufgabe | +|--------|---------| +| **`RingCourseTracker.cs`** | Zentraler Kurs-Manager. Die Ringe werden im Inspector in der gewünschten Reihenfolge eingetragen. Das Skript verfolgt, welcher Ring als nächstes angeflogen werden muss, zählt den Fortschritt und gibt nach dem letzten Ring die Landeanweisung in der Console aus. | +| **`RingCheckpoint.cs`** | Sitzt auf jedem Ring-Objekt. Erkennt per Trigger, wenn das Flugzeug den Ring durchfliegt, und meldet dies an den `RingCourseTracker` – allerdings nur, wenn der Ring aktuell an der Reihe ist. Falsche Reihenfolge wird abgewiesen und protokolliert. Nach dem Durchfliegen wird der Trigger deaktiviert. | + +`RingCourseTracker` steuert den übergeordneten Spielablauf (Ringe zählen → Landen); `RingCheckpoint` ist für die Kollisionserkennung an jedem einzelnen Ring zuständig und leitet Treffer weiter. + +### HeneGames – Simple Airplane Controller (`Assets/HeneGames/.../Scripts/`) + +| Skript | Aufgabe | +|--------|---------| +| **`SimpleAirPlaneController.cs`** | Herzstück des Flugzeugs. Verarbeitet Eingaben, bewegt und rotiert das Flugzeug und verwaltet Turbo sowie Motoreffekte. Kennt drei Zustände: **Flying** (normaler Flug), **Landing** (automatische Landesequenz) und **Takeoff** (Start von der Runway). Bei einer Kollision mit Hindernissen wird ein Absturz ausgelöst. | +| **`SimpleAirplaneInput.cs`** | Liest Tastatureingaben aus und wandelt sie in Steuerwerte um (WASD, Pfeiltasten, Q/E, Shift). Nutzt primär das neue Unity Input System; bei Bedarf Fallback auf das Legacy-Input-System. | +| **`SimpleAirplaneCamera.cs`** | Steuert die Cinemachine-Verfolgungskamera. Verengt das Sichtfeld (FOV) beim Turbo für einen Geschwindigkeitseffekt, sperrt den Mauszeiger und wechselt nach einem Absturz den Kamera-Update-Modus. | +| **`SimpleAirPlaneCollider.cs`** | Trigger-Komponente an den Rumpfteilen des Flugzeugs. Meldet Kollisionen mit der Spielwelt an den Controller – Ringe und die Landezone werden dabei bewusst ausgenommen. | +| **`LandingArea.cs`** | Trigger am Eingang der Landebahn. Prüft, ob das Flugzeug aus der richtigen Richtung anfliegt, und übergibt es dann an die `Runway` – der Zustand wechselt auf **Landing**. | +| **`Runway.cs`** | Führt die Landung durch, indem das Flugzeug sanft zur Endposition geführt wird. Nach abgeschlossener Landung startet die **Leertaste** den Takeoff. Sobald das Flugzeug wieder fliegt, wird die Runway zurückgesetzt. | +| **`RunwayUIManager.cs`** | Zeigt optionale UI-Hinweise während der Landephase an (z. B. „Leertaste zum Starten"). In `PlaneScene` wird der Fortschritt primär über die Console ausgegeben. | + +Überblick über das Zusammenspiel: Tastatureingabe → `SimpleAirPlaneController` bewegt das Flugzeug → `SimpleAirplaneCamera` folgt → `RingCheckpoint`-Trigger melden Durchflüge an `RingCourseTracker` → nach dem letzten Ring leitet `LandingArea` die Landung ein → `Runway` führt sie aus. + +--- + ## Externes Asset: Simple Airplane Controller - Herkunft: [Asset Store – Simple Airplane Controller](https://assetstore.unity.com/packages/tools/game-toolkits/simple-airplane-controller-228575) -- Enthält: Flugzeug-Prefabs, **Runway**, Landezone, Sounds, Beispiel-Szenen unter `Example scenes/` -- Steuerung und Physik: `SimpleAirPlaneController.cs`, Eingaben über `SimpleAirplaneInput.cs` (Input System + Fallback) +- Enthält: Flugzeug-Prefabs, Runway, Landezone, Sounds und Beispielszenen unter `Example scenes/` +- Skript-Details: siehe Abschnitt **Skripte** oben -**Render Pipeline:** Projekt nutzt **URP** (Universal Render Pipeline). Materialien des Assets wurden auf URP-Shaders umgestellt (sonst **pinke** Objekte). +**Render Pipeline:** Das Projekt verwendet **URP** (Universal Render Pipeline). Die Materialien des Assets wurden auf URP-Shader umgestellt – ohne diese Anpassung erscheinen Objekte **pink**. --- -Bei Problemen oder Fragen gerne an mich per Mail an **tom.hempel@hs-coburg.de** wenden. \ No newline at end of file +Bei Fragen oder Problemen gerne eine Mail an **tom.hempel@hs-coburg.de**.