Augmented Reality (Fall 2022)

Assignment 3: Interaction

This assignment is to develop a Unity application using Vuforia that allows the user to manipulate virtual objects, and have the virtual objects physically interact with each other and with real objects. This would be useful in a game or educational app.

For this assignment, it is not necessary to deploy your app to a smart phone or the Magic Leap; running in the Unity editor with your webcam is ok.


  • Create a scene with at least two real objects and at least three virtual objects. The virtual objects should be non-trivial 3D models (namely, models that you create with a modeling program or import from the Unity asset store or other site).
  • Be able to select virtual objects interactively. In class, we went through the method of casting a ray from the center of the screen, when a key was pressed (or the screen was tapped). Then, the object was de-selected with the key was pressed again (or the screen was tapped again).
  • Be able to move virtual objects. In class, I showed the “fishing rod” method, where you temporarily make the selected object a child of the camera.
  • The objects should physically interact with each other. For example, the virtual objects should stack on top of, or bounce off, each other and the real objects. Note that you will need a “phantom” for a real object so that virtual objects can interact with it (Magic Leap people do not need a phantom).
  • At least one of the real objects should be movable. Your app should sense the real objects in its new location, and the virtual objects should interact with the real object in its new location.
  • Record a video, and make sure that you:
    • Move the camera to change the viewpoint.
    • Change the location of a real object.
    • Select and manipulate the virtual objects, and demonstrate changing position and orientation.

For full credit, do at least one of the following:

  • Implement an alternative method to manipulate an object, rather than the “fishing rod” metaphor shown in class. For example you could swipe the screen (or press a key) to translate or rotate the object. Since it may not be obvious what you are doing from the video alone, please narrate the video and describe when you are doing something like hitting a key.
  • Implement a “tangible user interface”, in which a physical object is used to select and manipulate virtual objects (e.g., the “Magic Paddle” shown in the slides).
  • Have forces act on your virtual objects (gravity doesn’t count). For example, perhaps you could simulate a magnetic attraction or repulsion.

The example below shows two real objects (the box and the table) and multiple virtual objects, all interacting:


  • Upload your video.
  • Write a description of the application, including:
    • The architecture of your application; i.e., what are the main GameObjects and scripts, and what do the scripts do.
    • How you created the virtual objects (or, where you imported them from).
    • How your application meets the requirements above.
  • Export a “package” from Unity containing all your files. To do this, in the Unity “Project” window, select all files and folders in the “Assets” folder. Go up to the Assets menu and select Export Package.
  • Submit on Canvas: (1) the description, (2) your Unity package, and (3) C# scripts.

Rubric (100 pts)

  • (20 pts) Video submission
  • (10 pts) Unity package submission
  • (10 pts) C# scripts
  • (15 pts) Application description
  • (15 pts) Video shows selecting and manipulating virtual objects. Virtual objects should be translated in 3D and rotated in 3D.
  • (15 pts) Video shows real objects and virtual objects interacting. Grading is based on how accurate and realistic the interactions look.
  • (15 pts) Video shows moving the camera to change the viewpoint and shows manipulation of both real and virtual objects.