1 of 63

FINALE PRÄSENTATION

Florian Eder • Andreas Fuchs • Philip Schimmelpfennig • Dominik Schnell

2 of 63

3 of 63

Inhalt

  1. Level / Aufbau
  2. Technik
  3. Visuals & Optimierung
  4. Wichtige Skripte
  5. Projektverlauf
  6. Prototypen

4 of 63

1.

Level / Aufbau

5 of 63

Allgemeines: Visuelle Darstellung

  • Abwechslungsreiche Raumgestaltung
  • Vermittlung verschiedenste virtuelle Möglichkeiten
    1. Enge, Weite, Höhe und Tiefe
    2. Räumliche Orientierung
    3. Gewollte surreale Desorientierung
    4. Helligkeit und Dunkelheit
  • Level-Reihenfolge nutzt die verschiedenen Konzepte gezielt,�um deren Wirkung zu erhöhen

6 of 63

Allgemeines: Interaktionsmöglichkeiten

  • Abwechslungsreiche Interaktionsgestaltung
  • Level-Reihenfolge bringt dem Spieler die Interaktionen aufeinander aufbauen bei
  • Bereits erlernte Mechaniken werden in höheren Leveln erneut benötigt
  • Die Bewegungsmöglichkeiten / -notwendigkeiten, werden Level-weise erweitert, so wird der Spieler langsam an den virtuellen Raum gewöhnt

7 of 63

Der Aufzug

  • Fahrstuhl lässt sich durch grünen Knopf hoch und durch roten Knopf runter fahren
  • Freigabe des grünen Knopfes nach Lösung der Aufgabe des jeweiligen Levels
  • Ziel
    • Vermittlung des Höheneffekt im Turm
    • Vertikale Bewegung um Motion-Sickness gering zu halten
    • Eingeschränkte Bewegung, damit anfangs keine Teleportation nötig ist

8 of 63

Der Aufzug

  • Glasboden für den Höheneffekt
  • Höheneffekt verstärkt sich mit dem Levelfortschritt

  • Ziel
    • Vermittlung des Höheneffekt im Turm
    • Steigerung der Immersion

9 of 63

Der Aufzug

  • Ausführen von Aktionen, wenn der Aufzug in ein Level hinein oder heraus fährt
    • Initiale Generierung des Levels
    • Zurücksetzen des Levels
    • Auslösen von Animationen

10 of 63

Startraum

  • Minimale Einführung in die Interaktion mit der virtuellen Welt
  • Ein Partikelstrom zieht am Spieler vorbei, den Fahrstuhl hinauf. Dadurch wird dem Spieler vermittelt, welchen Weg er einschlagen soll
  • Regenbogene Farbwahl der Rückwand �des Raumes steht für die Varianz der �verschiedenen Level

11 of 63

Startraum

  • Aufgabe des Spielers ist es, den grünen Knopf auf dem Fahrstuhl Board zu drücken um ins erste Level zu kommen
  • Diese Interaktion erfordert den Einsatz eines Fingers
  • Feedback: Animation, Sound

12 of 63

Level 1: Würfelstapeln

  • Der Spieler soll die bunten Türme nachbauen
  • Der Aufbau der Türme ist vorgegeben und wird für jeden Spieldurchlauf prozedural generiert
  • Bunte Würfel befinden sich in der Schütte an der Wand
  • Bei richtigem Aufbau des jeweiligen Turms wird die Signallampe grün

13 of 63

Level 1: Würfelstapeln

  • Auf die minimale Interaktion vom Startraum aufbauend soll nun das erste Mal mit Objekten der virtuellen Welt interagiert werden
  • Hierfür sollen die Würfel gegriffen und abgelegt werden um die Farben der Türme nachzubauen

14 of 63

Level 1: Würfelstapeln

  • Visualisierung von interaktiven Objekten wird klar (Hervorhebung & haptisches Feedback)
  • Hände interagieren physikalisch korrekt mit bewegten Objekten
  • Tisch fährt zum Spieler, damit dieser sich, zu Begin der VR-Erfahrung wenig Bewegen muss

15 of 63

Level 2: Dosenwerfen

  • Objekte müssen nach dem Greifen geworfen werden
  • Siegbedingung ist das Herunterwerfen aller Becher
  • Ballrinne wird immer wieder mit neuen Bällen befüllt
  • Ballrinne vermittelt ein Sicherheitsgefühl vor dem Abgrund, in den der Spieler blickt

16 of 63

Level 2: Dosenwerfen

  • Bälle haben elastisches Material
  • Interagieren physikalisch korrekt mit Handflächen/Zeigefingern
  • Gegenstände werden gehighlighted (leichtes Leuchten), wenn sie in greifbare Nähe gelangen
  • Haptisches Feedback beim Greifen
  • Akustisches Feedback beim Greifen und Loslassen

17 of 63

Level 3: Der heiße Draht

  • Geschicklichkeitsspiel
  • Adressiert präzise Interaktion mit den Objekten aus der virtuellen Welt
  • Mit der Kelle die Kegel abfahren
  • Start bei leuchtendem Stück

18 of 63

Level 3: Der heiße Draht

  • Bei einem Fehler fallen alle Kegel zu Boden
  • Ziel ist es, alle Kegel der Reihenfolge nach zu durchfahren

19 of 63

Level 4: Torwart-Maschine

  • Farbschema des Raumes verändert sich
  • Entspricht die Farbe des Balls der des�Raumes, muss er durchgelassen werden,�ansonsten muss er abgefangen werden
  • Score wird über Ballschussgerät angezeigt
  • Ziel:
    • Spieler zum Bewegen animieren
    • Reaktionsschnelligkeit auf die Probe stellen

20 of 63

Teleporter-Flur

  • Erste Einführung der Technik der Teleportation
  • Ganzer Flur ist Teleport-Area
  • Teleport mittels Sekundär-Tasten (B + Y)
  • Nach Durchschreiten des Flurs ist Raum geschafft

21 of 63

Level 5.1: Minigolf

  • Bälle müssen mit dem Schläger in die Bahnlöcher geschlagen werden
  • Erst bei Kollision der Bälle mit den Löchern werden:
    • Die Flächen für den Teleport freigeschaltet um sich weiter durch das Level zu bewegen
    • Die Funktion der �Schiebetüren aktiviert

22 of 63

Level 5.1: Minigolf

  • Entfernt sich der Ball zu weit vom Spielfeld, wird er zurückgesetzt
  • Beim Betreten des Levels wird das Spiel zurückgesetzt
  • Geriet der Schläger in den Graben, wird er ebenfalls zurückgesetzt

23 of 63

Level 5.2: Weltraum

  • Mittels Teleport-Strahl muss der Spieler den Weg durch das Dunkel finden
  • Nur durch die Wahl des richtigen Weges erreicht der Spieler die andere Tür
  • Ziel
    • Gezielte surreale Weltgestaltung (desorientierend)
    • Vermittelt Weite und Tiefe

24 of 63

Level 5.3: Minigolf

  • Erst bei Kollision des Balls mit dem Bahnloch, wird das finale Tor hochgezogen und gibt das Ziel für den Spieler frei
  • Bäume vermitteln das Gefühl, man könne sich den Kopf stoßen

25 of 63

Ziel

26 of 63

Spielewelt

  • Darstellung der kompletten Spielwelt
  • Alle Level sind im Schlauchsystem miteinander verbunden
  • Keine Ladezeiten zwischen den Leveln
  • Unterbrechungsfreies VR-Erlebnis

27 of 63

2.

Technik

Hände, Prozedurale Generierung und Animatoren

28 of 63

Hände

  • Volle Unterstützung der Oculus Quest Controller Inputs:
    • Touch-Erkennung für Daumen und Zeigefinger
    • Stufenlose Animation via Trigger für Zeige- und Mittelfinger
  • Physikalische Interaktion mit losen Objekten über Handflächen und Zeigefinger

29 of 63

Farbkombinationen Würfelstapeln

  • Prozedural generierte Farbkombinationen
  • Würfel werden eingefärbt und schwebend an Wand platziert
  • Würfel zur Interaktion werden in Schütte platziert
  • Beim erneuten Betreten des Raums wird ein neues Spiel generiert

30 of 63

Position / Ausrichtung der Kegel

  • Anordnung der schwebenden Kegel im Kreis (Kreisbahn-Berechnung)
  • Höhenverschiebung durch Perlin-Noise-Berechnung
  • Interpolierter Zufall zur prozeduralen Generierung immer neuer Wellenformen
  • Ziel: Wiederspielbarkeit

31 of 63

Position der Kegel

  • Neue Anordnung bei jedem Betreten des Raums
  • Sind die Kegel zu Boden gefallen, werden sie nach einer Verzögerung zurückgesetzt
  • Schwebeeffekt zu einem neuen Verlauf

32 of 63

Torwart-Maschine

  • Zufällige Farbe von Raum und Bällen
  • Generieren einer zufälligen Zielposition um den Standpunkt des Spielers herum, die die Flugbahn der Bälle bestimmt
  • Shooter rotiert um Spieler
  • Scoreboard zeigt Anzahl richtiger und falscher Interaktionen an

33 of 63

Animatoren

  • Animationssteuerung
    • Bewegung
    • Leuchten
    • Emission-Effekte
  • Zustandsüberwachung
  • Aktivierung und Deaktivierung von interaktiven Elementen

34 of 63

3.

Visuals & Optimierung

35 of 63

Realistische Beleuchtung

  • Global Illumination
  • Auf statischen Objekten
  • Pre-Rendered und Texture-Baked um Performance zu optimieren

  • Ziel:
    • Erhöhung der Immersion
    • Performance-Optimierung

36 of 63

Realistische Beleuchtung

  • Light Probes
  • Vorberechnete Beleuchtungsbereiche für Global-Illumination-Effekte�auf bewegten Objekten

  • Ziel:
    • Erhöhung der Immersion
    • Performance-Optimierung

37 of 63

Realistische Beleuchtung

  • Reflection Probes
  • Vorberechnete Reflektionen für die Oberfläche bewegter Objekte

  • Ziel:
    • Erhöhung der Immersion
    • Performance-Optimierung

38 of 63

Individuelle 3D-Modelle

  • Individuelle 3D-Modelle
  • Gezielte Raumgestaltung um das Spielerlebnis zu gestalten
    • Enge und Weite
    • Höhe und Tiefe

  • Ziel:
    • Erhöhung der Immersion
    • Visuell befriedigende Welten
    • Realisierung der Spieleideen

39 of 63

4.

Wichtige Skripte

40 of 63

Interaktionen mit dem Controller

  • Grip-Button: Greifen
  • Joystick links u. rechts: Drehung nach links u. rechts
  • Sekundär-Button (Y u. B): Teleportation
  • Gestikulieren mit Zeigefinger, Mittelfinger und Daumen durch Druckerkennung am Controller

41 of 63

GameManager

GameManager

(Skripts/GameManager/GameManager.cs)

Verantwortungsgebiet

  • Speicherung Spielstände
  • Speicherung des aktuellen Raums
  • Triggern der Aufzüge

Zusammenarbeit mit

  • AudioManager
  • CubeStackManager
  • HotwireManager
  • BucketChallengeManager
  • GoalkeeperManager
  • MinigolfManager

private int UpdateGameState(ElevatorTarget elevatorTarget,

int valueToIncrement) {

if (!roomGameStates.ContainsKey(elevatorTarget))

roomGameStates.Add(elevatorTarget, valueToIncrement);

int newValue;

int currentCount;

roomGameStates.TryGetValue(elevatorTarget, out currentCount);

if (currentCount + valueToIncrement <= 0) {

roomGameStates[elevatorTarget] = 0;

newValue = 0;

} else {

roomGameStates[elevatorTarget] = currentCount + valueToIncrement;

newValue = currentCount + valueToIncrement;

}

return newValue;

}

42 of 63

AudioManager

AudioManager

(Skripts/Audio/AudioManager.cs)

Verantwortungsgebiet

  • Abspielen von Hintergrundmusik
  • Verwalten von Hintergrundmusik
  • Abspielen von Effektmusik
  • Verwalten von Effektmusik
  • Abspielen von Spracheinblendungen
  • Verwalten von Spracheinblendungen

Zusammenarbeit mit

  • GameManager

IEnumerator fadeAudio(string clipToPlay)

{

if (MusicSource.isPlaying)

{

while (MusicSource.volume > 0)

{

MusicSource.volume -= fadeSpeed * Time.deltaTime;

yield return null;

}

MusicSource.Stop();

}

MusicSource.volume = initalVolume;

foreach (AudioClip clip in musicFiles)

{

if (clip.name == clipToPlay)

{

MusicSource.clip = clip;

MusicSource.Play();

}

}

}

43 of 63

BucketChallengeManager

BucketChallengeManager

(Skripts/BucketChallenge/BucketChallengeManager.cs)

Verantwortungsgebiet

  • Bereitstellen von Reset Methode für Bucket Challenge Raum

Zusammenarbeit mit

  • GameManager

public void Reset()

{

for (int i = 0; i < buckets.Count; i++)

{

buckets[i].transform.position = vecsBuckets[i];

buckets[i].transform.rotation = rotsBuckets[i];

buckets[i].GetComponent<Rigidbody>().velocity = Vector3.zero;

}

for (int i = 0; i < balls.Count; i++)

{

// just reset ball if its fallen down

if(balls[i].transform.position.y < vecsBalls[i].y - 0.2F)

{

balls[i].transform.position = vecsBalls[i];

balls[i].transform.rotation = rotsBalls[i];

balls[i].GetComponent<Rigidbody>().velocity = Vector3.zero;

}

}

}

44 of 63

CubeStackManager

CubeStackManager

(Skripts/CubeStack/CubeStackManager.cs)

Verantwortungsgebiet

  • Bereitstellen von Funktionen zum Generieren von CubeStack Raum
  • Bereitstellen von Funktionen zum Reset von CubeStack Raum
  • Rückmeldung des Spielstands an GameManager
  • Abspielen von raumspeziefischen Soundeffekten

Zusammenarbeit mit

  • GameManager
  • CubeStackHandler
  • AudioManager

public void Solved()

{

audioManager.playEffect("elevatorUnlock");

gameManager.ChangeGameStateForRoom(ElevatorTarget.CubeStack, 1);

}

public void Wrong()

{

audioManager.playEffect("goalkeeperError", 0.5f);

}

public void GenerateStack()

{

cubeStackHandler.GenerateStack();

}

internal void SpawnNewCubes()

{

cubeStackHandler.spawnCubesInBox();

}

45 of 63

CubeStackHandler

CubeStackHandler (Skripts/CubeStack/CubeStackHandler.cs)

Verantwortungsgebiet

  • Generierung des CubeStack Raums
  • Zurücksetzen von CubeStack Raum
  • Überprüfen der Win-Condition für CubeStack Raum

Zusammenarbeit mit

  • GameManager
  • AudioManager

public void ResetCubeStack()

{

cubesToCreate.Clear();

foreach (GameObject go in usedColliderGameObjectsByParent.Keys)

{

go.SetActive(false);

Destroy(usedColliderGameObjectsByParent[go]);

}

usedColliderGameObjectsByParent.Clear();

foreach (GameObject sl in successLights) {

sl.SetActive(false);

Destroy(sl);

}

successLights.Clear();

foreach (GameObject go in examplesOnWall) {

go.SetActive(false);

Destroy(go);

}

examplesOnWall.Clear();

cubeSpawner.ResetElements();

}

46 of 63

ElevatorHandler

ElevatorHandler (Skripts/Elevator/ElevatorHandler .cs)

Verantwortungsgebiet

  • Bewegung des Fahrstuhls
  • Aktivierung / Deaktivierung von Fahrstuhl Knöpfen

Zusammenarbeit mit

  • GameManager

public void UpElevator()

{

if (actRoom == roomTargetPositions.Count) return;

if (!GameManager.DebugMode)

anim.SetBool("up_button_active", false);

elevatorState = ElevatorState.upMoving;

if (actRoom < roomTargetPositions.Count - 1)

actRoom++;

targetPostion = roomTargetPositions[actRoom];

engineSound.Play();

playerHandsVisible(false);

StartCoroutine(MoveElevatorToPosition(

movingPart.transform,

targetPostion, speed));

StartCoroutine(

MovePlayerToPosition(

player.transform,

targetPostion, speed));

}

47 of 63

GoalkeeperManager

GoalkeeperManager

(Skripts/Goalkeeper/GoalkeeperManager .cs)

Verantwortungsgebiet

  • Shooter aktivieren (Rotieren u. Feuern)
  • Farbwechsel von Raum u. Bällen steuern
  • Gefangene/durchgelassene Bälle zählen�und Score auf der UI anzeigen
  • Raum resetten

Zusammenarbeit mit

  • GameManager
  • AudioManager

private void StartRoom()

{

Debug.Log("StartRoom");

rotate = true;

ScoreRight.SetText("{0}/{1}", rightCount, winAmount);

ScoreWrong.SetText("{0}/{1}", wrongCount, looseAmount);

colorChangingCoroutine = StartCoroutine(ColorChangingCoroutine());

targetMovingCoroutine = StartCoroutine(TargetMovingCoroutine());

shootingCoroutine = StartCoroutine(ShootingCoroutine());

}

48 of 63

HotwireManager

HotwireManager

(Skripts/Hotwire/HotwireManager .cs)

Verantwortungsgebiet

  • Bereitstellung der Resetfunktion für GameManager

Zusammenarbeit mit

  • GameManager
  • HotwireGenerator

public HotwireGenerator hotwireGenerator;

public void ResetAll()

{

hotwireGenerator.ResetAll();

}

49 of 63

HotwireGenerator

HotwireGenerator

(Skripts/Hotwire/HotwireGenerator .cs)

Verantwortungsgebiet

  • Generierung des Hotwire im Hotwire Raum
  • Zurücksetzen der Hotwire
  • Überprüfung der Win-Condition
  • Überprüfung der Lose-Condition
  • Rückmelden von Win-Condition an GameManager
  • Ausführen von Effekten des Hotwire

Zusammenarbeit mit

  • GameManager
  • AudioManager

internal void ResetAll()

{

interactable.transform.position = interactableInitialPosition;

interactable.transform.rotation = interactableInitialRotation;

interactable.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;

interactable.GetComponent<Rigidbody>().velocity = Vector3.zero;

CreateHotwire();

}

50 of 63

MinigolfHoleCollider

MinigolfHoleCollider

(Skripts/Minigolf/MinigolfHoleCollider .cs)

Verantwortungsgebiet

  • Rückmeldung von Win-Condition an GameManager

Zusammenarbeit mit

  • GameManager

private void OnTriggerEnter(Collider other)

{

if (!other.CompareTag("Minigolfball"))

return;

GameManager.GetInstance().ChangeGameStateForRoom(

ElevatorTarget.MiniGolf, 1);

}

private void OnTriggerExit(Collider other)

{

if (!other.CompareTag("Minigolfball"))

return;

GameManager.GetInstance().ChangeGameStateForRoom(

ElevatorTarget.MiniGolf, -1);

}

51 of 63

5.

Projektverlauf

52 of 63

Projektablauf

  • M1: 25.06.2020 - Erste Tech-Demo
    • in VR laufende Konzept-Demo
    • rudimentäre Umsetzung der ersten VR-Mechaniken
    • Basisstruktur (Test für Sound, Level-Generierung laufen)
    • Mood: Optik und Sound festgelegt
  • M2: 30.07.2020 - Alpha-Version
    • Implementierung aller Basisfunktionen
    • Audiomixer zur Sound-implementierung (Schnittstelle für Soundeffekte)
  • M3: 27.08.2020 - Beta-Version
    • spielbare Demo mit Look-And-Feel der finalen Version
    • implementierung aller Spielmechaniken
    • Musik und Sound
  • M4: 24.09.2020 - Finale Version

53 of 63

Aufgabenverteilung (geplant)

Wochen

Dominik

Florian

Philip

Andreas

11.06.2020

Discover Unity

Unity einrichten

Programmierung + Scripting lernen

Tests / Entscheidung

Render Pipeline

18.06.2020

Transfer first samples to Oculus Quest.

Transfer first samples to Oculus Quest.

Shader-Programmierung ansehen

Avatar Einbinden

25.06.2020

M1: Techdemo - Erste Tech-Demo, Aufsetzen des Entwicklungs-Stacks

02.07.2020

Rudimentäres Raumkonzept

für 2 Räume

Rudimentäres Raumkonzept

für 2 Räume

Rudimentäres Raumkonzept

für für 2 Räume

Rudimentäres Raumkonzept

für 2 Räume

09.07.2020

Implementierung Greifen

(Demo-Raum)

Implementierung Werfen

(Demo-Raum)

Implementierung Kamera Kollision

(Demo-Raum)

Implementierung Fortbewegung

(Demo-Raum)

16.07.2020

Rudimentäres Design

für 2 Räume

Rudimentäres Design

für 2 Räume

Rudimentäres Design

für 2 Räume

Design

für 2 Räume

23.07.2020

Klausurphase

54 of 63

Aufgabenverteilung (geplant)

30.07.2020

M2: Alpha - Implementierung aller Basisfunktionen

Wochen

Dominik

Florian

Philip

Andreas

06.08.2020

Design Raum für 2 Räume verbessern

Design Raum für 2 Räume verbessern

Urlaub 06.08. bis 13.08.

Urlaub 08.08. bis 15.08.

13.08.2020

Funktionen in 2 Räume verbessern

Funktionen in 2 Räume verbessern

Design Raum für 2 Räume verbessern

Funktionen für 2 Räume verbessern

20.08.2020

Verbindung zwischen Räumen herstellen

Verbindungsanimation, Background-Loading, Objekt-Instanzierung

Storytelling / User Interface

Tutorial System (Schrift evtl. Gesprochen), Menüs (Start, Pause, Fortschritt)

27.08.2020

M3: Beta - Spielbare Demo mit Look-And-Feel der finalen Version

03.09.2020

Feinschliff

Refactor, Code-Cleanup, Debugging

Feinschliff

Sound-Design, Visuelle Präsentation, Postprocessing

10.09.2020

Klausurphase

Feinschliff allgemein

Klausurphase

17.09.2020

Vorbereitung Präsentation: Power-Point Dokumentation / Videopräsentation (Spieletrailer)

24.09.2020

M4: Finale Abgabe - Präsentation / Videoabgabe der finalen Version

30.09.2020

Deadline

55 of 63

Ablauf (tatsächlich)

Wochen

Dominik

Florian

Philip

Andreas

11.06.2020

Konzepte für Raumideen entwickeln (8h)

Unity einrichten (5h)

Unity und Oculus Software installieren (4h)

Oculus Quest, Unity Setup Tests: Versionen, Plugins, Einstellungen

(15 h)

18.06.2020

Unity einrichten (5h)

Oculus Link Einrichtung (3h)

Unity einrichten & Plugins installieren (2h)

Oculus Quest, Render-Pipeline-Tests (15h)

25.06.2020

M1: Techdemo - Erste Tech-Demo, Aufsetzen des Entwicklungs-Stacks

02.07.2020

Greifen und Werfen mit der Oculus Quest (im Hinblick auf Becherwurf-Raum) (12h)

Rudimentäres Raumkonzept

für Hotwire Raum (15h)

Konzept für 2 Räume entwerfen (Planken-/Torwartspiel) (4h)

Konzept für Gesamtlook der Spielwelt, Testraum zum experimentieren (15h)

09.07.2020

Raumkonzept

für Becherwurf-Raum (18h)

Funktionen Hotwire Raum (15h)

Import der Sample-Rooms, Umgang mit Unity lernen (12h)

Entwurf CubeStack (5h)

16.07.2020

Raumkonzept

für Minigolf-Raum (18h)

Experimente mit XR-Rig Physik für Planken-Spiel (16h)

Rendering: Light Probes, Reflection Probes, Lightmaps (25h)

23.07.2020

Klausurphase

56 of 63

Ablauf (tatsächlich)

30.07.2020

M2: Alpha - Implementierung aller Basisfunktionen

Wochen

Dominik

Florian

Philip

Andreas

06.08.2020

Funktionen für Minigolf-Raum und Becher-Werfen (Win-Conditions, Reset Manager, Gravities, Teleport-System) (40h)

Funktionen für Hotwire, CubeStack, Minigolf (60h)

Urlaub 06.08. bis 13.08.

Urlaub 08.08. bis 15.08.

13.08.2020

Unity Scripting mit Planken- u. Torwartspiel-Demo lernen (24h)

Logik: Fahrstuhl, Modellierung (Räume, Minigolfbahnen) (immersives Design) (40h)

20.08.2020

Urlaub 29.08. bis 03.09.

Torwart-Spiel mit neuen Assets implementieren (36h)

Logik: Hotwire, CubeStack, Minigolf, Türen, Musik (30h)

27.08.2020

M3: Beta - Spielbare Demo mit Look-And-Feel der finalen Version

03.09.2020

Drehbucherstellung für das Tutorial-System / Einleitung des Spielers in die Level (14h)

Funktionen CubeStack, Sounds, Manager Klassen (20h)

Neue Hände einfügen, Hand-Skripte programmieren, Interaktions-Experimente (40h)

Logik: AudioManager, Sound, Interaktionsdesign (Schalter, Feedbacksystem) (45h)

10.09.2020

Klausurphase

17.09.2020

Aufnahme für Tutorial-System (10h) / Bugfixing (8h)

Bugfixing (40h)

Ton-Aufnahmen für Tutorialsystem u. Bugfixing (12h)

Visuals, Lighting, GI, Logic: Animatoren, Animationen, Buxfixing (40h)

24.09.2020

Audio-Management / -Aufnahme für Tutorial-System (8h) / Präsentation (12h)

Präsentation (8h)

Bugfixing u. Präsentation vorbereiten (8h)

Präsentation, Video, Dokumentation (15h)

Summe

153h

166h

158h

245h

57 of 63

Commit-Historie

Contributions to dev, excluding merge commits

Zeitlicher Verlauf des Git-Repository

58 of 63

Fazit

  • Sehr viel Zeitbedarf durch Online-Lehre
    • Dadurch Verschiebung von Zeitplan
  • Hoher Zeitbedarf zur Einarbeitung
  • Hoher Zeitbedarf für Hand Interaktionen
  • Debugging schwierig
    • Oculus Link sehr Fehleranfällig
    • Oculus Link benötigt bestimmte Grafikkarten
    • Oculus Quest hängt sich oft auf

59 of 63

6.

Prototypen

60 of 63

Prototyp Minigolf

61 of 63

Prototyp Becher Werfen

62 of 63

Prototyp Becher Werfen 2

63 of 63

YouTube: Link zum Video

https://youtu.be/OCFttI5Osr4

Florian Eder

Andreas Fuchs

Dominik Schnell

Philip Schimmelpfennig