Für die standardmäßige Nutzung für Lehre und Forschung, sehen Sie bitte in die [ReadMe-Datei](https://gitup.uni-potsdam.de/mm_vr/vr-klassenzimmer/blob/master/README.md). Diese Seite behandelt das notwendige Setup um Änderungen am Projekt vornehmen zu können und es für eigene Arbeiten (z.B. Abschlussarbeiten) zu verwenden.
## Installationen
Zunächst benötigen Sie einige Programme um eChalk im Entwicklermodus zu starten. Hier werden diese Programme aufgelistet und Beispielquellen verlinkt
*[git](https://git-scm.com/downloads) ist ein Versionskontrollprogramm, mit dem Sie die aktuelle Version des Projekt herunterladen können und ihre Änderungen versionieren.
*[gitExtensions](http://gitextensions.github.io/) ist eine GUI für git. Es gibt diverse GUIs für git, jedoch haben einige von denen bekannte Probleme mit unity, weshalb zu Extensions geraten wird.
*[git lfs](https://git-lfs.github.com/) ist eine Erweiterung für git, die sich um Dateien kümmert, die nicht menschenlesbar sind, da sie zu groß oder binär sind.
*[unityHub](https://unity3d.com/de/get-unity/download) bietet eine Übersicht über Ihre Unityprojekte, verwaltet verschiedene Unity-Versionen und bietet viele Tutorials und hilfreiche Addons.
*[unity](https://unity3d.com/get-unity/download/archive) ist eine GameEngine und die Entwicklungsumgebung der VR Umgebung von eChalk. Um die benötigte Version herauszufinden, nutzen Sie unityHub, fügen Sie das Projekt dort hinzu und laden Sie die vorgeschlagene unity Version herunter um das Projekt zu öffnen. *ACHTUNG* beim Nutzen einer falschen unity-Version können unerwartete Fehler auftreten und die Zusammenarbeit mit anderen Entwicklern ist quasi unmöglich.
*[nodeJS](https://nodejs.org/en/download/) ist eine Entwicklungsumgebung für Webanwendungen basierend auf JavaScript. In diesem Projekt ist nodeJS für das Frontend verantwortlich.
*[redux Toolkit](https://redux-toolkit.js.org/introduction/quick-start) ist ein Package für nodeJS und versorgt das Frontend mit notwendigen Funktionen.
*[electron](https://www.electronjs.org/docs/tutorial/installation) bietet für das Frontend eine Browser-unabhängige Oberfläche und stellt so das Frontend als vollwertige App dar.
## Einarbeitung
Nachdem nun eine ganze Batterie an neuer Software auf Ihrem System zu finden ist, stehen Sie vor einem historisch gewachsenen Projekt mit diversen Entwicklern. Dies kann beim ersten Kontakt überwältigend sein und Sie wünschten sich etwas mehr Übersicht. Diese Probleme soll dieses Kapitel ansprechen
### Einen Überblick verschaffen
Je nachdem in welchem Bereich Sie entwickeln wollen, müssen Sie sich natürlich mit der Entwicklungsumgebung auseinander setzen. Hierfür gibt es diverse Quellen auf YouTube, Stackoverflow, usw. Es werden Ihnen natürlich keine konkreten Tipps zu eChalk gegeben, jedoch ist es sinnvoll zu erfahren wie die Entwicklungsumgebung aufgebaut ist. Im Folgenden wird hier auf die Struktur der VR-Umgebung eingegangen und _kurze Eingewöhnungsübungen werden markiert_.
Zum derzeitigen Stand (06.01.2021) gibt es zwei Versionen des VR-Klassenzimmers. Eine Version ist auf die Nutzung mit einer Vive-Brille spezialisiert (master branch) und die andere auf die Oculus-Brillen (oculusVersion branch). Je nach Hardware sollten Sie also die richtige Version in git (extensions) auschecken. Ist das Projekt geöffnet, sehen Sie eine Ordnerhierarchie. Alle Assets (Ordner) unter "AssetStore" sind von Drittentwicklern entworfen und wurden nicht maßgeblich geändert. In den Ordnern beginnend mit "own" wie "ownScripts", "ownPrefabs", usw. liegen eigene Entwicklungen. Der Ordner "Scenes" beinhaltet verschiedene Sitzordnungen für die virtuelle Klasse und Tutorial- oder Menü-Umgebungen. Für eigene Tests zur Eingewöhnung in das Projekt ist der Ordner "Scenes" zu empfehlen, wobei "Testumgebungen" vor dem ersten git Push wieder entfernt werden sollten. _Um eine Orientierung aufzubauen, versuchen Sie zum Beispiel das selbst geschriebene Script zu finden, welches ein Audio-Ambiente für die Szenen verwaltet._
Mit einem Doppelklick auf ein Script öffnet sich ihre IDE für C#, im Standardfall ist das visual Studio. Machen Sie sich vertraut mit der Programmiersprache und schauen Sie sich vorhandene Scripts und unsere [Standards](Standards) an. Unity bringt diverse Funktionen und Klassen mit in die Welt von C#. So ist z.B. das Interface "MonoBehaviour" ein Schlüsselwort, welches ein Script dazu befähigt an ein GameObject angehangen zu werden, während das Interface "Editor" Funktionen bereitstellt um im unityEditor Buttons und ähnliches hinzuzufügen. _Untersuchen Sie das Script "AmbientSound.cs" nach einer Editor- und nach einer MonoBehaviour-Klasse. Nutzen Sie danach Funktionen Ihrer IDE um die static class "MenuDataHolder" zu untersuchen. Wofür glaube Sie, ist diese Klasse da?_
Zurück zum Editor sehen Sie die Scene-View, in der alle 3D-Objekte der Welt dargestellt werden. Öffnen Sie die Szene "FrontalScene" aus dem "Scene"-Ordner und schauen Sie in die GameObject Hierarchie. Klassenraumszenen sind alle ähnlich sortiert: Teacher, Controls, Sun, ... sind GameObjects, also Objekte denen unity ein Verhalten, Ort und eine Orientierung zuweist. Im GameObject "classroom-scaler" Befinden sich die Dinge, die der Nutzer sehen kann, so auch die virtuellen SchülerInnen oder Tisch / Stühle. _Um sich hier zurecht zu finden, ist es empfehlenswert ein wenig Zeit in die Erkundung zu investieren und zum Beispiel das GameObject der Fensterwand zu finden. Um GameObjects zu finden, die ein bestimmtes Script als Component tragen, kann man die Suchfunktion der Hierarchie nutzen, z.B. mit ref:Assets/ownScripts/Atmosphere/AmbientSound.cs ._
Unity bietet sehr viele Optionen, Fenster und Packages, und eine nicht unerhebliche Teilmenge davon wird auch in dem Projekt verwendet. Wenn Sie sich ein paar Stunden mit dem Projekt beschäftigt haben, wie hier vorgeschlagen, finden Sie sicherlich die richtige Stelle um Ihre Entwicklungen einzubauen. Sollten Sie konkrete Fragen zu Ihrer Entwicklung haben, sind Sie schon sehr weit gekommen und Internetquellen helfen Ihnen sicherlich weiter. Sollten Sie sich einfach verloren und überfordert in dem Projekt fühlen, trotz dieser Einleitung, melden Sie sich gern bei Axel Wiepke. Dieser freut sich vorallem über Verbesserungsvorschläge für dieses Tutorial um künftigen Entwicklern einen stressfreien Einstieg zu ermöglichen.
## Theoretische Grundlagen
Da dieses Projekt in erster Linie ein Forschungsprojekt ist, sollten Entwicklungsentscheidungen bestmöglich auf wissenschaftlichen Quellen beruhen. Bereits erforschte Umstände mit dem Projekt eChalk finden Sie [hier](https://www.uni-potsdam.de/de/multimedia/projekte/anwendungen/vr-klassenzimmer). Eine Wissenssammlung über genutzte Quellen der Entwicklungen wird hier auf Grund der Übersichtlichkeit nicht verlinkt. Ausgearbeitete Veröffentlichungen werden aber auf der verlinkten Seite geteilt und studentische Arbeiten, in Zukunft auch auf Wunsch bereitgestellt.