Nitro Development Charging Mixed Reality
Developed by
Peter Erbeni,
Motion Curve Colleagues,
Demonstrated Roles
Skills Demonstrated
Direct Contributions
Outcomes
This project was one of my first Mixed Reality projects that I had the privilage to develop while working at Motion Curve. It taught me that there is a time and place for creating systems from scratch and just finding packages online to use in projects as before I had some stubbornness to where using packages takes away from learning and control over the system you’re trying to implement which it does but when you have limited time if the option is there it should be used so this opened my eyes to when packages should be used. delegating tasks to them and ensuring that those tasks get done directing the overall direction of the game and how it should be completed.
Lastly, it taught me valuable skills how to properly break down a problem step by step and significantly simplifying the problem to be easily achieve as before my reliance of creating custom systems was based off tutorial videos of a similar implementation and then I would adjust it.
About Nitro Mixed Reality
Nitro Sibir Development Charging Mixed Reality is a training module to teach and train miners the standard operating procedures of how to charge a wall and blow it up. Throughout the MR experience, players would be tested on their knowledge of certain proceduresthey would've learnt before going on the MR using either multiple choice, short response or terminolgy matching. After they completed the modulethey then had to send a report to their trainer's email which outlined all the questions they completed and what their answers were for each one.
Task System
the first problem that needs to be solved was having a task system to define each task and execute all tasks in a particular order while also executing the correct audio at the correct time. Breaking it down into a step-by-step process I found a common pattern within each task that there is an entry stage to introduce the task, middle stage to listen for completion of that task and end to do an outro and move onto the next task. Building off that, I found that the best solution involved using scriptable objects with a task manager to manage the order and execution of each task
Rope Physics
With the module centred around a hose like piece of equipment it was a requirement from the client that the player needed to interact and use a rope, granted this is in mixed reality with no controllers. This became a more prominent issue as there are not many resources available of making an interactive rope and the resources that didn’t fit the requirements for the problem. There were 3 different methods I tried to settle onto the one that worked best.
So first I found the simplest way to do it in Unity which was to add in a mesh created by the artists and use the hinge component on each bone of the skeleton restricting its movements. This method was the most unstable where the rope would stretch and distort itself in any way possible at any interaction with the environment or the player. Obviously, this was not a good solution
After some research, there is an apparent equation called verlet integration where its used simulate motion of particles and their trajectories. The second method uses Meta’s Cryptic Cabinet rope, where they used a modified version of verlet integration with a skeletal mesh rope to create a dangling rope to use. Once looking at the code and integrating myself, the rope turned out a lot smoother than the first where when interacting with the player it stayed put. Although this method fell through when it interacted with environment like walls or floors which it did not behave consistently.
The third method resorted to integrate and modifying the version of verlet integration meta used and build a customised version of the rope where I spawned box collisions on a set number of nodes spaced out evenly acting as the grab points for the player to grab onto. This method turned out to be the best as both interactions with the environment and player consistent as shown in the video below.
Questionaire
Another key requirement from the client was that they wanted to test leaner’s knowledge through a questionnaire to ensure they understood what was being taught to them. Breaking down the problem, the pattern seemed familiar with the task system where there was an entry being a new question popping up, middle being listening for the question to be answered and in cases for multiple choice checking if its right or wrong, and exit being clean up for next question.
Recognizing the pattern I incorporated something similar with scriptable objects to handle the setup of individual questions and a question manager to manage the order and execution of each question.
Email Sender
Lastly, the client wished to have the results sent through an email attached with a excel report the progress leaners made which included data such as how many times it took to answer a question, they’re answer for each question etc.
This was solved using some NPM packages and SMTP2Go as the main API to send it. This also required me to create a emailer which would store each attempt at a question in the given report format requested by the client.