Google Cardboard & Virtual RealityEEC 687 MOBILE COMPUTINGFINAL REPORTDECEMBER 5TH, 2016Jaimal Bhairavia 2668554Arpit Patel 2657673Supervisor Dr. Chansu Yu

1.0 IntroductionWith the rise in the virtual reality paradigm, we were keen on exploring the possibilitiesand gaining a firsthand experience of the same. The aim of this project was to fulfill theabove criteria and develop an application on a platform that supported GoogleCardboard and its Software Development kit. We were lucky as we got a chance toexplore the Unity software as we choose it to be the platform for development.This report presents a detailed explanation of the process of developing the applicationthat we have named MazedOut, and the learnings of virtual reality, Unity software, andthe Google cardboard Software development kit. All the technical aspects of the projectare covered.All the issues faced and their solutions are also discussed in the later section of thisreport. It has been an indulging process and the world of virtual reality is veryinteresting and vast and the possibilities are humungous!2.0 Virtual RealityIn its mere form, virtual means something which you see but doesn’t exist in real.Similarly, Virtual reality (VR) is a computer-generated environment that lets youexperience a different reality with different senses like vision, hear, touch and smell insome cases. It includes simulating user’s physical presence in this virtual environment.Instead of viewing a screen in front of them, users are immersed and can interact with3D worlds. VR are displayed either on a computer monitor, a projector screen or in mostcases virtual reality headsets also known as head mounted devices [7]. Virtual realityhas a plethora of areas where it can be applied and used for advancing in them.3.0 Google CardboardGoogle cardboard is a wearable device developed by google in 2014 which acts as agateway to experience virtual reality in a simple, fun and affordable way. It holds asmartphone in on one side and has the viewing lens on the other as shown in figure 1.The 3D VR application is then viewed through the cardboard to experience it in virtualreality. Cardboard is intended towards encouraging interest, low cost and increasedevelopment on the Virtual Reality ground. The cardboard also has a clicker buttonwhich when pressed, the screen is tapped using the internal cushion connected to thisbutton. We are going to use google cardboard as our head mounted display forMazedOut [6].EEC 687 FINAL REPORT PAGE 1

Figure 1: Google cardboard4.0 Unity and its attributesUnity is a game engine developed by Unity technologies. It is a cross platform enginewhich is used to develop games for consoles, PC, website and mobile devices. Unity isan advanced software that figures out its settings and properties of the game inaccordance to the platform it is developed for. It also gives the freedom to test and buildthe game for multiple platforms. Unity offers 2D & 3D support and hence is vastly usednowadays. Moreover, the coding for unity components and functions are done in C#which is an object-oriented programming language. All these attributes made usshortlist our game development software to Unity as we could put our knowledge andimagination into a virtual reality while learning and exploring it [1].5.0 Software Development KitA software development kit (SDK) is typically a set of software development tools thatsupports the creation of applications for a certain software framework, hardwareplatform, computer system, video game console, operating system, or similardevelopment platform. Google provides distinct development kits for developing VRapplication on different platforms: Android, iOS, Unity, Unreal.5.1 Google Cardboard SDKAs discussed in section 3.0, cardboard is the easiest way to get started withexperiencing virtual reality on an android phone. Also, SDK for Unity is alsoavailable with all documentation about the scripting. Scripting is a vital part of thegame development and will be discussed in the further sections. We’ll see a fewimportant components of the Google cardboard SDK [5] belowEEC 687 FINAL REPORT PAGE 2

5.1.1SDK Components5.1.1.1 GVR mainGVR Main is a pre-fabricated component of the SDK that replaces thenormal main camera in the unity project. This prefab contains a scriptattached to it which controls the basic VR mode settings. Further, it hasa head object as a child. The head has main camera as a child object withthe stereo controller script attached to it. And the main camera has leftand right stereo eye camera. So GVR Main is the most importantcomponent without which the game cannot function. GVR ReticleGoogle Virtual Reality Reticle is also a prefab that adds an interactivegaze based reticle. It behaves like a small pointer in the local space thatcasts itself exactly in the position of the user’s focal focus and growswhen it intersects with an object. GvrReticle is a class file which inheritsfrom MonoBehaviour class file. It also has some functions of its own thatcan be utilized towards the development. From those function, we canadjust the reticle growth speed, enable/disable gaze, setting up eventwhen user intersects an object with a ray projected form the camera. Thisis an essential component as we will be using it immensely in our gameto carry out different actions.Figure 2: Reticle on a cubeEEC 687 FINAL REPORT PAGE 3

6.0 MazedOutWe have named our application MazedOut. It is an VR game which revolves around theconcept of the player finding his or her way out of a maze while collecting as many coins aspossible which eventually would increase their score.6.1 GameplayThe game starts with the display of a window which has a start button. The playerneeds to select this button and click on it which changes the scene and the gamestarts. Further, the player navigates through the maze. Since an auto walk feature isimplemented in the game, the player would walk automatically and in case he orshe needs to stop, all that needs to be done is to look at the ground. The maze has atotal of 40 coins’ places randomly. The players must collect as many coins as possiblebefore they exit the maze. To collect the coin, they need to locate it and click onthem twice, as soon as it seen irrespective of the distance and once more when theplayer is in close proximity of the coin. The feature on clicking twice is done onpurpose to give the player the feel of virtual reality of the coins. Each coin is worth10 points. Hence the final score is calculated according the number of coinscollected. After the player finds the exit gate and walks through it, the game endsand the final score is displayed with two other options on the Scoreboard. Restartand exit are the options. Restart button would lead to restarting the game all overagain from the same start point in the maze. Exit button would simply exit theapplication.6.2 FeaturesThe main features of MazedOut are as follows: Gameplay Instructions on the main menu Auto Walk of the player Stopping by looking at the ground Coins change color to green on first click Coins collected and score updated on second click 3 scenes interfaced to create main menu and scoreboard Final score displayed on the scoreboard Game restarts when restart option selected6.3 Development PhasesThis section covers an overview of MazedOut during its development phases. Wehave bifurcated them into 4 major phases. They are briefly discussed below6.3.1Initial PhaseThe initial phase of the game included delving into the basic concepts ofunity and the reticle functions of the Google cardboard SDK. The cardboardSDK needs to be imported in the unity project to use the prefabs that belongEEC 687 FINAL REPORT PAGE 4

to it. As discussed above, GVR Reticle is one of them. We tried to create aproject with a set of cubes that changed color while a pointer click wasdetected on them. The click event and actions taken on them wereconfigured. The project and the game window for this project are as follows:Figure 3.a: Project windowFigure 3.b: Game window6.3.2First MazeThis version of the application was created to see how a maze can be createdin unity. We followed the following steps: A plane is created and its size is transformed to a scale of 2 to make ourworkspace large enough to comprise the maze. An image of a maze template is downloaded from the internet andimported in unity and superimposed on the plane. Figure 3.a shows theplane after the superimposing.EEC 687 FINAL REPORT PAGE 5

Figure 4.a: Plane in the project window We start creating walls by inserting cubes in different size andorientation. The walls in the image below are cubes stretched out interms of axes and a grass material is applied on them. All these walls canhave the same property and hence one wall is created and the others areduplicated and arranged. We have a maze as shown in the fig. below.Figure 4.b: First maze – Project WindowEEC 687 FINAL REPORT PAGE 6

Figure 4.c: First maze – Game window6.3.3Expanded Maze & CanvasThe previous phase had a maze which was small and couldn’t accommodatethe requirements of our game. This lead to expanding the maze in terms ofscale. Also, the maze was changed aesthetically. The following imageshowcases the expanded maze.Figure 5: Expanded mazeEEC 687 FINAL REPORT PAGE 7

Another development under this phase was implementing the canvas and itsattributes. We studied the properties of the canvas and designed one to beused as a scoreboard for our game. Buttons, Text, and images were added tothe canvas to create the scoreboard.Figure 6: Scoreboard Canvas6.3.4Final Maze with coinsThe final version of the game saw the modification of the expanded mazewith the addition of coins and the display of number of coins in the game. Atotal of 40 coins were added. The coins’ count is updated whenever a coin ispicked up. An image of the maze with the coins is shown below. The yellowobjects represent the coins:Figure 7: Maze with coinsEEC 687 FINAL REPORT PAGE 8

Also, the scoreboard canvas was aesthetically modified in terms of fonts andcolors of the buttons. An image is shown to show that.Figure 8: Modified Scoreboard7.0 Scripts and Scripting in UnityScripting is the most integral part of the Unity. Developers can create any and everykind of function through scripts. Every function, irrespective of it being predefined ordeveloper defined, is always created in terms of scripts coded in C#. There is one mainscript which controls overall behavior of the game. When we create a new script, twolibraries: UnityEngine and System.Collections and two functions: Start() and Update,are automatically implemented. The libraries include some essential predefinedfunctions. Start function returns nothing, but is used for initializing variables andGameObjects which will be used later in the script. Update function works in a differentway, it is called on every frame [2]. Explaining this, in unity, the frame per second (FPS)is 60 by default. This means that the motion in the application is calculated per theframe rate. Hence, any object that needs to considered for further actions, they can beaddressed in the update function. In MazedOut, we have used this functionality to movegameplayer in direction of his focal direction. Update function is called 80 times persecond because the FPS is 80.EEC 687 FINAL REPORT PAGE 9

7.1 Scripts implemented in MazedOutMazedOut has three scripts. One for starting the game second to manage everythingrelated to the score, main menu, and the scoreboard. The last one is used to displaythe scoreboard and options of restart and exit (Figure 8)7.1.1First Script: Instruction for playing the game and button to start the gameStart.cs script: It has only one function which will be called when the userclicks on the start button.using UnityEngine;using System.Collections;public class Start : MonoBehaviour {public void startgame () {SceneManager.LoadScene("Final Maze");}}7.1.2oSecond script: We have added two more libraries named UnityEngine.UIfor displaying text, buttons, canvas and etc, UnityEngine.SceneManagementfor loading different scenes and storing information when user move fromone level to another level.Variables used:Walking: To control the moving of the playerCoincollected: Counting coinsTotalscore: Tracking overall score of the projectCoin: To display the number of coins collected amidst the game.control.cs script:using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityEngine.SceneManagement;public class Control : MonoBehaviour{private bool walking false;//For tracking motion of First Playerprivate Vector3 spawnPoint;//Starting point initializationint coincollected;//For counting coins collectedint totalscore;//For counting overall scorepublic Text coins;void Start ()// Used it for initialization of variables{totalscore 0;EEC 687 FINAL REPORT PAGE 10

spawnPoint transform.position;coincollected 0;PlayerPrefs.SetInt ("Final Score", FSO);}void Update ()// Update is called once per frame{if (walking){transform.position transform.position Camera.main.transform.forward * .5f * Time.deltaTime;}if (transform.position.y -10f) //for checking angle{transform.position spawnPoint;}Ray ray Camera.main.ViewportPointToRay (new Vector3 (.5f, .5f, 0));RaycastHit hit;if (Physics.Raycast (ray, out hit)){if ( ("Plane")){walking false;}else{walking true;}}Ray ray1;if (Input.GetMouseButtonDown(0)) //For checking clicked object andincreasing count if it is coin{ray1 Camera.main.ScreenPointToRay (Input.mousePosition);if(Physics.Raycast(ray1, out hit)){if (hit.collider.tag n ();EEC 687 FINAL REPORT PAGE 11

updatescore ();}}}if ger.LoadScene("Scoreboardscene");}}public void updatecoin (){//For counting collected coinscoinco