Major Projekt

Transcription

Major Projekt
Major Projekt
Module Number:
SAE 610
Block Name:
Major Projekt
Date Submitted:
27.02.2014
Award Name:
BSc (Hons.) Games
Programming
Course:
BGP 1012
Name:
Linus Meng
City:
Hamburg
Country:
Germany
Staffing:
Jan-Friedrich Conrad &
Henning Fischer
Module Leader:
Henning Fischer
Word Count:
8200
Weight:
65% Theoretical / 35% Practical
Bachelor Arbeit
Linus Meng
BGP 1012
16973
Entwicklung von 3D Grafical-User-InterfaceElementen in der Unity 3D Game Engine in
Kombination mit der Virtual-Reality-Brille Oculus
Rift.
SAE Institute Hamburg
ii
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Inhaltsverzeichnis:
Inhaltsverzeichnis: ............................................................................................. iv
Abbildungsverzeichnis ....................................................................................... vi
Eigenständigkeitserklärung ............................................................................... vii
1. Einleitung ........................................................................................................8
1.1 Title ...........................................................................................................8
1.2 These ........................................................................................................8
1.3 Virtual Reality ............................................................................................8
1.4 Die ersten Geräte1 ...................................................................................10
1.4.1 Oculus Rift ........................................................................................11
1.4.2 Omni .................................................................................................12
1.4.3 PrioVR ..............................................................................................13
2. Grundlagen ...................................................................................................15
2.1 Grafical User Interface.............................................................................15
2.2 Oculus Rift Unity 3D Integration ..............................................................15
2.3 Microsoft Visual Studio2...........................................................................19
2.4 Game Engine ..........................................................................................22
2.5 Versionierungsdienst ...............................................................................23
2.6 Raycast3 ..................................................................................................24
3. Methodik....................................................................................................25
3.1 Evaluationsmethode................................................................................25
3.1.1 Kognitiver Walkthrough.....................................................................26
3.1.2 Zielgruppe der Evaluationsmethode .................................................27
3.1.3 Methodenanwendung .......................................................................28
3.2 Beschreibung der Methoden zur Entwicklung der GUI-Elemente............30
3.2.1 Methode eins - Raycast und Objekt ..................................................30
3.2.2 Methode zwei - Raycast und GUI Elemente .....................................30
3.3 Vergleich der Methoden ..........................................................................31
3.3.1 Methode eins - Raycast und Objekt ..................................................31
iv
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
3.3.2 Methode zwei - Raycast und GUI-Elemente .....................................32
3.3.3 Zusammenfassung der Vor- und Nachteile.......................................33
4. Durchführung ................................................................................................34
4.1 Versionierungsdienst ...............................................................................34
4.2 Unity 3D...................................................................................................35
4.3 Oculus Rift Unity 3D Integration ..............................................................35
4.3.1 Raycast und 3D-Objekte...................................................................36
4.3.2 Raycast und GUI-Elemente ..............................................................40
5. Ergebnisse ....................................................................................................42
5.1 Ergebnisse ..............................................................................................42
5.2 Evaluationen............................................................................................43
6. Zusammenfassung und Fazit........................................................................45
6.1 Grundlagen..............................................................................................45
6.2 Methodik..................................................................................................46
6.3 Durchführung...........................................................................................47
6.4 Ergebnisse und Evaluationen..................................................................49
Literaturverzeichnis............................................................................................. li
Anhang .............................................................................................................. lii
Anhang auf CD .................................................................................................. lii
v
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Abbildungsverzeichnis
Abb. 1: Sensorama von Mortan Heilig, www.telepresence.org (2002) ……………… 10
Abb. 2: Oculus Rift von OculusVR, www.oculusvr.com/ (2014) ……………………….11
Abb. 3: Omni von Virtuix, http://www.virtuix.com/ (2013)………………………………..13
Abb. 4: Sensoren im PrioVR, http://www.priovr.com/ (2014)………………………….. 14
Abb. 5: Tastaturbelegung für die Oculus Rift – Unity 3D Integration,
OculusUnityIntegrationGuide.pdf (2013) – siehe Anhang ………………….. 16
Abb. 6: Konfigurationsmenu, Linus Meng (22.02.2014) ……………………………….. 18
Abb. 7: Sinus Milieu in Deutschland, www.sinus-institut.de (2013) …………………... 27
Abb. 8: Funktion CastRayRightEye(), Linus Meng (22.02.2014) ……………………… 37
Abb. 9: Funktion OnRayCastHit(), Linus Meng (22.02.2014) ………………………..... 38
Abb. 10: Raycast und 3D Objekt, Linus Meng (22.02.2014)…………………………… 39
Abb. 11: Splinter Cell Double Agent, https://www.youtube.com/watch?v=ROoIYGypsN4 (2013) …………………………………………………………… 40
vi
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Eigenständigkeitserklärung
Hiermit bestätige ich, dass ich die vorliegende Arbeit selbständig verfasst und keine
anderen als die angegebenen Hilfsmittel benutzt habe. Die Stellen der Arbeit, die
dem Wortlaut oder dem Sinn nach anderen Werken (dazu zählen auch
Internetquellen) entnommen sind, wurden unter Angabe der Quelle kenntlich
gemacht.
vii
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
1. Einleitung
Der Zweck vieler Spiele ist es, den Verbraucher zu unterhalten. Um eine Bewertung für
ein Spiel abzugeben, werden meistens verschiedene Kriterien verwendet, wie zum
Beispiel Grafik, Ton, Mehrspieler/Einzelspieler, Umfang, Handlung oder ähnliches. Es
handelt sich meistens um ein „gutes Spiel“, wenn der Verbraucher bestens unterhalten
wird. Es lässt sich beispielsweise schlussfolgern: Je besser das Spiel, desto besser die
scheinbare Realität und umgekehrt.
1.1 Title
Entwicklung von 3D Grafical-User-Interface-Elementen in der Unity 3D Game
Engine in Kombination mit der Virtual-Reality-Brille Oculus Rift.
1.2 These
Es ist möglich mit Hilfe von Unity 3D und dem Oculus SDK, drei dimensionale
Grafical-User-Interface-Elemente zu erstellen, die eine mögliche Alternative zur
Eingabe durch Gamepad, Tastatur oder Maus darstellen.
1.3 Virtual Reality
Übersetzt man „Virtual“ und „Reality“ wörtlich ins deutsche, so ergibt sich „die
virtuelle Realität“. Dieser Begriff wird auch im deutschsprachigen Raum häufig
benutzt. Ein passendes Synonym für „Virtuell“ ist „scheinbar“. Die „scheinbare
Realität“ beschreibt sehr genau, was wir in virtuellen Welten erleben,
beziehungsweise erzeugen wollen.
Im Allgemeinen beschreibt die virtuelle Realität das Erlebnis in einer dreidimensionalen Umgebung, in der sich der Verbraucher bewegen und
interagieren kann. Je nach dem, wie viele unserer menschlichen Sinne in dieser
8
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
virtuellen Welt angeregt werden, desto größer ist die Immersion in die Welt.
Mortan Heilig beschrieb 1955 in seiner Arbeit „The Cinemar of the Future“ zu
wie viel Prozent unsere Sinne einen Einfluss auf die Immersion in einer
virtuellen Welt haben. Demnach:
-
Sehen:
70%
-
Hören:
20%
-
Riechen:
5%
-
Anfassen:
4%
-
Schmecken:
1%
Nach Heilig könnten wir mit einem Gerät, dass unseren Augen die virtuelle Welt
zeigt und Kopfhörern, die den entsprechenden Ton überliefern, bereits 90% der
perfekten Immersion erreichen. Jedoch gehört auch die Kraft, die auf unsere
Körper einwirkt dazu. Das „Feedback“, dass unser Körper erhält, wenn wir
beispielsweise in einem Auto beschleunigen, fehlt in dieser Berechnung.
9
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
1.4 Die ersten Geräte1
Bereits in den 80gern baute Mortan Heilig ein Gerät namens „the Sensorama
Simulator“.
Abb. 1 – Diese Abbildung zeigt den „Sensorama“ von Mortan Heilig
1
10
Sensorama, Inventor in the field of virtual reality, http://www.mortonheilig.com/
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Dieses Gerät konnte beispielsweise eine Motorradfahrt durch Brooklyn
simulieren. Motorengeräusche, Vibrationen im Sitz, Bild und Gerüche,
erzeugten somit eine virtuelle Welt. Es sollte das neue Theater werden, jedoch
wurde seine Idee nicht ernst genommen und auf Grund der hohen Kosten
wurde dieses Projekt fallen gelassen.
Heutzutage gibt es bereits einige vielversprechende Geräte, die der Vision vom
„Holo-Deck“ nachgehen.
1.4.1 Oculus Rift
Oculus Rift ist ein Headset, die speziell für Videospiele entwickelt wird.
Das Entwicklerstudio “OculusVR” hat 2012 über die Internetplattform
Kickstarter das Projekt mit 2,4 Million USD finanziert. Viele große Firmen
wie zum Beispiel Valve und Epic Games haben das Projekt finanziell
unterstützt und arbeiten seid dem eng mit OculusVR zusammen.
Abb. 2 – Dies ist ein Konzept der Oculus Rift, wie sie in ihrer fertigen Version
aussehen soll.
Die Oculus Rift ist in der Lage, ein drei Dimensionales Bild zu erzeugen,
das auf zwei Bildschirmen mit Hilfe von zwei Linsen auf die Augen des
Benutzers gestrahlt wird. Das Bild wird mit spezieller Software und
11
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
einem Hardware-Modul in das entsprechende Format gebracht. Die
Bildinformation werden mit Hilfe eines HDMI- oder einem DVI- Kabel
übertragen. Zusätzlich wird die Oculus Rift mit einem USB Kabel an den
Computer angeschlossen um Bewegungssensor-Daten zu übertragen.
Außerdem wird sie über ein 9V Kabel mit Storm versorgt.
Die Oculus Rift zeichnet sich durch ein sehr großes Sichtfeld aus,
wodurch es fast keine schwarzen Ränder für den Benutzter sichtbar
sind.
Ein
3-Achsen-Gyrometer
sorgt
für
die
Übertragung
von
Kopfbewegungen. Ziel der Oculus RIft ist es, die Immersion beim
Spielen von Videospielen deutlich zu verbessern.
Ende 2012/Anfang 2013 wurden die ersten Testversionen an Entwickler
verschickt, damit diese neue Technologie getestet und in ersten Spielen
eingebaut werden kann.
Bereits in der frühen Entwicklungsphase wurde allgemeine Skepsis
geäußert. Besonders erfahrene Entwickler haben die bereits bekannten
Probleme
wie
“Motionsickness”
geäußert.
Außerdem
hatte
die
Testversion der Oculus Rift nur eine sehr geringe Auflösung, wodurch
die ersten Erfahrungen Zweifel an der Markttauglichkeit wecken. Jedoch
wurde auch eine sehr große Faszination geteilt, da die Oculus Rift
bereits ein ganz anderes Gefühl des Spielens ermöglichte.
1.4.2 Omni
Die OMNI ist ein Virtual Reality Interface und wird von Virtuix entwickelt.
Mit der OMNI ist es für Spieler möglich sich in Videospielen frei zu
bewegen. Die OMNI überträgt Körperbewegungen mit Hilfe von
spezieller Hard- und Software zum Computer. Auf der achteckigen
Lauffläche kann sich der Spieler auf der Stelle bewegen und diese
Bewegungen werden dann an das Spiel gesendet. Somit kann der
Spieler gehen, laufen, springen und auch sich ducken.
12
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Abb. 3 – Diese Abbildung zeigt ein Konzept des Omni von der Firma Virtuix.
Ähnlich wie die Oculus Rift befindet sich die OMNI noch in der
Entwicklung. Es liegt nahe, dass man beide Technologien kombinieren
kann und somit ein komplett neues Spielerlebnis erzeugen kann. Virtuix
und OculusVR verfolgen beide das gleiche Ziel. Sie wollen der
Spielebranche die Virtuelle Realität näher bringen und für den
Konsumentenmarkt bezahlbar machen.
1.4.3 PrioVR
PrioVR ist ein Körperanzug, der die Körperbewegungen aufzeichnet und
an den Computer sendet. Ähnlich wie das Konzept des Omni soll der
PrioVR das Gefühl der Immersion im Spiel verbessern. Auch hier wird
die Kombination mit der Oculus Rift gezeigt. Anders als bei der Omni ist
es mit der PrioVR möglich komplexe Bewegungen im Spiel darzustellen.
Jedoch ist es nicht möglich, auf der Stelle zu laufen. Diese Art von
Bewegung wird mit einem Controller in der Hand ausgeführt.
13
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Abb. 4 – Diese Abbildung zeigt alle Sensoren in einem PrioVR-Anzug je nach
Ausführung.
Es ist vorstellbar, dass eine Kombination aus Oculus Rift, Omni und
PrioVR die größt mögliche Immersion in Spielen erzeugen könnten.
Jede dieser Virtual Reality Komponenten haben ihre eigenen Vorzüge.
Die OMNI und der PRIOVR erzeugen für sich allein nicht das
Spielerlebnis im Vergleich zur Oculus Rift.
14
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
2. Grundlagen
2.1 Grafical User Interface
Das Grafical User Interface (oder auch GUI, zu Deutsch: grafische
Benutzeroberfläche) dient dazu, dem Benutzer den Umgang mit einer Software
zu erleichtern. Früher wurden Computer mit Kommandozeilen gesteuert. In den
80ern wurde der sehr beliebte C64 von Commodore entwickelt, der bereits ein
GUI benutze. Die Bedienung eines Computers über Kommandozeilen ist
umständlich und man musste sich Befehle selber merken. Mit Hilfe eines GUIs
lassen sich ein oder mehrere Befehle in eine Komponente verknüpfen, die dann
anschließend Benutzter freundlich beschriftet ist. Mit Hilfe von GUIs lässt sich
auch eine Vielzahl von Daten grafisch darstellen, sodass der Benutzer diese
schneller verstehen kann.1
2.2 Oculus Rift Unity 3D Integration
In diesem Kapitel wird beschrieben, welche Funktionen die Oculus Rift Unity 3D
Integration mit sich bringt. Das Entwicklerstudio OculusVR hat viele Funktionen,
die nötig sind, um einen Spieler durch eine Szene zu bewegen, bereits
implementiert. Das bedeutet, dass der Spieler folgende Funktionen ausführen
kann, ohne weitere Implementierung durch den Entwickler:
2
GUI (Graphical User Interface), Über GUI, 2012, http://www.focus.de/digital/computer/techniklexikon/guigraphical-user-interface_aid_413051.html
15
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Abb5: Tastaturbelegung für die Oculus Rift – Unity 3D Integration
In dieser Tabelle sind sowohl Standardfunktionen eines Spielers beschrieben,
als auch spezielle Funktionen für die Oculus Rift. Die rechte Umschalt-Taste
ermöglicht das Umschalten zwischen verschiedenen Szenen. Dies ist
besonders hilfreich, um während der Laufzeit die Szenen zu wechseln und
somit einen längern Testlauf zu ermöglichen. Mit der Zurück-Taste kann man
nun die ausgewählte Szene bestätigen und Unity wird diese automatisch laden.
Die
„X“-Taste
aktiviert
oder
desaktiviert
die
Korrektur
der
Z-Achsen
Verschiebung, die aufgrund von Anhäufungen durch Fehlmessungen des in die
VR-Brille integrierten Magnetometers entstehen.
Die „C“-Taste aktiviert oder deaktiviert den Mauszeiger. Ist der Mauszeiger
deaktiviert, steuern die Mausbewegungen die Drehung des Charakters nach
Links und Rechts. Ist der Mauszeiger jedoch aktiviert, dann kann man mit
diesem mit GUI Elementen interagieren (zum Beispiel auf einen Knopf klicken).
16
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Die „P“-Taste aktiviert oder deaktviert den „Prediction Mode“. Wenn dieser
Modus aktiviert ist wird berechnet, wo sich der Kopf des Spielers wahrscheinlich
hinbewegen
wird.
Diese
Funktion
ermöglicht,
dass
die
Latenz
der
Übertragungen von Kopfbewegungen verringert wird. Eine wichtige Variable in
dieser Funktion ist die Zeitspanne, die der Computer vorrausrechnen soll
(Prediction Time). Der Standart Wert beträgt 50 Millisekunden. Dieser Wert
kann natürlich angepasst werden, je nach dem in welcher Art von Szenerie der
Spieler sich befindet.
Die „B“-Taste setzt die Ausrichtung der Oculus Rift wieder zurück. Das
bedeutet, dass die Oculus Rift am besten direkt zum Bildschirm ausgerichtet
wird. Damit erkennt das Programm den Nullpunkt ( Der Spieler guckt in diese
Richtung und dies ist die Ausgansposition).
Mit der Leertaste kann man ein Konfigurationsmenu öffnen, das mehrere
Einstellungen hat. Diese Einstellungen lassen sich mit Hilfe dieses Menus zur
Laufzeit ändern. Folgende Einstellungen sind gegeben:

Prediction Amount/Time (in Millisekunden) – Zeitspanne die der
Computer vorausrechnet

Field of View (in Grad) – Das Sichtfeld des Spielers

Interpupillary Distance / IPD (in Millimeter) – Die Pupillendistanz von
Spieler zur Linse

Distortion Constant 1 (K1) – Die Verzerrungskonstante 1

Distortion Constant 2 (K2) – Die Verzerrungskonstante 2

Player Height ( in Metern) – Die Größe des Spielers

Player Movement Speed Multiplier – Der Multiplikator für die
Laufgeschwindigkeit des Spielers
17
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014

Player
Rotation
Speed
Multiplier
–
Der
Multiplikator
für
die
Rotationsgeschwindigkeit des Spielers
Abb. 6 – Diese Abbildung zeigt das Konfigurationsmenu, welches zur Laufzeit über die
Leertaste aufgerufen werden kann.
Mit der „F2“-Taste lassen sich alle Einstellung auf den Standartwert
zurücksetzten. Außerdem kann man mit der Tabulator-Taste und den „F3“ bis
„F5“-Tasten seine aktuellen Einstellungen speichern und wieder laden. Die
„F11“-Taste wechselt zwischen dem Vollbild-Modus und dem Fenster-Modus.
18
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
2.3 Microsoft Visual Studio2
Microsoft Visual Studio ist eine integrierte Entwicklungsumgebung (IDE),
die es einem Entwickler ermöglicht, in verschiedenen Programmier-,
Script- und Seitenbeschreibungssprachen (z.B. Visual Basic .Net, C,
C++, C++/CLI, C++/C C#, F#, SQL Server, TypeScript, HTML,
JavaScript und CSS) zu entwickeln. Mit dieser Entwicklungsumgebung
ist es möglich klassische Windows Programme, Programme für die
Microsoft .NET Runtime und auch neuere Windows 8 Applikationen zu
schreiben.
Eine IDE beinhaltet meistens mehrere Komponenten:

Texteditor
Der Texteditor ermöglicht dem Entwickler Dateien zu erstellen
und zu bearbeiten. In diesen Dateien werden Befehle eingeben,
die
der
Compiler
bzw.
Interpreter
analysiert
und
in
Maschinensprache umschreibt.

Compiler bzw. Interpreter
Der Compiler (aus dem englischen für „zusammentragen“) liest
den geschriebenen Text aus den einzelnen Dateien und Relation
zu
deren
Zusammenhängen
und
„übersetzt“
diesen
in
Maschinensprache. Der Interpreter hat dieselbe Aufgabe, aber
dieser analysiert die Dateien, im Gegensatz zum Compiler, zur
Laufzeit. Beide Methoden können Syntax Fehler erkennen und
dem Entwickler melden. Im Allgemeinen sind Interpreter
langsamer in der Ausführung der Programme im Vergleich zu
Compilern.
3
19
Visual Studio, Über .NET, 2012, http://www.microsoft.com/net
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014

Linker
Ein Linker hat die Aufgabe die Funktionen und Variablen eines
Programms in Speicheradressen umzuwandeln, um es zu
ermöglichen, dass andere Programme mit diesem Interagieren
können. Dieser Vorgang wird nach der Kompilierung ausgeführt.
Generell unterscheidet man zwischen zwei Arten von Linkern:
-
Statisches Linken
Beim statischen Linken wird das Programm, und dessen
Variablen
und
Funktionen,
einmalig
in
eine
Bibliothek
umgewandelt. Dies hat den Vorteil, dass das umgewandelte
Programm einfacher auf mehreren Plattformen eingesetzt
werden kann, da alle nötigen Dateien am Ende der Entwicklung
einmal umgewandelt werden und somit immer zur Verfügung
stehen.
-
Dynamisches Linken
Beim Dynamischen Linken ist es möglich, dass mehrere
Programme auf dieselbe Bibliothek zugreifen und somit weniger
Speicher verwenden und auch schneller arbeiten. Außerdem ist
es
hierbei
auch
einfacher
nachträgliche
Programme
zu
verändern.

Debugger
Der Debugger ist dafür zuständig, Programmfehler zu suchen
und dem Entwickler zu melden. Außerdem kann der Debugger
das Programm steuern, das bedeutet, dass der Debugger
beispielsweise das Programm anhalten und wieder starten kann.
Zu diesem Zeitpunkt kann der Entwickler dann Variablen
20
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
auslesen
und
somit
den
Programmablauf
genauestens
überprüfen.

Quelltextformatierungsfunktion.
Die
Quelltextformatierungsfunktion
hilft
Entwicklern
eine
kontinuierliche Struktur im Programm einzuhalten. Hierbei
werden Standards vom Programm erkannt und zeigen dem
Entwickler wenn er bestimmte Richtlinien missachtet. Dies
steuert dazu bei, das Programm insbesondere für andere
Entwickler lesbarer zu machen.
Unity
3D
ermöglicht
es,
dem
Entwickler
verschiedene
Entwicklungs-
umgebungen zu benutzen. Unity 3D benutzt die Opensource IDE MonoDevelop
als Standart-Entwicklungsumgebung. Für diese Arbeit hat sich der Autor jedoch
aus verschiedenen Gründen für Visual Studio entschieden.
Der Hauptgrund besteht darin, dass der Autor bereits viel Erfahrung mit Visual
Studio hat und dementsprechend die einzelnen Funktionen besser benutzen
kann. Viele Funktionen, die in Visual Studio benutzt worden sind, können auch
in MonoDevelop ausgeführt werden, jedoch sind einige Funktionen in Visual
Studio ausgereifter beziehungsweise nur in Visual Studio vorhanden. Eine der
wichtigsten Funktionen in Visual Studio ist das sogenannte „IntelliSense“.
IntelliSense analysiert den geschriebenen Code zur Laufzeit und erkennt
Fehler. Diese Fehler werden dann sofort in verschiedenen Farben dargestellt.
Wird beispielsweise ein falscher Typ zu einer Variable zugewiesen, wird der
Ausdruck rot unterstrichen. Nun kann der Entwickler mit dem Mauszeiger auf
den Ausdruck zeigen und nun wird ein Tool-Tip angezeigt. Dieser beschreibt
genau, aus welchem Grund der Ausdruck fehlerhaft ist.
21
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Eine zweite wichtige Eigenschaft ist das Vorschlagen von Code. IntelliSense
erkennt verschiedene Variablen und im welchem Zusammenhang diese mit
dem restlichen Code stehen. Somit bekommt der Entwickler zur Laufzeit
vorgeschlagen, wie der Ausdruck erweitert werden könnte.
Diese beiden Funktionen sind ausschlaggebend für eine schnellere Entwicklung
von Programmen. Aus diesem Grund wird für diese Arbeit Visual Studio 2010
Professional verwendet und nicht MonoDevelop.
2.4 Game Engine
Ein Spiel besteht aus vielen einzelnen Komponenten. Damit diese einzelnen
Komponenten miteinander arbeiten können, benutzten Entwickler sogenannte
„Game Engines“. Diese beinhalten einzelne „Engines“ (oder auch auf Deutsch:
„Motoren“), die die Vielzahl an Komponenten bearbeiten können. Die meisten
Game Engines weisen daher beispielsweise eine Grafik Engine, Physik Engine
und Sound Engine vor. Innerhalb dieser Game Engine können Programmierer
nun die einzelnen Komponenten bearbeiten und kombinieren. Beispielsweise
kann der Programmierer ein Auto mit explodieren lassen und gleichzeitig die
entsprechende Audio Datei abspielen. Dabei muss man bedenken, dass jede
Game Engine die Komponenten anders behandelt. Ob man für die Bewegung
eines Charakters ein, zwei oder drei Komponenten benötigt, hängt von der
jeweiligen Game Engine ab.
Eine Game Engine ist daher das „Framework“ (oder auch Programmiergerüst)
für Spiele. Es enthält viele für die Spiele Entwicklung notwendigen BasisFunktionen bereit, die der Entwickler nicht jedes Mal neu erstellen will und bei
vielen Spielen gleich sind (Bsp. Game-Loop, Update-Callbacks).
Für diese Arbeit ist es relevant, dass der Spieler einen Charakter bewegen, die
Szene durch eine Oculus Rift sehen und mit den GUI-Elementen interagieren
kann.
22
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
2.5 Versionierungsdienst
SVN (Subversion) ist ein Versionierungsdienst, das dafür sorgt, dass alle
Dateien, die hochgeladen werden, archiviert werden und zu einem späteren
Zeitpunkt wieder aufrufbar sind. Da sämtliche Änderungen jeder einzelnen
Datei gespeichert werden kann, lässt sich sowohl der Fortschritt zwischen
einzelnen Updates nachvollziehen, als auch auf eine früherer stabile Version
zurückkehren, falls die aktuelle Version fehlerhaft ist (Rollback).
Als erstes muss der SVN Dienst auf einem Server eingerichtet werden. Sobald
ein Ordner und ein dazugehöriges Benutzerkonto eingerichtet sind, ist es
möglich, von jedem lokalen Computer, der den SVN Client installiert hat (z.B.
Tortiose SVN), auf diesen Ordner zuzugreifen. Zusätzlich muss bei einem
privaten Server – wie es bei dieser Arbeit der Fall ist – der Router des
Netzwerks so eingerichtet werden, dass man auch von außerhalb des lokalen
Netzwerkes darauf zugreifen kann (Portforwarding).
Als nächstes muss noch ein Ordner auf dem lokalen Computer, auf dem
gearbeitet wird, erstellt werden. In diesem Ordner werden nun alle benötigten
Projektdateien kopiert.
Der letzte Schritt beinhaltet das erstmalige Hochladen aller bereits erstellten
Dateien. Dies ist nun der Ausgangspunkt und somit Version eins. Alle weiteren
Uploads
werden
fortlaufend
archiviert
und
erhalten
eine
eindeutige
Revisionsnummer.
Durch dieses System entsteht ein großer Vorteil. Dem Nutzer ist es nun
möglich, von mehreren Computer aus zu arbeiten. Der SVN Client bietet die
Möglichkeit, eine beliebige Version des Projektes herunter zu laden.
Beispielsweise kann man das aktuelle Projekt auf seinen Laptop herunterladen
und wenn man fertig ist, den Fortschritt wieder auf den Server laden und an
seiner Workstation fortsetzten. Sollte der Fall auftreten, dass zwei verschiedene
23
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Versionen existieren und in beiden Teile zu verwenden sind, so kann Tortoise
SVN diese beiden Versionen in eine Version zusammenfügen (SVN Merge).
Dies funktioniert nicht immer automatisch. Der Nutzer muss selber entscheiden,
welche Teile aus der jeweiligen Version verwendet werden. Der SVN Client
unterstützt den Nutzer jedoch, in dem es anzeigt, welche Inhalte sich
unterscheiden, beziehungsweise welche Inhalte in der jeweiligen Version
fehlen.
2.6 Raycast3
Beide der in Kapitel drei beschriebenen Methoden basieren auf dem Prinzip des
„Raycast“. Hierbei wird ein Strahl von einem Ausgangspunkt in die Szene
geschossen. Länge und Richtung können angegeben und zur Laufzeit
verändert werden. Sobald der Raycast mit einem Objekt kollidiert, kann man
dessen Informationen auslesen. In Unity 3D benötigt ein Raycast vier
Parameter:

Ursprung (in Vector) – Gibt den Ursprung des Raycast an

Richtung (in Vector) – Gibt die Richtung, in der der Raycast
geschossen wird, an

Länge (in float) – Gibt die Länge des Raycast an

Ebenenmaske (in LayerMask) – Ermöglicht das Ignorieren von
Objekten, mit dem der Raycast kollidiert.
4
Raycast, Physics.Raycast, 2013,
http://docs.unity3d.com/Documentation/ScriptReference/Physics.Raycast.html
24
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
3. Methodik
3.1 Evaluationsmethode
Ziel dieser Arbeit ist es, eine weitere Methode der Entwicklung von GUIElementen für die Oculus Rift in Unity 3D zu entwickeln. Dies beinhaltet, dass
die Funktionalität des Programm-Codes überprüft wird. Im Mai 2003 hat sich
Marcus Hegner bereits mit Software-Evaluationmethoden beschäftigt. Er
beschreibt,
dass
es
zwei
grundsätzliche
Arten
von
Methoden
der
Softwareevaluation gibt. Zum einen die Inspektionsmethoden und zum anderen
die Testmethoden. 4
„Vergleichsuntersuchungen zur Effektivität und Effizienz von
Inspektions- und Testmethoden zeigen widersprüchliche Ergebnisse.
[…] Inspektionsmethoden decken Genauigkeits-, Systematik- oder
Konsistenzprobleme auf. […] Wenn es darum geht, die Ganzheitlichkeit
einer Aufgabe zu sehen, sind empirische Testmethoden aber von
Vorteil.“ (Hegner 2003, S. 64)
Für diese Arbeit kommen Inspektionsmethoden in Frage, da nur die
Funktionalität der GUI Elemente geprüft werden sollen. Sollten systematische
Probleme auftauchen, können diese anhand von diesen Vorgehensweisen
erkannt werden. Außerdem würde durch eine kombinierte Überprüfung durch
Testmethoden und Inspektionsmethoden den zeitlichen Aufwand für diese
Arbeit überschreiten.
Es gibt mehrere Überprüfungsarten, die in dieser Arbeit angewendet werden
könnten. Maike Milling und Thomas Gornig haben 2004 eine Arbeit
veröffentlich, in der sie Inspektionsmethoden und Testmethoden vergleichen
und auflisten.
5
25
vgl. Hegner 2003, S.64
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
„Bei einer Inspektion überprüfen, wie der Name bereits sagt, Inspektoren
die Software nach unterschiedlichen Gesichtspunkten. Diese
Inspektoren, oder auch Gutachter sind Experten mit Softwareergonomischen Kenntnissen und Erfahrungen im Umgang mit
Anwendungsprogrammen oder Endanwender, mit bestimmten
Fachkenntnissen.“ (Milling und Gornig 2004, S. 3)
In dieser Arbeit wird diese Inspektion/Evaluation durch den Autor und
Entwickler durchgeführt. Milling und Gornig haben fünf verschiedene Arten der
Inspektionsmethoden aufgelistet:

Heruristische Evaluation

Kognitiver Walkthrough

Consistency Inspection

Standard Inspection

Feature Inspection
3.1.1 Kognitiver Walkthrough
Für diese Arbeit komm der Kognitiver Walkthrough (o. kognitives
Verfahren) in Frage, da diese Arbeit die Funktionalität der GUI-Elemente
untersucht und diese mit Hilfe des kognitiven Verfahren erläutert werden
können. Das Verfahren untersucht die Software-Ergonomie5, wobei
Effektivität und Effizient eine entscheidende Rolle spielen.6
Um ein kognitives Verfahren durchführen zu können, muss vorher eine
Zielgruppe definiert werden, anhand deren theoretischen Wissens über
das Programm, der Gutachter die Funktionalität des Programms
beurteilen kann.
6
Software-Ergonomie, Was ist Software-Ergonomie?, 2011, http://www.ergonomieleitfaden.de/index.htm
7
vgl. Milling; Gornig, 2004, S. 3-6
26
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
3.1.2 Zielgruppe der Evaluationsmethode
Für diese Arbeit ist die Zielgruppe eindeutig. Die Oculus Rift ist eine
komplett neue Technologie in der Spielebranche und viele Verbraucher
sind fasziniert von diesem Gerät und offen für neue Spielmethoden. Im
Sinus Milieus finden wir eine grobe Aufteilung der Bürger in
unterschiedliche Gruppierungen, die verschiedenen Eigenschaften
haben. Für diese Arbeit ist das adaptiv-pragmatische Milieu interessant,
da jene genau in die Zielgruppe fallen. Dies sind zumeist junge Leute,
die offen für neue Technologien und Ideen sind. Außerdem fallen
darunter auch die sogenannten „Early Adopter“. Die Early Adopters sind
jene, die zumeist die neuste Technologie kaufen und konsumieren. Die
Oculus Rift ist genau diese Art von Technologie.
Abb. 7 – Die Sinus-Milieus in Deutschland. Beschreibung und grafische
Darstellung der unterschiedlichen Milieus in Deutschland.
27
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Schlussfolgernd kann man sagen, dass diese Zielgruppe hauptsächlich
aus dem adaptiv-pragmatischen Milieus kommt und jüngere Leute (1830 Jahre alt) anspricht. Eine weitere Einschränkung wird sein, dass nur
PC Spieler sich für diese Technologie interessieren, da die Oculus Rift
bisher auch nur für den PC entwickelt wird.
Man kann davon ausgehen, dass die meisten Leute in dieser Zielgruppe
sehr gut mit einem PC zu Recht kommen und wahrscheinlich auch
fortgeschrittene Erfahrung in Computerspielen haben. Da die Bedienung
der Oculus Rift komplett intuitiv ist, wird die Evaluation der GUIElemente nur sehr gering durch dieses neue Eingabegerät verfälscht.
Zusätzlich wird erwartet, dass die Bedienung der neuen Elemente
mindestens genau so einfach ist.
3.1.3 Methodenanwendung
Als letztes muss das Szenario beschrieben werden, in der die zu
entwickelnde Methode getestet wird. Hierbei handelt es sich um eine 3D
Szene, die in Unity 3D erstellt wird und mit so wenig wie möglich
Objekten gefüllt wird, um eine Verfälschung der Evaluation zu
vermeiden. Die Szene beinhaltet einen Boden, einen Charakter den der
Spieler steuern kann und einen Würfel mit dem der Spieler interagieren
kann. Dieser Würfel repräsentiert mögliche GUI-Elemente.
Der zu testende Ablauf sieht wie folgt aus:
1. Der Spieler guckt mit der Oculus Rift auf den Würfel und
verweilt dort.
2. Nach drei Sekunden wird der Würfel sich Rot färben und
nach weiteren drei Sekunden Blau. Dies wiederholt sich bis
der Spieler sich entschließt nicht mehr auf den Würfel zu
gucken.
28
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
3. Der Würfel behält seine Farbe bis der Spieler erneut drei
Sekunden auf diesen guckt.
4. Sollte der Spieler keine drei Sekunden auf den Würfel
gucken, wird der Countdown abgebrochen und fängt von
vorne an.
Daraus ergeben sich folgende Funktionen, die das Programm beinhalten
muss:
1. Der Würfel muss seine Farbe ändern können.
2. Es muss möglich sein drei Sekunden herunter zu zählen und
dieses muss wiederholbar sein.
3. Es muss möglich sein den Countdown abzubrechen.
4. Feststellen, ob der Spieler auf den Würfel guckt.
29
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
3.2 Beschreibung der Methoden zur Entwicklung
der GUI-Elemente
3.2.1 Methode eins - Raycast und Objekt
Bei dieser Methode werden Standart-Objekte zu GUI-Elementen
umgebaut. Beispielsweise kann man hier eine Ebene nutzten, um darauf
eine Karte der Szenerie anzuzeigen. Da die Kommunikation zwischen
Raycasts und Objekten in Unity 3D bereits gegeben ist, ist es
wahrscheinlich, dass diese Methode Erfolg haben wird.
Die Kommunikation zwischen Raycast und Objekt bedeutet, dass man
sowohl
Informationen
des
Objektes
abfragen
kann,
als
auch
Informationen oder Befehle diesem Objekt schicken kann.
3.2.2 Methode zwei - Raycast und GUI Elemente
Die zweite Variante funktioniert ähnlich wie die erste. Jedoch werden
keine 3D-Objekte in der Szene beschossen sondern GUI-Elemente, die
auf einer Ebene im 3D-Raum liegen. Hierbei stellt sich die Frage, ob es
möglich
ist,
GUI-Elemente
mit
einem
Raycast
anzusprechen.
Normalerweise würde es einen Konflikt geben, da der Startpunkt von
dem Raycast in der Kamera des Spielers beginnt und somit GUIElemente, die in der Kamera liegen, nicht getroffen werden können, da
diese nicht im 3D-Raum liegen. Vermutlich wird der Raycast die Ebene
erkennen, auf der die GUI-Elemente liegen, aber die Ebene selber nicht.
Möglicherweise kann man dennoch anhand der Position eines GUIElements und anhand des Treffpunkts des Raycasts, die GUI-Elemente
ansprechen. Falls dies möglich ist, stellt sich dennoch die Frage, ob die
30
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
erste Methode nicht schneller zu implementieren ist, und ob die
zusätzlichen Funktionen der Standard GUI-Elemente den Aufwand der
zweiten Methode rechtfertigt.
3.3 Vergleich der Methoden
3.3.1 Methode eins - Raycast und Objekt
Folgende Vorteile lassen sich in Methode eins feststellen:

Standard Objekte lassen sich in Unity 3D sehr leicht
ansprechen. Das bedeutet, dass diese Objekte leicht zu
bearbeiten sind, ohne die ursprüngliche Implementation
zu ändern.

Die Objekte lassen sich auch leicht durch komplexe 3D
Objekte austauschen, welche beispielsweise in Autodesk
Maya oder 3DS Max erstellt wurden.

Diese
Methode
lässt
sich
auch
auf
generelle
Spielfunktionen übertragen, da 3D Objekte auch in der
restlichen Szene auftauchen.
Folgende Nachteile lassen sich in Methode eins feststellen:

Da Standard Objekte verwendet werden, sind die
Möglichkeiten begrenzt. Das bedeutet, dass viele visuelle
Funktionen (wie zum Beispiel ein Mouse-Hower-Effekt)
nicht vorhanden sind.
31
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014

Positionierung der GUI-Elemente müsste auch vom
Entwickler selber implementiert werden, da sich diese
nicht automatisch mit dem Spieler mitbewegen.
3.3.2 Methode zwei - Raycast und GUI-Elemente
Folgende Vorteile lassen sich in Methode zwei feststellen:

Viele Funktionen, die bei GUI-Elementen herkömmlich
sind, lassen sich auch bei dieser Methode benutzten (wie
zum Beispiel ein Mouse-Hower-Effekt).

Sämtliche Positionierungen werden bereits berechnet und
müssen nicht erneut implementiert werden.

Auch in dieser Methode ist es möglich, diese in anderen
Bereichen des Spiels erneut zu benutzten.
Folgende Nachteile lassen sich in Methode zwei feststellen:

Um neue GUI-Elemente zu verwenden, müssen diese
von Entwickler selber geschrieben werden. Dies ist
kompliziert, da die vorgefertigten GUI-Elemente tief in der
Game Engine integriert sind.

GUI-Elemente können lediglich im visuellen Bereich
konfiguriert werden.

Diese GUI-Elemente lassen sich nicht durch 3D Objekte
austauschen.
32
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
3.3.3 Zusammenfassung der Vor- und Nachteile
Anhand der vorherigen Auflistung lässt sich erkennen, dass Methode
eins weniger Nachteile bietet, als Methode zwei. Besonders wichtig ist
das Potenzial, welches sich in Methode eins befindet. Diese Methode
könnte dafür sorgen, dass es in Zukunft nur noch 3D-Szenen gibt und
GUI-Elemente nicht mehr in einer Kamera verbaut werden. Methode
zwei hingegen hat den Vorteil, dass es bereits viele Funktionen für
bestehende GUI Elemente gibt in Unity 3D und somit mit dieser Variante
viele Möglichkeiten offen bleiben. Vermutlich wird Methode eins ein
solides Ergebnis bringen, da diese auf einfache Funktionen zurückgreift
und kein bestehender Code umgeschrieben werden muss. Daher ist zu
erwarten, dass diese Methode ein zufriedenstellendes Ergebnis liefern
wird. Bei Methode zwei ist zu erwarten, dass es Probleme bei der
Implementierung geben wird, wobei bestehender Code durch den
Entwickler (OculusVR) bearbeitet werden muss. Sollte diese Methode
jedoch funktionieren, könnte ein grafisch schöneres Ergebnis bei
gleicher Funktionalität erzielt werden.
33
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
4. Durchführung
4.1 Versionierungsdienst
Als erster Schritt wurde die Datensicherung und Versionierung sichergestellt.
Dies ist einer der wichtigsten Maßnahmen, damit auch über einen langen
Zeitraum und mehreren hundert Veränderungen im Projekt, alle Daten gesichert
sind.
Zusätzlich
können
mit
Subversion
alle
Versionen
der
Dateien
wiederhergestellt werden und Veränderungen die bereits mehrere Wochen oder
Monate zurückliegen erneut nachvollzogen werden.
Nun wurde ein Ordner erstellt, in dem sich sämtliche Dateien befinden. Dazu
gehören sowohl die Projekt Dateien von Unity 3D, als auch alle Dokumente und
Referenzen der restlichen Arbeit. Als nächstes wird ein Repository erstellt,
welches den Ordner auf dem lokalen PC mit dem Ordner auf dem Server
verbindet. Alle bereits erstellten Dateien werden auf einen lokalen Server
hochgeladen und gespeichert. Jetzt können neue Dateien hinzugefügt werden
oder bereits existierende bearbeitet und mit dem Server synchronisiert werden.
Als Server dient ein Synology DS212+ mit dem Paket Subversion und für den
Client wird ein PC mit der Software Tortoise SVN verwendet. Mit Hilfe dieser
Methode, ist es sichergestellt, dass keine Dateien verloren gehen. Sollten
einzelne Dateien oder auch das gesamte Projekte auf der Workstation verloren
gehen, ist es jederzeit möglich die Dateien von Server erneut runterzuladen.
34
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
4.2 Unity 3D
Unity 3D ist die Game Engine, die in dieser Arbeit benutzt wird, um GUI
Elemente für die Oculus Rift zu entwickeln. Für diese Arbeit wurde die ProVersion von Unity 3D verwendetet, da die Oculus Rift Integration nur mit dieser
funktioniert. Bei dem Kauf eines Developer-Kits der Oculus Rift, ist es möglich,
für einen Zeitraum von drei Monaten die Pro-Version von Untiy 3D zu benutzen.
Es wurde also Unity 3D installiert und die Pro-Version aktiviert.
Als nächstes wurde eine Szene erstellt, die es dem Spieler erlaubt, sich auf
einer Ebene zu bewegen. Diese „Test-Szene“ wurde im Laufe dieser Arbeit
mehrfach bearbeitet. Die Bearbeitungen wurden jedoch hauptsächlich im Code
vorgenommen, um bestimmte Ereignisse darzustellen, wie zum Beispiel das
Ablaufen eines Countdowns, der anzeigt wie lange der Spieler auf ein Objekt
gucken muss, bis das Objekt aktiviert wird. Alle Objekte in dieser Szene sind
vorgefertigt und werden mit Unity 3D mitgeliefert. Das bedeutet, dass in dieser
Arbeit keine grafischen Entwicklungen vorgenommen wurden, sondern nur
funktionale Entwicklungen.
4.3 Oculus Rift Unity 3D Integration
Um die Oculus Rift Unity 3D Integration im bestehenden Projekt zu nutzen,
muss ein Custom-Package von OculusVR eingebunden werden. Dieses Paket
wurde von der offiziellen Website von OculusVR (www.oculusvr.com)
heruntergeladen. In diesem Paket befinden sich weitere Assets, die verwendet
wurden, um die bestehende Szene zu bearbeiten, damit die Oculus Rift
verwendet werden kann. Dazu gehört das Spieler Objekt, welches mehrere
Dateien enthält, die die Berechung der 3D-Szene übernehmen. Außerdem
werden mehrere Werkzeuge integriert, damit der Entwickler direkt die gespielte
Szene analysieren oder gegebenenfalls anpassen kann (wie zum Beispiel
Bilder pro Sekunde, Field of View, Prediction Time, IPD oder Augenhöhe
(Spielergröße)).
Der Autor hat festgestellt, dass die Entwickler von der Oculus Rift (OculusVR)
eine eigene Klasse (guiHelper) geschrieben haben, die von der ursprünglichen
35
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
GUI-Klasse ableitet. Mit Hilfe dieser Klasse ist es möglich, dass GUI Elemente
nicht mehr in einer Kamera liegen, sonder davor. Dies ist besonders wichtig, da
für stereoskopisches 3D zwei Kameras benötigt werden, die die beiden Augen
simulieren. Sollten nun alle GUI-Elemente in einer Kamera liegen, würden diese
nur auf dem linken bzw. rechten Auge sichtbar sein, was natürlich nicht
angenehm für den Spieler sein würde. Man kann die GUI-Elemente auch nicht
einfach auf beide Kameras kopieren, da dann sämtliche Berechnung der drei
dimensionalen Sicht, die bereits für die Darstellung der Szene gemacht werden,
erneut durchgeführt werden müssten. Somit hat OculusVR eine Ebene erzeugt
in den GUI-Elemente direkt vor dem Spieler schweben. Diese Ebene kann nun
auch in Große, Rotation und Skalierung angepasst werden. Damit gehören die
GUI-Elemente sozusagen zum 3D Raum, jedoch sind die GUI Elemente selber
nicht drei dimensional und können auch nicht angesprochen werden.
Im folgenden Kapitel wird beschrieben wie die beiden erforschten Methoden
angewendet wurden.
4.3.1 Raycast und 3D-Objekte
Als Testfunktion für diese Methode sollte ein Strahl aus der rechten
Kamera des Spielers in die Szene geschossen werden. Sobald dieser
mit einem Objekt kolliediert, dass den Tag „GUI“ enthält, wird ein Countdown ausgelöst, der einen konstanten Wert herunterzählt. In diesem
Beispiel sind es drei Sekunden. Solange der Spieler auf das Objekt mit
dem Tag „GUI“ schaut, werden die drei Sekunden heruntergezählt. Falls
der Spieler nicht mehr auf das Objekt schaut, wird der Cound-Down auf
drei Sekunden zurückgesetzt. Sobald die drei Sekunden abgelaufen
sind, verändert sich die Farbe des Objektes zu rot. Schaut der Spieler
erneut drei Sekunden auf das Objekt, verändert sich die Farbe zu blau.
36
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Damit dies funktioniert wurden folgende Schritte durchgeführt:
Abb. 8 – In dieser Abbildung lässt sich die Funktion CastRayRightEye()
erkennen. In dieser Funktion wird der Raycast initialisiert.
Zuerst werden mehrere Variablen erstellt. Zum einen der Strahl selber,
der vom Typ „Ray“ ist, welches eine Klasse von Unity 3D ist. Als
nächstes werden drei Variablen erstellt, die zur Abfrage des CoundDowns gehören („currentOjectName“ vom Typ „String“, „timer“ vom Typ
„float“ und die konstante Variable „WAIT_FOR_SECONDS“ vom Typ
„const float“). Als nächstes wird der Strahl initialisiert, der von der
rechten Kamera nach vorne in die Szene geschossen wird. Sollte dieser
etwas treffen, wird die Funktion „OnRayCastHit()“ aufgerufen. Diese
Funktion prüft, ob der Strahl ein Objekt mit dem Tag „GUI“ trifft. Sollte
dies der Fall sein, wird der Name dieses Objektes in der Variable
„currentObjektName“ gespeichert, damit dieses Objekt später modifiziert
werden kann.
37
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Abb. 9 – In dieser Abbildung sieht man die OnRayCastHit() Funktion. Diese
Funktion analysiert die Trefferinformationen des Raycasts, wenn dieser ein
Objekt trifft.
Gleichzeitig werden drei Sekunden herunter gezahlt. Dies wird mit den
Variablen „timer“ und „Time.deltaTime“ realisiert. Diese zieht die
vergangen Zeit seid dem letzten Aufruf ab und subtrahiert diesen Wert
von den gegeben drei Sekunden. Sobald drei Sekunden abgelaufen
38
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
sind, wird nun Mithilfe der Trefferinformationen des Raycasts das Objekt
modifiziert. Zuerst wird die Farbe des Objektes mit Hilfe der Funktionen
„renderer.material.color = Color.Red“ auf Rot gesetzt. Nach den
nächsten drei Sekunden wird die Farbe auf Blau gesetzt („Color.Blue“).
Dies geschieht nun im Wechsel, bis der Spieler nicht mehr auf das
Objekt schaut.
Abb. 10 – In dieser Abbildung sieht man den Strahl (weiß) und das getroffenen
Objekt, welches derzeit Rot gefärbt ist.
Die im Kapitel 4.3 beschrieben Funktion der Klasse von OculusVR
(„guiHelper“) wurde hier genutzt, um dem Spieler anzuzeigen wie lange
er noch auf das Objekt gucken muss, bis das Event ausgelöst wird.
Mit dieser Erkenntnis könnten sich Spielmechaniken erzielen lassen, die
bereits in früheren Spielen erfolgreich waren, wie zum Beispiel in
Splinter Cell Double Agent.
In diesem Spiel muss der Spieler Dateien von einem Terminal
herunterladen. Dazu hält der Spieler die linke und die rechte Maustaste
gedrückt, während er auf das Terminal zielt. Diese Kombination von
zwei Tasten und das Zielen auf das Objekt könnte mit der Oculus Rift
und der oben beschrieben Funktion vereinfacht werden, indem der
39
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Spieler auf das Objekt schaut und der Download automatisch ausgeführt
wird, solange der Spieler auf das Objekt schaut.
Abb. 11 – In dieser Abbildung kann man erkennen, wie der Spieler im Spiel
Splinter Cell Double Agent die Daten an einem Terminal herunterladen muss.
4.3.2 Raycast und GUI-Elemente
Ähnlich wie bei der ersten Methode wird auch hier ein Strahl aus der
rechten Kamera des Spielers geschossen. Jedoch sollte in dieser
Methode kein 3D Objekt angeschossen werden, sondern eine 2D
Ebene, die zur Laufzeit erzeugt wird. Diese 2D Ebene wurde von den
Entwicklern der
Oculus
Rift
erstellt,
um die
dreidimensionalen
Berechungen nur einmal durchzuführen. Hierbei entstanden folgende
Probleme:

Die Rückmeldung des Raycast erfolgte nicht, da die
Ebene über keine Kollisionsberechnung verfügt. Daher
konnten auch keine Informationen über dieses Objekt
ausgelesen werden.
40
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014

Da das Objekt zur Laufzeit über ein Script initialisiert
wird, war es auch nicht möglich, die Ebene über den
Unity
3D
Editor
zu
bearbeiten
und
eine
Kollisionskomponente (Rigidbody - Physikkomponente)
hinzuzufügen.
Dadurch wurde das Script, welches die 2D Ebene erstellt, bearbeitet und
versucht, eine Kollisionskomponente einzubauen. Dies erwies sich als
äußerst schwierig, da das Script von einer anderen Klasse abgeleitet
wird, welche sich am Ende einer Baumstruktur befindet. Dies führte
dazu, dass mehrere Scripts bearbeitet werden mussten. Schlussendlich
hatte der Autor keinen Erfolg, diese Methode zu implementieren.
Daraus folgend hätten sich wahrscheinlich weitere Probleme ergeben.
Sobald die Ebene eine Kollisionskomponente bekommen hätte, wäre
diese auch mit allen anderen Objekten in der Szene kollidiert. Daraus
folgt, dass eine clevere Positionierung benötigt werden würde, um eine
Fehlfunktion ausschließen zu können.
41
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
5. Ergebnisse
5.1 Ergebnisse
Nach dem Beenden der Entwicklungsphase hat sich herausgestellt, dass
Methode eins die einzige ist, die erfolgreich implementiert werden konnte. Alle
Ziele in dieser Methode wurden erreicht. Diese Methode erweitert GUI
Elemente sowohl in der Hinsicht, dass der Spieler mit Kopfbewegungen diese
ansteuern kann, als auch, dass die GUI Elemente im 3D Raum liegen und somit
die Immersion des Spielers fördern. Es ist möglich mit der Oculus Rift 3D
Objekte anzusprechen und somit auch vorgefertigte Kommandos auszuführen.
Je nach Bedarf des Spiels können an einer bestimmten Position im Code nun
beliebig viele Funktionen aufgerufen werden, die das Spielgeschehen
beeinflussen. Zum Beispiel kann über diese Interaktion mit dem Objekt eine
Explosion in der Szene ausgelöst werden, oder aber der Spieler kann sein
Inventar öffnen. Dadurch ist diese Methode nicht nur für spezifische Genres
bestimmt, sonder kann für jedes Oculus Rift Spiel verwendet werden.
Die zweite Methode erwies sich als nicht erfolgreich. Es war dem Autor nicht
möglich, diese Methode in der gegebenen Zeit zu implementieren. Mehrere
Fehler sind aufgetreten. Zum einen war es nicht möglich die 2D Ebene
anzusprechen auf Grund von fehlender Kollisionsabfrage und zum anderen
wurde dieses Objekt zur Laufzeit initialisiert, was die Bearbeitung erschwerte.
Die Kollisionsabfrage fand nicht statt, da der Strahl durch die Ebene hindurch
geschossen ist. Das liegt daran, dass auf der 2D Ebene keine „Collider“Komponente ist. Generell ist es möglich, auch zur Laufzeit weitere
Komponenten zu einem Objekt hinzuzufügen, jedoch war dieses Objekt von
den Entwicklern der Oculus Rift entworfen und basierte daher nicht auf der
üblichen Zugänglichkeit anderer Unity 3D Objekte.
Die
Entwicklung
einer
Alternativmethode,
oder
das
Verändern
der
Vorgehensweise, hätten den zeitlichen Rahmen dieser Arbeit überschritten.
42
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
5.2 Evaluationen
Evaluiert man die erste Methode anhand des kognitiven Verfahrens, entsteht
folgende Frage:
Ist der Ablauf der zu benutzenden Funktionen klar und kann der Spieler anhand
des in Kapitel 3.1.3 beschriebenen Ablaufs diesen erkennen?
Aufgrund der sehr einfach gehaltenen Testszene kann der Spieler alle
Funktionen mit seinen Kopfbewegungen erreichen. Mit Hilfe des Countdowns
wird dem Spieler eine Rückmeldung gegeben, die ihn dazu animiert, weiterhin
auf das Objekt zu gucken. Sobald der Würfel sich Rot färbt, wird der Spieler von
dem Objekt wegschauen. Diese Rückmeldungen reichen aus, um dem Spieler
intuitiv die Funktionen mitzuteilen. Daraus ergeben sich folgende Vorteile für
diese Methode:

Der Spieler muss keine Tastenkombinationen erlernen, um mit
dem GUI-Element zu interagieren.

Der Spieler muss keine Maus benutzten, um mit GUI-Elementen
zu interagieren, oder sich in der dreidimensionalen Szene
umzugucken.
Folgende Nachteile lassen sich in dieser Methode erkennen:

Der Spieler muss die Oculus Rift benutzten, um mit den GUIElementen interagieren zu können.

Der Spieler könnte Schwierigkeiten haben, kleine GUI-Elemente
mit der Oculus Rift genau anzuschauen.
Fast man nun die Ergebnisse und die Evaluation zusammen, kann man
erkennen, dass die Methode eins erfolgreich implementiert und getestet wurde.
Die Methode wurde ohne größere Komplikationen dem bestehenden CodeGerüst hinzugefügt. Alle Funktionen sind für einen Spieler nachvollziehbar und
43
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
verständlich. Kritisch betrachtet sind die Vorteile der ersten Methode in Summe
größer als die Nachteile, die sich dadurch ergeben. Vergleicht man diese
Methode mit der aus dem Spiel Splinter Cell Double Agent, lässt sich klar
erkennen, dass die Spielsteuerung klar vereinfacht wurde. Aus einer
Kombination
von
drei
Aktionen
(Mausbewegung,
Rechter-
und
Linkermaustaste) wurde eine einzige Aktion (Kopfbewegung). Hierbei lässt sich
das potenzial der 3D Visualisierung durch die Oculus Rift erkennen, sondern
auch welches Potenzial die Oculus Rift im Bereich Spielsteuerung und GUI
Einbindung hat.
44
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
6. Zusammenfassung und Fazit
Ziel dieser Arbeit war es, drei dimensionale GUI-Elemente in Unity 3D für die Oculus
Rift zu entwickeln. Viele Aspekte wurden dabei berücksichtig.
Es gab zahlreiche Projekte in den letzten Jahrzehnten, die versucht haben eine
virtuelle Realität zu erstellen. Viele davon haben den heutigen Stand der virtuellen
Realität maßgeblich geprägt. Die Oculus Rift ist eine der vielversprechenden Projekte
und ist stark daran beteiligt, dass weitere Projekte wie die Omni und der PrioVR
zustande gekommen sind. Die Oculus Rift Überzeugt mit ihrer präzisen Übertragung
der Kopfbewegungen und dem Ziel, eine 3D-Brille für den Konsumentenmarkt zu
entwickeln.
6.1 Grundlagen
In dieser Arbeit wurden mehrere Methoden eingesetzt und miteinander
kombiniert. GUI-Elemente haben einen entscheidenden Beitrag daran, dass der
Spieler sich näher am Spiel befindet. Viele aufwendige Kommandos werden
durch das GUI vereinfacht und grafisch dargestellt. In Bezug auf die Oculus
Rift, sollte dies genau so, wenn nicht gar besser sein. Um grafische Elemente
für die Oculus Rift zu ermöglichen, wurde Unity 3D, die von OculusVR
entwickelte Unity Integration und Visual Studio benutzt. Unity 3D ist eine Game
Engine welche in der Lage ist für verschiedenste Plattformen Spieleentwicklung
zu ermöglichen. Für diese Arbeit wurde Untiy 3D verwendet, da zum einen der
Autor viel Erfahrung mit Unity 3D und der GUI Entwicklung in dieser Game
Engine hat und zum anderen, weil Unity 3D die erste Entwicklungsumgebung
war, mit der die Oculus Rift kompatibel war. Die Oculus Rift Unity Integration ist
eine Vorraussetzung, damit die Oculus Rift mit Unity 3D benutzt werden kann.
Diese Unity Integration bietet außerdem einige Funktionen, auf die ein
Entwickler zugreifen kann. Zum einen lassen sich Variablen anschauen,
beziehungsweise anpassen, um Spiele zu optimieren. Außerdem ist es möglich
bestehenden Code anzupassen oder neuen Code hinzuzufügen. Dadurch ist es
möglich,
neue
Spieleentwicklung
Funktionen
zu
zu
schreiben
entdecken.
Visual
und
neue
Studio
Methoden
2010
wurde
der
als
45
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Entwicklungsumgebung verwendet. Diese ermöglicht das Schreiben und
Bearbeiten von Code-Dateien, mit Hilfe von verschiedensten Funktionen, wie
zum Beispiel IntelliSense. IntelliSense analysiert bestehenden Code und weist
den Entwickler darauf hin, wenn ein Ausdruck nicht korrekt geschrieben wurde.
Außerdem kann es auch einzelne Ausdrücke dem Entwickler vorschlagen, wie
der gesamte Ausdruck vollendet werden könnte. Auf Grund dieser und der
bereits vorhandenen Erfahrung mit Visual Studio wurde diese der in Unity 3D
bereits eingebundenen Entwicklungsumgebung MonoDevelop vorgezogen.
Die Grundlage, auf der sich die beiden angewandten Methoden beziehen, ist
die Klasse des Raycast. In Untiy 3D ist diese eine Standard Klasse und lässt
sich mit vielen anderen Komponenten verknüpfen. Bei einem Raycast wird ein
Strahl in eine drei dimensionale Szene geschossen. Dieser Strahl hat einen
Startpunkt, eine Richtung und gegebenenfalls auch einen Endpunkt. Sobald
dieser Strahl einen Gegenstand trifft, können Informationen über diesen
abgerufen werden. Weiter können auch Informationen zurückgesendet werden
und somit den Gegenstand der getroffen wurde zur Laufzeit bearbeiten.
6.2 Methodik
Da in dieser Arbeit neue Software geschrieben worden ist, musste auch eine
entsprechende Evaluation dieser Software vorgenommen werden. Hierzu hat
im Jahr 2003 Marcus Hegner zwei Evaluationsarten aufgestellt. Zum einen die
Inspektionsmethoden und zum anderen die Testmethoden. Diese Methoden
wurden wiederum 2004 von Maike Milling und Thomas Gornig verglichen. Für
diese Arbeit kam eine Inspektionsmethode in Frage, da Testmethoden den
Umfang dieser Arbeit überschreiten würden. Zu den Inspektionsmethoden
gehört das Kognitive Verfahren, bei dem die Software-Ergonomie anhand von
Fragestellungen und Beschreibungen untersucht wird.
Um dieses Verfahren anzuwenden, musste eine Zielgruppe definiert werden, in
die die Oculus Rift und die potentiellen Spiele hineinpassen. Da die Oculus Rift
eine sehr neue Technologie ist, sind hauptsächlich Fachkundige an dieser
Technik interessiert. Dazu gehören zum einen die Entwickler, als auch die
Verbraucher, die sich für Computerspiele interessieren. Diese Merkmale lassen
46
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
sich hauptsächlich in dem „adaptiv-pragmatischen“ Sinus Milieu wiederfinden.
In diese Kategorie fallen auch die so genannten „Early Adopters“. Die Early
Adopters interessieren sich besonders für die neueste Gegenstände auf dem
Markt, unter anderem auch Technologien. Die Oculus Rift gehört zu diesen
neuartigen Technologien.
In dieser Arbeit wurden zwei neue Methoden verglichen, um einerseits die
Immersion des Spielers im Spiel zu verbessern und andererseits die GUIElemente für die Oculus Rift zu verbessern. Die erste Methode benutzt die
Funktion eines Raycasts und bestehende 3D-Objekte aus Unity 3D. Hierbei
wird ein Raycast erzeugt, der in die Szene geschossen wird und mit dem 3D
Objekt kollidieren soll, um danach dieses Objekt zu modifizieren. Bei dieser
Methode entsteht der Vorteil, dass beide Funktionen problemlos kombiniert
werden können, da beide bereits in Unity 3D vorhanden sind. Außerdem kann
man auch das 3D Objekt nachträglich austauschen und verbessern. Nachteil
hingegen ist, dass das 3D Objekt nur wenige bereits vorhandene Funktionen
zur grafischen Darstellung besitzt. Diese müssten nachträglich von einem
Entwickler hinzugefügt werden. Die zweite Methode benutzt auch die Funktion
eines Raycast, kombiniert diese aber mit bestehenden GUI-Elementen. Hierbei
wird ein Raycast in die Szene geschossen und dieser sollte dann mit den
modifizierten GUI-Elementen von den OculusVR Entwicklern kollidieren.
Standard GUI-Elemente aus Unity 3D können nicht verwendet werden, da diese
in der Kamera des Spielers liegen und somit nicht vom Raycast getroffen
werden können. Bei den modifizierten GUI-Elementen von OculusVR wurden
die Standard GUI-Elemente auf eine durchsichtige 2D Ebene vor dem Spieler
verschoben. Nun stellte sich die Frage, ob der Raycast mit dieser Ebene
kollidieren kann.
6.3 Durchführung
Zu Beginn dieser Arbeit wurde ein Versionierungsdienst eingerichtet, der
sicherstellt, dass alle Dateien dieser Arbeit auf einem externen Server gesichert
sind. Mit Subversion und dem Tool SVN Tortoise ist es auch möglich alle
Dateiversionen
rekursiv
wiederherzustellen.
Dadurch
lassen
sich
auch
Veränderungen an Projektdateien nachvollziehen, die bereits vor mehreren
47
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Wochen gemacht wurden. Hierzu wird ein Server eingerichtet, der die Dateien
verwaltet. Außerdem wird ein Ordner auf der privaten Workstation erstellt in
dem alle Projektdateien gespeichert werden. Nun wird der Ordner mit dem
Server verknüpft, sodass der Entwickler jederzeit neue Dateien hochladen,
beziehungsweise
bestehende
Dateien
herunterladen
kann.
Damit
ist
sichergestellt, dass im Falle einer Korruption der Daten keinerlei Datenverluste
entstehen können.
Als nächstes wurden Unity 3D, Oculus Rift Unity 3D Integration und Visual
Studio installiert und eingerichtet. Wichtig hierbei war es, dass Unity 3D vor der
Untiy Integration installiert wird, da Unity eine Vorraussetzung für die Unity
Integration ist. Außerdem war es wichtig, dass das Unity 3D und Visual Studio
miteinander verknüpft werden, sodass in Visual Studio geschriebener Code
direkt in Unity 3D benutzt werden konnte.
In Unity 3D wurde nun eine Testszene erstellt, in der die beiden verschiedenen
Methoden getestet werden konnten. Die Szene beinhaltet nur die nötigsten
Objekte, damit keine Verfälschungen während der Evaluation entstehen
können.
Die erste Methode wurde mit der Unity Funktion „Ray()“ und einer Reihe von
Abfragen realisiert. Hierbei wurde zuerst der Raycast initialisiert und mit den
Parametern „Startpunkt“ und „Richtung“ definiert. Der Startpunkt befindet sich in
der rechten Kamera des Spielers, sodass der Strahl immer beim Spieler
anfängt. Die Richtung wurde mit einem Vektor, der vom Spieler nach vorne
geht, definiert. Dadurch wurde sichergestellt, dass der Strahl sich mit dem
Spieler bewegt. Als nächstes wurde abgefragt, ob der Strahl das GUI-Objekt,
welches in der Szene platziert ist, trifft. Falls dem so ist, startet ein Countdown,
der dem Spieler signalisiert, wie lange er noch auf dieses Objekt gucken muss.
Sobald der Spieler drei Sekunden auf dieses Objekt geguckt hat, wird das
Objekt mit der Funktion „renderer.material.color = Color.red“ auf die Farbe rot
gesetzt. Sollte der Spieler weitere drei Sekunden auf das Objekt gucken, färbt
es sich blau. Durch eine weitere Abfrage, ob das Objekt bereits rot oder blau ist,
kann die jeweils andere Farbe zugewiesen werden und somit ist dieser Prozess
mehrfach wiederholbar.
48
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Ähnlich wie bei der ersten Methode wurde bei der zweiten versucht, die Ebene
zu treffen, auf der die modifizierten GUI-Elemente liegen. Hierbei hat sich
herausgestellt, dass diese Ebene keine Kollisionsabfrage enthält. Aus diesem
Grund war es auch nicht möglich, diese Ebene mit einem Raycast
anzusprechen. Daraufhin wurde versucht, eine Kollisionskomponente zu dieser
2D Ebene hinzuzufügen, jedoch hat die komplexe Implementierung den Autor
daran gehindert, diese Bearbeitung durchzuführen. Zusätzlich wird die 2D
Ebene zur Laufzeit erstellt. Das bedeutet, dass diese nicht im Editor bearbeitbar
war, was die Modifizierung nochmals erschwerte.
6.4 Ergebnisse und Evaluationen
Fast man die Ergebnisse zusammen hat sich herausgestellt, dass die erste
Methode erfolgreich implementiert werden konnte. Jedoch konnte die zweite
Methode nicht in der gegebenen Zeit implementiert werden. Fehlende
Zugänglichkeit in der Bearbeitung der modifizierten GUI Elementen führte dazu,
dass keine Kollisionsabfrage über einen Raycast stattfinden konnte. Die
Überarbeitung der Vorgehensweise in Methode zwei hätte zudem den zeitlichen
Rahmen dieser Arbeit überschritten. Zufriedenstellend dagegen war die erste
Methode. Hierbei war es möglich die Kommunikation zwischen Raycast und 3D
Objekt herzustellen. Die erste Methode weist allerdings auch einen Nachteil auf.
Hierbei sind die Funktionen des GUI-Elements sehr eingeschränkt, da dieses
nur ein Standard Objekt in Unity 3D ist. Hier müsste der Entwickler weitere
grafische Funktionen einbauen, damit diese Methode in einem Spiel
verwendbar ist.
Bei der Evaluation der ersten Methode konnte anhand einer Fragestellung
festgestellt werden, dass der Spieler aus der entsprechenden Zielgruppe in der
Lage sein würde die GUI Funktionen zu benutzten. Diese wurde anhand des
Funktionsablaufs und der Benutzerbeschreibung bestätig. Vergleicht man diese
Methode mit einem anderen Spiel, in dem ähnliche Ablaufe stattfinden, wie zum
Beispiel Splinter Cell Double Agent, kann man erkennen, dass der Bedienablauf
durch die Oculus Rift und den neuen GUI-Elementen vereinfacht wurde.
49
Linus Meng
Entwicklung von GUI-Elementen in Unity 3D für die Oculus Rift
27.02.2014
Anhand der Ergebnisse und der Evaluation wurde die These dieser Arbeit
bestätigt. Es ist möglich, GUI-Elemente für die Oculus Rift mit Hilfe von Unity
3D zu erstellen. Es wurde zwar nur eine Methode erfolgreich umgesetzt,
dennoch konnte diese Methode überzeugen und die These bestätigen.
Sollte jedoch diese Methode in fertigen Spielen zum Einsatz kommen, muss
vorerst die These umgebaut werden, sodass verschiedene Methoden getestet
werden können. Außerdem sollten auch mehrere Evaluationsmethoden
angewandt werden, damit ein größeres Spektrum an Tests abgedeckt werden
kann. Hierbei müssten auch weitere grafische Elemente entwickelt werden,
damit Testmethoden mit Probanten durchgeführt werden können. Damit würde
sich eine optimale Testumgebung schaffen lassen, die sowohl grafische, als
auch
funktionelle
Entwicklungen
enthält
und
darauf
basierend
auch
Inspektionsmethoden und Testmethoden durchführen könnte.
50
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Literaturverzeichnis
1. http://www.mortonheilig.com/
2. http://www.focus.de/digital/computer/technik-lexikon/guigraphical-userinterface_aid_413051.html, 2012
3. http://www.microsoft.com/net, 2012
4. http://docs.unity3d.com/Documentation/ScriptReference/Physics.Raycast.html, 2014
5. Hegner, Marcus (2003): Methoden zur Evaluation von Software.
InformationsZentrum. Bonn. Online verfügbar unter
http://www.gesis.org/fileadmin/upload/forschung/publikationen/gesis_reihen/i
z_arbeitsberichte/ab_29.pdf
6. http://www.ergonomie-leitfaden.de/index.htm, 2011
7. Milling, Maike; Gornig, Thomas (2004): Usability Engeneering.
Inspektionsmethoden vs. Testmethoden. Online verfügbar unter
http://wwwswt.informatik.unirostock.de/deutsch/Mitarbeiter/michael/lehre/Usab_WS2003/vortrag_02/Aus
arbeitung.pdf
li
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Anhang
1. Dokumentation der praktischen Arbeit
Anhang auf CD
1. Bachelor Arbeit von Linus Meng
2. Screenshots und eigene Bilder
3. OculusUnityIntegrationGuide - PDF
4. Usability Engeneering Inspektionsmethoden vs. Testmethoden von
Maike Milling und Thomas Gornig - PDF
5. Methoden zur Evaluation von Software von Marcus Hegner – PDF
lii
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Dokumentation
Zeitraum:
01.09.2013 – 29.09.2013
Milestone:
Milestone 1
Tätigkeit:
Recherche
Ergebnis:
Grundlegende Literatur
Beschreibung der Aufgabe:
Innerhalb der ersten Woche war es vorgesehen, dass intensive Recherche über
folgende Themen betrieben wird:
Virtual Reality

Geschichte und Entwicklung der Virtuellen Realität

Aktueller Stand der Oculus Rift

Zukünftige Projekte
Oculus Rift

GUI- Entwicklung

Unity 3D

GUI-Entwicklung

Oculus Rift Integration
Vorgehensweise:
Zu Beginn war es wichtig, einen Überblick über das gesamte Thema zu bekommen. Da
ich bereits einige Erfahrung mit der Entwicklung von GUI-Elementen in Unity 3D hatte,
ging es darum, diese mit der Benutzung von virtueller Realität zu verbinden. Dafür ist
es notwendig gewesen, dass zunächst die Entstehung von Virtual Reality untersucht
wird.
liii
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Als nächstes musste die Oculus Rift und ihrer Unity 3D Integration untersucht werden,
um Verbindungen zwischen der Entwicklung vergangener 3D-Brillen zu erstellen.
Nun mussten andere Projekte gefunden werden, die vielleicht ähnliche Ergebnisse
erstreben.
Ergebnis:
Seit dem ersten Versuch eine 3D-Brille zu erstellen, gab es einige Projekte die
dasselbe Ziel hatten. Heute gibt es einige vielversprechende Projekte wie zum Beispiel
Oculus Rift oder Omni. Auch wenn Omni keine 3D-Brille entwickelt, versuchen sie
dennoch eine virtuelle Welt zu erstellen bzw. die Realität mit einer virtuellen Welt zu
ergänzen. Dies ist das gleiche Ziel, was die Entwickler der Oculus Rift verfolgen.
Der Versuch eine virtuelle Welt zu erstellen, ließ nicht lange auf sich warten.
Sensorama wurde von Mortan Heilig entwickelt. Sensorama ist eine Maschine, die
versucht alle menschlichen Sinneseindrücke zu simulieren. Diese Maschine kann
beispielsweise Vibrationen im Sitz, Gerüche oder ein stereoskopisches Bild erzeugen.
Bereits damals hat Mortan Heilig gezeigt, dass das Erzeugen einer virtuellen Realität
möglich ist, jedoch waren die Kosten der Produktion zu hoch, und zusätzlich traf seine
Idee meistens auf Desinteresse.
Hinweis: Ina Arendt, die als Supervisor für diese Arbeit dient, hat bei der Suche nach
geeigneten Quellen dem Autor geholfen.
Probleme:
Mein größtes Problem entstand, als ich meinen ersten Auftrag bekommen habe. Ich
wurde von Benjamin Lach gefragt, ob ich ein Programm schreiben kann, dass
Farbinformationen aus einer Bilddatei/Videodatei auslesen und speichern kann.
Daraufhin hat er mich mit meinem heutigen Auftraggeber Klaus Kaireis in Kontakt
gebracht. Da dieses Programm mehrere hundert Stunden und somit einen ähnlichen
Aufwand wie diese Bachelorarbeit beansprucht, war es mir nicht möglich diese Arbeit
bis Dezember 2013 zu beenden. Grundsätzlich ist es nicht aufwändig, Farbwerte aus
Bild- und Videodateien auszulesen, da dieses Programm aber kein Entwicklungstool
bzw. kein internes Tool, sondern gegebenenfalls weiterverkauft werden soll, muss das
liv
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
fertige Programm nicht nur komplett fehlerfrei sein, sonder auch professionell gestaltet
werden. Zusätzlich muss dieses Programm auch einen Kopierschutz enthalten. All
diese Funktionen werden wahrscheinlich insgesamt einen Zeitaufwand von 600
Stunden beanspruchen.
Verbesserungen:
In diesem Fall ist es schwierig zu sagen ob Fehler gemacht wurden. Ich hätte den
Auftrag ablehnen können und mich somit viel besser auf diese Arbeit konzentrieren
können, jedoch könnte der Auftrag das Sprungbrett für meinen Berufseinstieg sein.
Diese Chance wollte ich mir nicht entgehen lassen.
Schlussendlich stehe ich unter einem hohen Zeitdruck. Und um dies zu bewältigen,
musste ich klare Trennungen machen und mir meine Zeit für das jeweilige Projekt
blockweise einteilen.
lv
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Dokumentation
Zeitraum:
30.09.2013 – 3.10.2013
Milestone:
Milestone 2
Tätigkeit:
Erstellung der Entwicklungsumgebung
und des Kapitles „Einleitung“
Ergebnis:
Entwickungsumgebung erstellt,
Kapitel „Einleitung“ nicht fertig
Beschreibung der Aufgabe:
Bevor die Entwicklung der GUI Elementen beginnen konnte, musste die passende
Entwicklungsumgebung geschaffen werden. Dazu gehört:

Erwerbung der Oculus Rift

Das Einrichten von Unity 3D und Aktivierung der Unity 3D pro Lizenz

Das Einrichten von Visual Studio und Verknüpfung mit Unity 3D

Das Einrichten von der Oculus Rift und der Oculus Rift Unity 3D
Integration

Das Einrichten von SVN Tortoise und dem SVN Dienst auf dem Server
Zusätzlich sollte bis zum 3.10.2013 das erste Kapitel („Einleitung“) fertig gestellt
werden. Dazu gehört:

Die Beschreibung von Virtual Reality und ihrer Geschichte

Die Beschreibung vergangener Virtual Reality Projekte

Die Beschreibung aktueller Projekte im Bereich Virtual Reality
Vorgehensweise:
Es ist wichtig, dass man bei der Einrichtung dieser Entwicklungsumgebung, die
Reihenfolge einzelnen Komponenten in der richtigen reinfolge behandelt. Das
einfachste Beispiel ist, dass man die Oculus Rift Unity 3D Integration nicht vor Unity 3D
lvi
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
einrichten kann, da Unity 3D die Basis für die Integration ist. Deshalb entstand bei der
Einrichtung der Entwicklungsumgebung folgende Reinfolge:

SVN Tortoise und SVN Server

Unity 3D

Oculus Rift Unity 3D Integration

Visual Studio
SVN Tortoise und SVN Server wurden als erstes eingerichtet, da die Datensicherung
eines der wichtigsten Bestandteile dieser Arbeit bildet. Außerdem arbeitet Tortoise
unabhängig von der restlichen Entwicklungsumgebung und hat somit keinen Einfluss
auf diese. Als nächstes muss Unity 3D und die dazu gehörige Oculus Rift Integration
eingerichtet werden. Dazu gehört auch, dass eine einfache Szene entwickelt wird, in
der die jeweiligen GUI Elemente im späteren Verlauf dieser Arbeit getestet werden
können. Als letztes wird Visual Studio installiert, eingerichtet und mit Unity 3D
verknüpft. Hierbei wird Visual Studio auf die C#-Grundeinstellung gesetzt, da in Unity
3D man entweder mit C#, JavaScript oder Boo programmieren kann. Außerdem ist der
Großteil der Oculus Rift Integration in C# programmiert worden, daher liegt es nahe,
dass auch weitere Programmteile in C# programmiert werden.
Ergebnis:
Die Entwicklungsumgebung wurde erfolgreich erstellt. Hierbei wurden Unity 3D, Unity
3D Integration und Visual Studio erfolgreich miteinander verknüpft. Nun lassen sich
neue Code-Dateien in Visual Studio schreiben und direkt in Unity 3D ausführen.
Zusätzlich lassen sich auch alle Dateien aus der Oculus Rift Unity Integration
bearbeiten. Übergreifend wurde in allen Programmen C# als Programmiersprache
festgelegt und verwendet.
Bis zum 3.10.2013 wurde das Kapitel „Einleitung“ nicht fertig gestellt. Das Einrichten
der Entwicklungsumgebung benötigte bis zu diesem Zeitpunkt alle zeitlichen
Ressourcen.
lvii
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Probleme:
Das Einrichten von SVN Tortoise verlief problemlos, sobald die richtigen Kommandos
für das Ansprechen des SVN Servers herausgefunden wurden. In diesem Fall musste
der Server über https-Protokoll aufgerufen werden. In Bezug auf das Hinzufügen und
Aktualisieren der Dateien auf dem Server mussten immer noch alle Dateien manuell
hinzugefügt werden.
Verbesserungen:
Die Aktualisierung der Dateien ließe sich mit einem Plug-In für Visual Studio
vereinfachen. Jedoch hat der Autor keinerlei Erfahrung mit diesem Tool und die
Einarbeitung wurde wahrscheinlich mehr Zeit in Anspruch nehmen, als dass das Tool
diese wieder gut machen könnte.
lviii
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Dokumentation
Zeitraum:
3.10.2013 – 22.12.2013
Milestone:
Milestone 3
Tätigkeit:
- Fertigstellung des Kapitels
Grundlagen
- Entwicklung der beiden Methoden
zur Darstellung von 3D GUIElementen
Ergebnis:
- Grundlagen Kapitel fertig
- Methode eins fertig
- Methode zwei nicht realisierbar
Beschreibung der Aufgabe:
Das Grundlagen-Kapitel sollte folgende Unterkapitel enthalten:
1. Grafical User Interface
-
Beschreibung eines GUIs und ihrer Funktion
2. Oculus Rift Unity Integration
-
Beschreibung der Unity Integration für die Oculus Rift.
-
Genauer
Beschreibung
der
einzelnen
Funktionen
und
deren
Zusammenhang in Bezug auf die zu entwickelnden Methoden
3. Microsoft Visual Studio
-
Beschreibung der Funktionen von Visual Studio
-
Warum wurde Visual Studio gewählt und nicht die eingebaute
Entwicklungsumgebung MonoDevelop?
4. Game Engine
-
Beschreibung der verwendeten Game Engine Unity 3D
-
Warum wurde Unity 3D als Game Engine verwendet?
-
Welche Vor- und Nachteile bietet Unity 3D?
5. Versionierungsdienst
-
Warum wird ein Versionierungsdienst verwendet
lix
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
-
Welche Vor- und Nachteile bietet ein Versionierungsdienst
6. Raycast
-
Was ist ein Raycast
-
Warum wird ein Raycast in dieser Arbeit und in
beiden Methoden
verwendet?
Nach der Fertigstellung des Grundlagenkapitels sollte die Entwicklung der zu
untersuchenden Methoden eins und zwei beginnen. Hierbei sollten zwei Methoden
erarbeitet werden, die die Benutzung der Oculus Rift in Bezug auf GUI-Elemente
vereinfachen. Beide Methoden sollten sich eine Eigenschaft teilen, damit für die
Entwicklung eine gemeinsame Grundlage gegeben ist.
Vorgehensweise:
An dieser Stelle wurde starke Grundlagenforschung betrieben, um sicherzustellen,
dass alle Programme und Methoden richtig verstanden und beschrieben worden sind.
Dazu wurden Webseiten der jeweiligen Hersteller /Entwickler gelesen und wichtige
Abschnitte abgespeichert. Zusätzlich wurden mögliche Zusammenhänge anhand von
Mind-Maps dargestellt.
Bei der Entwicklung der beiden Methoden zur Entwicklung von 3D GUI-Elementen,
wurde zuerst nach Evaluationsmethoden für Software gesucht. Danach wurden diese
genauer eingeschränkt. Daraufhin wurden zwei Methoden entwickelt, die zum einen
vergleichbar sind und zum anderen anhand der Evaluationsmethode untersucht
werden können.
Ergebnis:
Herausgestellt hat sich, dass GUI-Elemente bereits in den 80ern in dem C64 Computer
von Comodore befunden haben. Diese dienen im Allgemeinen dazu die Benutzung
eines Computers für den Verbraucher zu vereinfachen. Hierzu werden einzelne order
mehrere Kommandozeilen in eine grafische Oberfläche eingebaut, die für den
Benutzer einfacher zu verstehen und zu behalten sind.
lx
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
In der Unity Integration wurde herausgefunden, dass es ein Objekt mit dem Namen
„guiHelper“ gibt, die die 2D Ebene der GUI-Elemente aus der Kamera entfernt und
diese vor den Charakter platziert. Mit Hilfe dieser Ebene lassen sich Unity 3D GUIElemente anzeigen.
Es hat sich herausgestellt, dass man Unity 3D und Visual Studio miteinander
verknüpfen kann, sodass geschriebener Code in Visual Studio direkt in Unity 3D
ausgeführt werden kann.
Zusammenfassend haben sich einige Vorgehensweisen und Funktionen in den
einzelnen Programmen als geeignet erwiesen und ermöglichen eine Evaluation
anhand einer Inspektionsmethode. Mit Hilfe des Kognitiven Verfahrens sollen die
Methoden am Ende evaluiert werden. Dieses Verfahren überprüft eine Software
anhand von systematischen Fehlern und Fragestellungen. Diese werden anschließend
durch einen Gutachter geprüft.
Probleme:
Es hat sich herausgestellt, dass der verringerte Zeitraum, der durch die beruflichen
Tätigkeiten des Autors entstanden ist, nur eine Evaluationsmethode in dieser Arbeit
zulässt. Dies führt dazu, dass das GUI in seiner Gesamtheit nicht repräsentativ
dargestellt werden kann.
Verbesserungen:
Aus zeitlichen Gründen kann in dieser Arbeit nur eine einzige Evaluationsmethode
angewendet werden. Um eine repräsentative Darstellung und Evaluation eines
gesamten GUIs zu erstellen, müsste man in einer weiteren Arbeit eine Kombination
aus mehreren Inspektionsmethoden anwenden, beziehungsweise auch Testmethoden
und grafische Elemente einbinden.
lxi
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Dokumentation
Zeitraum:
22.12.2013 – 31.01.2014
Milestone:
Milestone 4
Tätigkeit:
- Fertigstellung des Kapitels Methodik
und Durchführung
Ergebnis:
Durchführung und Methodik
abgeschlossen
Beschreibung der Aufgabe:
Das Methodikkapitel sollte folgende Unterkapitel enthalten:
1. Evaluationsmethode
2. Zielgruppe der Evaluationsmethode
3. Methodenanwendung
4. Beschreibung der Methoden zur Entwicklung der GUI-Elemente
5. Abschließender Vergleich der Methoden
Innerhalb dieser Kapitel sollten Zusammenhänge zwischen Evaluation der der
entwickelten Methoden erläutert werden.
Das Durchführungskapitel sollte die komplette Beschreibung der Entwicklung
enthalten. Hiezu gehört:
1. Das Entwickeln der beiden Methoden
2. Die Implementierung der beiden Methoden
In diesem Kapitel sollten alle Programme in Bezug auf die entwickelten Methoden
betrachtet werden.
lxii
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Vorgehensweise:
Mit dem Methodik Kapitel wurden Methoden ausführlich beschrieben und deren
Anwendung begründet. Vorrausetzungen für die nachfolgende Evaluation war es, die
angewandte Inspektionsmethode zu erläutern und ihre Durchführung vorzubereiten.
Um die Entwicklung klar widerspiegeln zu können, wurden sämtliche Veränderungen
und Neuerung aufgelistet und beschrieben. Dabei wurde genau auf Funktionalität
geachtet.
Ergebnis:
In dem Methodikkapitel wurde die Vorgehensweise klar definiert und auf die darauf
folgende Evaluation geachtet. Hierbei wurden Funktionen mit Hilfe von Fragestellungen
und Abläufen definiert. Zusätzlich wurde eine Zielgruppe definiert an die sich das
Produkt Oculus Rift wendet. Anschließend wurden beide entwickelten Methoden und
deren Zusammenhänge erläutert. Abschließend wurde begründet, warum die
Evaluationsmethode in dieser Arbeit Anwendung findet.
Um nach der Durchführung eine Evaluation durchführen zu können, wurde bei der
Erstellung der Szene darauf geachtet, möglichst wenig Objekte zu verwenden, damit
bei der Evaluation keine Verfälschungen auftreten. Hierbei entstand eine Szene, die
nur aus einem steuerbaren Charakter, einem GUI-Element und einem Boden bestand.
Sämtliche Funktionen wurden innerhalb des GUI-Elements und des Charakters
implementiert.
lxiii
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Probleme:
Wie schon im vorherigen Milestone beschrieben, hat sich erneut herausgestellt, dass
es mehrere Methodiken bedarf, um eine repräsentative Darstellung für die Industrie
herstellen zu können. Es wurde erst im Nachhinein festgestellt, dass eine Zielgruppe
definiert werden müsste. Dies stellte sich heraus, als die Vorbereitung zur Evaluation
getroffen wurde. Das Kognitive Verfahren setzt voraus, dass die Evaluation anhand
von Fragestellung durchgeführt wird. Jedoch wird diese Fragestellung in Bezug auf die
Fachkenntnisse der Benutzer erläutert.
Verbesserungen:
Schlussfolgernd hätte die Evaluationsmethode genauer studiert werden müssen, damit
diese im späteren Verlauf der Arbeit nicht mehr hätte angepasst werden müssen.
Möglicherweise hätten weitere Quellen das Verständnis der Evaluationsmethode
besser beschrieben und hätten daher dem Autor ein klareres Bild dieser Methode
gezeigt.
lxiv
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Dokumentation
Zeitraum:
31.01.2014 – 27.02.2014
Milestone:
Milestone 5
Tätigkeit:
Fertigstellung der Kapitel Ergebnisse
und Zusammenfassung
Überarbeitung der Formalen Vorgaben
Ergebnis:
Schriftlicher Teil der Bachelor Arbeit
fertig gestellt.
Beschreibung der Aufgabe:
Abschließend
zu
dieser
Arbeit
sollten
die
Kapitel
„Ergebnisse“
und
„Zusammenfassung“ geschrieben werden.
In das Ergebniskapitel gehören zum einen die Zusammenfassung der entwickelten
Methoden
und
deren
erfolgreiche
Implementierung,
und
zum
anderen
die
darauffolgenden Evaluation anhand der Überprüfungsmethode.
Zuletzt sollten noch sämtliche Formale Vorgaben erfüllt erwerden, wie zum Beispiel:
korrekte Zitierweise und Aufbau der Arbeit.
Vorgehensweise:
Zuerst musste erklärt werden, welche Vor- und Nachteile sich in den beiden
entwickelten Methoden ergeben haben. Darauf folgte der Vergleich der beiden
Methoden und ob diese sich in der Industrie anwenden ließen. Anschließend wurden
beide Methoden anhand der vorbereiteten Überprüfung evaluiert. Dabei war zu
beachten, die Eigenschaften der Überprüfung (Fragestellungen und Zielgruppe) zu
verfolgen.
Danach wurde die komplette Arbeit zusammengefasst. Jedes Kapitel wurde in kürzerer
Form umgeschrieben und unwichtige Punkte wurden wegelassen.
lxv
Dokumentation der Bachelor Arbeit von Linus Meng
27.02.2014
Ergebnis:
Es hat sich herausgestellt, dass die zweite Methode – welche auf Raycast und
bestehende GUI-Elemente basiert – nicht in dieser Arbeit anwendbar ist. Dem Autor ist
es nicht gelungen, diese Methode in der gegebenen Zeit zu implementieren.
Die erste Methode hingegen war erfolgreich. Sie konnte sowohl implementiert, als auch
anschließend evaluiert werden.
Probleme:
Es traten einige Probleme mit der zweiten Entwicklungsmethode auf. Hierbei war es
nicht möglich, mit einem Raycast die 2D Ebene anzusprechen. Grund dafür war die
fehlende Kollisionskomponente. Es wurde versucht, diese in den bestehenden Code
der Oculus Rift Entwickler einzubauen, jedoch erwies sich das als sehr schwierig, da
die 2D Ebene zur Laufzeit erstellt wird, was die Bearbeitung im Editor nicht mehr
möglich machte.
Verbesserungen:
Zusammenfassend hätte man hier eine alternative Methode entwickeln können, jedoch
ließ der sehr knappe Zeitrahmen dies nicht zu. Möglicherweise hätte auch ein tieferes
Verständnis der Oculus Rift Unity Integration dabei geholfen, dieses Problem zu lösen.
Hier hätte man zurück in die Grundlagenforschung gehen müssen, um eine genauere
Recherche durchführen zu können.
lxvi