Files
breakpilot-lehrer/breakpilot-drive
Benjamin Boenisch 5a31f52310 Initial commit: breakpilot-lehrer - Lehrer KI Platform
Services: Admin-Lehrer, Backend-Lehrer, Studio v2, Website,
Klausur-Service, School-Service, Voice-Service, Geo-Service,
BreakPilot Drive, Agent-Core

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:47:26 +01:00
..

Breakpilot Drive - Unity Lernspiel

Ein Endless Runner Lernspiel fuer Kinder der Klassen 2-6 mit Quiz-Integration.

Uebersicht

  • Video-Version: Visuelles 3D-Spiel mit 3-Spur-Steuerung
  • Audio-Version: Barrierefreier Hoerspiel-Modus mit raeumlichem Audio
  • Quiz-Integration: Hybrid-Modus mit schnellen visuellen Fragen UND Denkpausen

Schnellstart (Docker)

# Game-Container starten (mit Backend)
docker-compose --profile game up -d

# Nur das Backend starten (fuer API-Tests)
docker-compose up backend -d

# Game oeffnen
open http://localhost:3001

Unity Projekt erstellen

Voraussetzungen

  • Unity 2022.3 LTS oder neuer
  • WebGL Build Support Modul installiert

Neues Projekt erstellen

# Unity Hub oeffnen und neues 3D Projekt erstellen
# Projektname: BreakpilotDrive
# Speicherort: /path/to/breakpilot-pwa/breakpilot-drive/Unity/

Empfohlene Projektstruktur

Unity/
├── Assets/
│   ├── Scripts/
│   │   ├── Core/
│   │   │   ├── GameManager.cs          # Spielzustand, Score
│   │   │   ├── DifficultyManager.cs    # Schwierigkeitsanpassung
│   │   │   └── AudioManager.cs         # Sound-Verwaltung
│   │   ├── Player/
│   │   │   ├── PlayerController.cs     # 3-Spur-Bewegung
│   │   │   └── PlayerInput.cs          # Touch/Keyboard Input
│   │   ├── Track/
│   │   │   ├── TrackGenerator.cs       # Endlose Strecke
│   │   │   ├── ObstacleSpawner.cs      # Hindernisse
│   │   │   └── VisualTrigger.cs        # Quiz-Trigger (Bruecke, etc.)
│   │   ├── Quiz/
│   │   │   ├── QuizManager.cs          # Quick/Pause-Modus
│   │   │   ├── QuestionDisplay.cs      # UI fuer Fragen
│   │   │   └── QuizAudio.cs            # TTS fuer Audio-Version
│   │   ├── Network/
│   │   │   ├── BreakpilotAPI.cs        # REST API Client
│   │   │   └── OfflineCache.cs         # Lokaler Fragen-Cache
│   │   └── UI/
│   │       ├── MainMenu.cs             # Startbildschirm
│   │       ├── GameHUD.cs              # Score, Leben
│   │       └── QuizOverlay.cs          # Frage-Anzeige
│   ├── Prefabs/
│   │   ├── Player/
│   │   │   └── Car.prefab              # Spieler-Auto
│   │   ├── Obstacles/
│   │   │   ├── Rock.prefab
│   │   │   └── Barrier.prefab
│   │   ├── Items/
│   │   │   ├── Star.prefab
│   │   │   ├── Coin.prefab
│   │   │   └── Shield.prefab
│   │   └── VisualTriggers/
│   │       ├── Bridge.prefab           # Loest Quick-Quiz aus
│   │       ├── House.prefab
│   │       └── Tree.prefab
│   ├── Audio/
│   │   ├── Music/
│   │   │   └── GameLoop.mp3
│   │   ├── SFX/
│   │   │   ├── Coin.wav
│   │   │   ├── Crash.wav
│   │   │   └── Correct.wav
│   │   └── Voice/
│   │       └── (TTS-generiert)
│   ├── Scenes/
│   │   ├── MainMenu.unity
│   │   ├── Game_Video.unity
│   │   └── Game_Audio.unity
│   └── WebGLTemplates/
│       └── Breakpilot/
│           └── index.html              # Custom WebGL Template
├── Packages/
│   └── manifest.json
└── ProjectSettings/
    └── ProjectSettings.asset

API-Endpunkte

Das Backend stellt folgende Endpunkte bereit:

Lernniveau

GET /api/game/learning-level/{user_id}
→ { overall_level: 1-5, math_level, german_level, english_level }

Schwierigkeit

GET /api/game/difficulty/{level}
→ { lane_speed, obstacle_frequency, question_complexity, answer_time }

Quiz-Fragen

GET /api/game/quiz/questions?difficulty=3&count=10&mode=quick
→ [{ id, question_text, options, correct_index, visual_trigger, time_limit_seconds }]

GET /api/game/quiz/questions?difficulty=3&count=5&mode=pause
→ [{ id, question_text, options, correct_index }]

Visuelle Trigger

GET /api/game/quiz/visual-triggers
→ [{ trigger: "bridge", question_count: 2, difficulties: [1,2] }]

Session speichern

POST /api/game/session
{ user_id, game_mode, duration_seconds, score, questions_answered, questions_correct }
→ { session_id, status, new_level? }

WebGL Build erstellen

  1. Unity oeffnen → File → Build Settings
  2. Platform: WebGL auswaehlen
  3. Player Settings:
    • Compression Format: Gzip
    • Decompression Fallback: Aktiviert
    • WebGL Template: Breakpilot (custom)
  4. Build → Zielordner: breakpilot-drive/Build/

Nach dem Build:

# Docker Container neu bauen
docker-compose --profile game build breakpilot-drive

# Container starten
docker-compose --profile game up -d breakpilot-drive

Quiz-Modus Implementierung

Quick Mode (waehrend der Fahrt)

// Wenn Spieler sich einem VisualTrigger naehert
public class VisualTrigger : MonoBehaviour
{
    public string triggerType; // "bridge", "tree", etc.

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            // Frage anzeigen, Spiel laeuft weiter
            QuizManager.Instance.ShowQuickQuestion(triggerType);
        }
    }
}

Pause Mode (Spiel pausiert)

// Alle X Meter/Punkte eine Denkaufgabe
public class QuizManager : MonoBehaviour
{
    public void ShowPauseQuestion()
    {
        Time.timeScale = 0; // Spiel pausieren
        // Komplexe Frage anzeigen
        // Nach Antwort: Time.timeScale = 1;
    }
}

Entwicklungs-Workflow

  1. Lokal entwickeln: Unity Editor mit Play-Modus
  2. API testen: docker-compose up backend -d
  3. WebGL testen: Build erstellen, Container starten
  4. Commit: Git-Aenderungen committen (ohne Build-Artefakte)

Bekannte Einschraenkungen

  • Unity WebGL unterstuetzt kein natives Audio-Recording (fuer Sprachsteuerung)
  • Mobile Browser haben unterschiedliche Touch-Implementierungen
  • WASM-Dateien koennen gross werden (>50MB) - Kompression wichtig

Ressourcen