Create /en/Developer introduction authored by Fabian John's avatar Fabian John
For standard use in teaching and research, please see the [ReadMe file](https://gitup.uni-potsdam.de/mm_vr/vr-klassenzimmer/blob/master/README.md). This page covers the setup necessary to make changes to the project and use it for your own work (e.g. theses).
## Installations
At first you need some programs to run eChalk in developer mode. These programs are listed below and sample sources are linked to them.
* [git](https://git-scm.com/downloads) is a version control program that allows you to download the current version of the project and do versioning of your changes.
* [gitExtensions](http://gitextensions.github.io/) is a GUI for git. There are various GUIs for git, however some of them have known issues with unity, so use of gitExtensions is advised.
* [git lfs](https://git-lfs.github.com/) is an extension for git that takes care of files that are not readable by humans because they are too large or binary.
* [unityHub](https://unity3d.com/de/get-unity/download) provides an overview of your Unity projects, manages different Unity versions and offers many tutorials and helpful add-ons.
* [unity](https://unity3d.com/get-unity/download/archive) is a GameEngine and the development environment of eChalk's VR environment. To find out the version you need, use unityHub, add the project there and download the suggested unity version to open the project. *WARNING* using wrong unity version may cause unexpected errors and cooperation with other developers is almost impossible.
* [nodeJS](https://nodejs.org/en/download/) is a development environment for web applications based on JavaScript. In this project nodeJS is responsible for the frontend.
* [redux Toolkit](https://redux-toolkit.js.org/introduction/quick-start) is a package for nodeJS and provides the frontend with necessary functions.
* [electron](https://www.electronjs.org/docs/tutorial/installation) provides a browser-independent interface for the frontend and thus presents the frontend as a full-fledged app.
## Training
Now that there is a whole load of new software on your system, you are faced with a historically grown project with various developers. This can be overwhelming at first and you wish you had a little more clarity. These are the issues this chapter is intended to address.
### Get an overview
Depending on the area you want to develop in, you will of course need to get to know the development environment. There are various sources for this on YouTube, Stackoverflow, etc. Of course, no concrete tips on eChalk will be given to you, but it is useful to know how the development environment is structured. In the following, the structure of the VR environment is discussed and _short familiarization exercises are highlighted_.
As of this writing (06/01/2021), there are two versions of the VR-classroom. One version is specialized for the use with Vive glasses (master branch) and the other one is specialized for Oculus glasses (oculusVersion branch). So depending on your hardware, you should check out the correct version in git (extensions). Once the project is open, you will see a folder hierarchy. All assets (folders) under "AssetStore" are designed by third party developers and have not been significantly modified. The folders starting with "own" like "ownScripts", "ownPrefabs", etc. contain own developments. The folder "Scenes" contains different seating arrangements for the virtual class and tutorial or menu environments. For own testing to get used to the project, the "Scenes" folder is recommended, although "test environments" should be removed before the first git push. _To build up an orientation, try for example to find the self-written script that manages an audio ambience for the scenes._
Double-click on a script to open your IDE for C#, which in the default case is Visual Studio. Familiarize yourself with the programming language and look at existing scripts and our [Standards](Standards). Unity brings various features and classes to the world of C#. For example, the interface "MonoBehaviour" is a keyword that enables a script to be attached to a GameObject, while the interface "Editor" provides functions to add buttons and the like in the unityEditor. _Examine the script "AmbientSound.cs" for an Editor class and for a MonoBehaviour class. Then use functions of your IDE to examine the static class "MenuDataHolder". What do you think this class is for?_
Back to the editor, you will see the Scene-View, where all 3D objects in the world are displayed. Open the "FrontalScene" scene from the "Scene" folder and look at the GameObject hierarchy. Classroom scenes are all sorted similarly: Teacher, Controls, Sun, ... are GameObjects, i.e. objects to which unity assigns a behavior, location and orientation. In the GameObject "classroom-scaler" are the things that the user can see, including the virtual students or table / chairs. _To find your way around here, it is recommended to invest a little time in exploration and find, for example, the GameObject of the window wall. To find GameObjects that carry a particular script as a component, you can use the search function of the hierarchy, e.g. with ref:Assets/ownScripts/Atmosphere/AmbientSound.cs._
Unity offers a great number of options, windows and packages, and a not insignificant subset of them is also used in the project. If you have spent a few hours with the project, as suggested here, you will surely find the right place to include your developments. Should you have specific questions about your development, you've already come a long way and internet resources will certainly help you. If you simply feel lost and overwhelmed in the project, despite this introduction, feel free to contact [Axel Wiepke](mailto:wiepke@uni-potsdam.de). He is especially looking forward to suggestions for improvement of this tutorial to enable future developers a stress-free start.
## Theoretical foundations
Since this project is primarily a research project, development decisions should be based on scientific sources to the best of our ability. Circumstances already researched with the eChalk project can be found [here](https://www.uni-potsdam.de/de/multimedia/projekte/anwendungen/vr-klassenzimmer). A knowledge collection of used sources of developments is not linked here for clarity. However, elaborated publications will be shared on the linked page and student works, in the future will also be provided on request.
## Taking credit for your work
After a substantial contribution has been made to the code, your name can be included as the developer of the software. So as soon as the software is referenced, your name will also be mentioned. To be cited in this way, please modify the "citations.cff" by adding your data to it, in accordance with the present style.