Due: Apr. 15, 2020 @ 11:59 PM

Provided Material:

Important Notes

  1. Read the submission instructions carefully! If you are missing some files, but we can still grade, you will lose 20% of the total points. If we cannot grade your work due to missing files, you will receive no credit.
  2. Save your project onto the U: drive, which is your EWS storage, and available across all of the computers in the lab. If you save to the C: drive, your project will only exist on that single computer.
  3. If you use your own machine, make sure you use the version of Unity installed on all of the lab machines to avoid compatibility issues.
  4. To enable autofill in Visual Studio 2019, go to Edit -> Preferences -> External Tools and change the
    External Tools Script Editor from Open File Extension to Visual Studio 2019.


The VR lab is closed, so this will be a regular Unity project with no VR additions.


In this MP, you will build a flight simulator in Unity. You must make a start menu, tutorial, script to support your plane, and a user interface. Much of the spec for this MP is vague. This is intentional, as we want you to be in the practice of finding creative solutions to problems. Note: This is an assignment with a lot of details, so please start early.

Flying allows many possible motions. You must tell us what your control scheme is in your README.


Simulator Environment

Create a new scene, and load the provided Unity package, which contains a large terrain for you to use. Read up on Terrains in Unity so you can make changes at your discretion. This will be pertinent when you optimize your scene, as excessive amounts of trees and vegetation on the terrain can cause performance issues.

You must create or import a model for your plane. Your model can be simple, provided it isn’t simply a Unity cube or other 3D primitive.

Start Menu

The player should start out in a separate scene, which must contain a room with a start menu. The room can be as simple or complex as you like, but it should be well-lit, and the walls should be a solid color.

The room must contain a start menu with (at least) the option to quit and to start the game. Upon selecting quit, the game should exit. Upon selecting start, the player should be transported to your flight simulator scene.


Your plane must be comfortable, easy to control, and should feel like a real plane. For instance, real planes cannot turn in place, and cannot stay in the air while standing still.

You must add controls for acceleration and deceleration, as well as yaw, pitch, and roll.

Shooting Game

You are now going to take your flight simulator, and turn it into a shooting game.

Add a weapon, either a laser or physical bullets/rockets, to your plane. You must decide from where on the plane the weapon will project or emanate. Do not use Unity’s Debug.DrawLine to show a laser, as it will not appear in a built executable.

Now, scatter some spheres in the sky. When your plane successfully shoots a sphere, the sphere should disappear for 5 seconds, and then reappear. Make sure the spheres are easily visible. Successfully shooting the spheres should increment the game score, which we will talk about in the next section.


You must implement some controls that will form the user interface for your game.

You must implement a pause button that pauses the game and provides the option to go back to the main menu.

Additionally, you must display a score value clearly somewhere. After hitting a sphere in your scene, your score should increase.


Add all necessary sounds to your simulator. Some examples include engine noise, crash sounds, firing sounds, ambient music, etc. Make sure that your sounds are neither too loud, nor too quiet to hear, and make for a comfortable experience.

“Game Over” Condition

When the player crashes the plane, they should see a game over screen, which should give the option to go back to the main menu, restart the game, or quit. If your game over screen has a menu, you can choose how it will be controlled, but make sure this is communicated to the player via the tutorial, or messages included in the “game over” menu screen (such as “juggle the touch controllers to return to the main menu”). **

Tutorial (Extra Credit)

Make an in-world, interactive tutorial that explains how to control the plane. This needs to be more than just a copy of your README on the wall as a text canvas.

Overall Design

We will evaluate this using the following criteria (not necessarily an exhaustive list):

  1. Your interface/instruction system allows a first time player, without any prior knowledge of your simulator, should be able to pick up the controls quickly and easily

  2. The overall experience of flying your plane is smooth and comfortable, for example: Are rotations comfortable? Does your plane behave as expected? Does the weapon work as expected?

  3. Your flight simulator keeps the frame rate consistently at 60fps and doesn’t lag


* Don’t do this ** DEFINITELY DO NOT DO THIS

Submission Instructions

Step 1: Create a Unity package file

  1. Save your Unity scene in the Assets folder with a descriptive title.
  2. Using the editor, find the created scene in the Project menu
  3. Right click on the scene and select “Export Package…”
  4. Export the file using default settings. Make sure that “Include dependencies” is enabled.
  5. This will create a .unitypackage file. We may use this during grading if your executable does not work, so make sure you also submit the data folder.

Step 2: Create a standalone build

  1. Save the project to C:\Users\<your netid>\<project name> temporarily, rather than the EWS U: drive. Local storage is faster when building.
  2. Go to Edit → Project Settings → Player. Make sure the “Virtual Reality Supported” box under XR Settings is checked.
  3. Go to File → Build Settings.
  4. Open the scene with your work for the MP.
  5. Click “Add Open Scenes”. You must have saved the scene to the assets folder for this to work.
  6. Click “Build”.
  7. This will create an executable (.exe) for running the build, a folder containing your scene data, a “Mono” folder, and UnityPlayer.dll.

Step 3: Copy the Input Manager file

  1. Shut down your project.
  2. In your project folder, navigate to the ProjectSettings subfolder.
  3. Find the InputManager.asset file, and copy it to your submission folder. This will allow us to replicate any new gamepad buttons or joysticks you mapped.

Step 4: Zip the files and submit through Compass

  1. Create a zip file containing the following items:
    • The .unitypackage created in Step 1
    • The .exe, .dll, Mono, AND DATA FOLDER created in Step 2
    • The InputManager.asset file found in Step 3
    • A README.txt file containing any instructions or notes relevant for evaluating your assignment.
  2. Ensure that the executable in your submission folder runs correctly on the Rift before submitting. The easiest way to do this is to unpack the zip file into a new folder, and then run the executable.
  3. Name the file by separating NetIDs with underscores- _cs498vr_MP#_part#.zip. EXAMPLE: If steve1 and anna2 worked together, the file for MP 1.1 should be called steve1_anna2_cs498vr_MP1_1.zip.
  4. Only one partner should submit the resulting file.


Name Points Description
Plane 5 Game has a controllable plane
Acceleration/Deceleration 10 Plane can accelerate and decelerate comfortably
Rotation 10 Plane can yaw, pitch, and roll
Weapon 10 Pressing a button shoots out a raycast or bullet from the plane
Spheres 5 There are spheres around the terrain
Shooting Game 25 Player can shoot spheres, which disappear, then reappear
Start Menu 10 Game has a legible and understandable in-world start menu
Score Display 5 Score is displayed in-world
Sound 15 Sounds in game world complement the environment
Game Over 15 Game handles plane crashes and shows game over in some manner
Framerate/Comfort 40 Framerate rarely drops below 60 fps, game sound is not obnoxious, and plane acceleration, deceleration, and rotations are comfortable.
In-world tutorial 20 The tutorial and explanation to the player is in game (extra credit)
Total 150