Weapons Locker

Overview

  • Software:
    Unity, Leap Motion SDK

  • Languages: C#

  • Platforms: PC VR

  • Role: Project Lead

Weapons Locker is a virtual reality application where users can learn and perform the steps to disassemble firearms. This was an application developed for the Canadian Armed Forces using Leap Motion technology. Instead of using controllers, users handle the firearms virtually using their hands and a headset mounted camera.

I lead the initial development of this application, with a student intern adding additional firearms in a later iteration. The application has since been rebuilt for multiple VR platforms, including a version that runs on the Oculus Quest 1. It is currently in use by the Canadian Armed Forces as well as Corrections Canada.

The 1.0 application was built for the Oculus Rift and leveraged the then-new Leap Motion technologies. The gun models were provided by different sections of the CAF and needed minimal fixes to be usable. The application took 2 months of development. A later update which added 4 firearms took 3 additional months.

Leap Motion SDK Integration

...

When the project was conceptualized, the goal was to allow users to disassemble firearms without needing to use VR controllers. To accomplish this, we acquired some Leap Motion cameras.

Implementation involved understanding how gestures and hand tracking data was managed by the Leap Motion camera and SDK. The documentation was very unfinished so it involed a lot of trial and error.

Due to the limitations of the software, I had to get creative with interactions. For example, you couldn't manipulate an object that you were already manipulating the parent of (So holding a gun and removing a part). To navigate that, I made the application mainly static with the gun centered in the middle.

Gun Disassembly

To disassemble guns, I created a couple of scripts that are applied to every firearm:

I created a reusable script that is applied to every movable part of the firearm. This script determines how far the part can move and on what axis. This same script also determines the success criteria for the interaction of that part i.e. is that part removed once you reach the end move distance.

To manage the steps of the disassembly, each gun is separated into it's own scene with a manager that iterates through the classes. Once a step is complete, it notifies the manager which disables and enables the appropriate components required for the next disassembly step.

Gun parts are optionally highlighted to help indicate the next step in the disassembly.

Scores

I created a simple global scoreboard using a free cloud-hosted API. When the player performs the first step to disassembly, the timer starts counting until they complete it. Each gun has it's own independent scoreboard.

To track users names, you can optionally use a VR keyboard in the main menu of the application to enter your name. It's a relatively simple scoreboard intended to add gamification to the program.