Solitary Space is a VR spaceship simulator in which a courier travels between space stations fighting off enemies and earning credits to upgrade their ship. The controls are interactive such as a virtual flight stick and throttle. A turret station is mounted on top of the ship with multiple weapons options.
Solitary Space is a 12 week long project developed by myself, Joseph Lyons, and David Silverman using Unity and C#.
The models, textures, and some of the effects (thrusters, missile firing, and missile explosions) are from the Sci-Fi pack by Synty Studios
here.
All character animations except for those on the player's hands were done using mixamo.
My responsibilites included (but were not limited to):
We wanted to focus on user experience since it is so vital to a VR game. We worked on motion sickness issues with settings options and by grounding the player in the cockpit. There were a lot of design considerations both for accessibility and gameplay. Players kept getting lost so we implemented a 3D map for example (see the Graphics section!).
We wanted players to immediately feel immersed. We designed the main menu to be the hangar for the spaceship with a deck officer saying lines for a tutorial. We fit as much control into the interactive control system as possible so players could play with a bunch of fun buttons and levers!
Please excuse the washed out colors. Our game has too many colors for the GIF format to handle.
As mentioned before, immersion was important to us. We needed the visual player feedback to make sense contextually. I developed several effects such as the 3D holographic map. I combined VFX graph, a little bit of C#, and the color and depth buffers of a camera behind the ship to acheive this effect. This gave the illusion of a 3D projection. This map was used to display enemies as red dots and the waypoint to the next station as a golden dot.
Another effect I created was the responsive shield. I decided to take our standard shield an extra step and have it react to enemy fire. I iterated on the shield a lot because of feedback that some of the original effects were too busy and distracting.
We acknowledged the performance risks that come with VR throughout the project. One such example was the far plane of the camera. We didn't want immersion to be broken too much when objects went out of rendering range so I implemented a dithering fog after a certain range.
Interactive controls were one of the core pillars of Solitary Space. We took inspiration from Rumble VR with their interactive settings in the hub area. This brought up many questions. For example, how do you make the most satisfying button? We ran into many issues with Unity's rigidbody physics with the buttons as children of the ship rigidbody. We settled on a simple trigger both for performance and physics stability concerns.
I'll let you in on a little secret! We originally had plans for an engine room that would allow the player to boost their engines and repair the ship. We were hoping to highlight fun, interactive elements with levers, switches, buttons, and a wiring mini-game, but it was out of scope and did not fit the fast-paced style of the game. Perhaps there could be a co-op version of Solitary Space in the future...
The throttle and flight stick were highlights because of the importance they held to the gameplay. Solitary Space would not be the same game without the interactive flight controls. We were able to reuse some of the functionality of a lever and modify it for a flight stick. We also added haptics since players would lose track of the controls while looking ahead and they had a hard time figuring out whether they were pushing the throttle forwards or backwards.
I also created an intermmediary layer between Unity's XR input system to help the other devs interact with it. It was an event-based system that made different controls much easier to interact with in C# and from Unity with it's in-engine event system.
To cap off our immersion, I implemented the player's body, hand animations, and inverse kinematic arm system. I added different limiters to control the range of the elbow movement so it didn't get too our of hand. It was a game changer once we could see the character model in game with the arms and hands replacing your own! I placed the UI for the player on their left wrist/hand to make it easier to access that information. We also wanted to invoke the feeling of checking a wrist console Buzz Lightyear style!
Unity
C#
Shadergraph
Visual Effect Graph
Meta Quest 2
HTC Vive
Solitary Space posed many challenges we weren't originally prepared for. While I didn't suffer nearly as much, my teammates struggled with motion sickness during the entire project. This was something we tried to be as thorough as possible to avoid. We added a setting for snap turning and tried to keep the player grounded in a sort of "cage" inside the cockpit so there was a point of reference to ground them. It was also hard personally to test this because motion sickness does not affect me as much.
This project very much was my passion project throughout the spring 2023 semester. I had wanted to make a spaceship simulator game for a while and, having recently gotten a new VR headset and had an interest in the field for a while, I thought I would propose to my team that we try developing in VR. Communication was a key aspect for our success. Everyone's opinions were taken into account throughout development. I know I at least had a blast working on it!