Future Earth
Future Earth is a VR adventure game set in a dystopian future, where the player has to grow trees, fight droids and collect parts. Achieved over 3,000 downloads and 4 stars on SideQuest.
Type
VR Game
Year
2020
Skills Applied
- Game Development
- Extended Reality (XR)
- Unity
- C#
- Prototyping
- Project Management
Team
- Kahn Dinh
- Keefe Liew
- Robert Michels
- Yashu Estela Xu
The Task
Future Earth was created as an exercise in designing and developing immersive environments.
With the concept design, we aimed to create a VR adventure game that encourages sustainable behaviors in players. This is achieved by placing the player in a dystopian futuristic environment and giving them the power to radically transform it for the better through gameplay.
The Result
Story
Set in a dystopian future, you are the first human to walk planet earth in a long time.
Your mission objective is to plant and sustain 100 trees. Whether or not humanity will attempt to return to earth hinges upon your success.
But that isn't an easy feat. Climate change and unsustainable human habits have created a toxic wasteland. And to make things worse, robots left behind to clean up, have fried in the sun and turned dangerous over time. Fight these bots, collect technical components, build sustainable technology and become the one to save the world!
Success
Our project won best overall project, best interaction design, project for impact, and best VR/AR in our class.
We're proud to have achieved over 3,000 downloads and a 4 star rating with our release to SideQuest.
Process
The project was developed in 4 months by a team of 4. I was the project manager, as well as one of the VR / game designers & developers.
After deciding to create a project for impact with the theme of sustainability, we started to create a game. Our goal was to create a VR game that appeals to players without particular interest in sustainability, to reach a broader audience.
As the PM, I split the concept design into a list of core and bonus features. The core design featured a small game, where players fight rogue robots, collect their parts, and build water filtering technology that helps trees to grow. This core prototype was implemented within the first three months.
After a round of usertesting, we proceed to implement updated features in response to our testing results. These included measures to better communicate the narrative, such as a major update to the level design and the implementation of an aesthetic change as the player plants more trees. We also had time to implement some of our bonus features, which were mostly aesthetic improvements such as the addition of VFX, better models, and multiple collectible parts.
The Code
My programming efforts for this project focussed on the more unusual features of our game, such as spare part collection, item building, UI interactions, story sequencing and more. Another interesting feature I implemented was the trees, which required animations for growth and monitoring of their health based on the available water supply. In order to achieve fine control over the growth behavior, I used a Coroutine, which is also used to control dying trees. Instead of using an Unity animation I implemented smooth growth by affecting scale and rotation with the help of Mathf.SmoothStep()
and Mathf.Sin()
for smoothing. A challenge that came up was a bug where birds would land at the position of the tree's origin. The fix was simple: disabling their perch-targets until the trees had finished growing, and only then enabling them, so that their target positions were correctly located at the fully grown branches.
One of the interesting changes that resulted from our user tests was the more drastic environment change coupled to player progress. The environment changes as the player plants more trees. In order to achieve the desired emotional effect with the player, we incorporated many variable layers: the skybox, fog, dust particles, water, lighting and post processing. All of these aspects of the environment are interpolated between a start and an end state, by the method SetEnvironment()
which I implemented in GameCtrl.cs
. For instance, the fog has definitions of its color, start distance and end distance for both the beginning and the end.