About the project
During my 1 year co-op at Virtro Entertainment, I worked on a project called "Downloaded", under the direction of Ollie Rankin. This project was highlighted by Forbes as being the Top 50 XR Experiences of 2019. Ollie is a senior technical director who has worked on projects such as The Matrix, Lord of the rings, and Troy.
His project “Downloaded” is a VR interactive movie starring Stoya Skovbye, where the viewer is placed into the unfortunate position of having their consciousness sucked into a computer. Their objective of trying to figure out a way out. With the help of Lisa Brown, the viewer will explore the world of Downloaded, posting on social media, reading lore, and interacting with the digital world.
My role and responsibilities
For this project, I was tasked with developing a system written in the C# language. The purpose of this system was to manage the branching narrative paths. To do this I used the Unity State Behaviour system.
How do you keep track of a branching narrative? And how can I create a user interface that can help developers monitor the player’s position in the story and inform developers of any problems?
The problem
My solution
My solution was to utilize Unity’s built-in Mecanim Animator engine and Unity's StateMachineBehaviour class. This class included all of the event listeners that I needed at any given state inside my FSM. I mapped each state to its corresponding scene in the script and my FSM allowed for OnEnter, Update, and OnExit behaviors at each state. Within these states, in the OnEnter method, I was able to efficiently access scene manager data without having to do redundant calls every single frame.
A side by side of my State Machine in the Unity Editor and the branching narrative printed on the lead Actor's T-Shirt
XML Parser and Director tools
In addition to creating a Finite State Machine, I also helped create the core functionality of the User Interface, and an XML parsing system to parse data stored locally on the drive. The purpose of this tool was to help the Director update parameters such as how long to stay in a given state, or what items are required to proceed to the next state.
All of this can be run efficiently at run-time without the need to rebuild the application every time. The result of this system that I designed is that it drastically helped reduce the time required for testing. The Developers and Director are able to change a parameter in the XML file and restart the application with their changes applied.