aVRio

Agario is a popular flat web game based around the idea of "survival of the fittest." You play as a small blob in a world of other blobs controlled by other players and the goal is to become the biggest blob of them all. As you move around the course you eat food to gain mass and as you gain mass you grow. As you grow you can eat smaller players, eventually working your way up the food chain. IT's a highly addictive game and a beautiful metaphor for many things in life.

In an effort to sharpen our design skills, Austin McCasland and I sat down over the weekend in an attempt to create a VR version of the game. We had two goals when beginning this project, one personal and one design-oriented. We set out to better educate ourselves on Unity 3D, scene building, programming, and interaction design. Our goal as designers was to carry over all of the primary game mechanics and find clever interactions to make the game more fun and exciting.

Planning

We began by targetting the primary mechanics we needed to carry over to keep the game working properly and thought of how we could design new interactions around the game. We set the scene by creating a 3D playspace filled with enemy balls (which will be replaced by real-live multiplayer balls at a later date) and food. The enemy balls were programmed to move around the play area freely so they could collect food and grow. Then, a script was created to distribute small food pellets randomly throughout the space at a designated interval of one second per pellet. In future versions we would program around the scale of the play area and by adjusting the respawn rate for smaller and larger areas.

Then, we attached the player's ball to the controller to allow the player to walk throughout the space and control the ball freely. An important mechanic in the game is that player movement is based off of the player's size. Smaller blobs can move quickly and nimbly while larger players are sluggish and slow. To compensate for this we made fixed the ball to the controller by making the ball react to a gravity element. Since the ball is an object with mass it will be affected by gravity realistically thanks to the game's physics engine. This means that small players can move more quickly throughout the space while higher-scoring players have to wait longer for their blobs to catch up to their position within the space.

Environment scaling

You may notice in the clip that we have some issues with our blob. It grows as we eat food, but soon it's out of control. To keep the functionality of the scaling playspace in place we set the environment to scale down around the player. As you grow the environment around you shrinks in relativity to the blob size, maintaining a similar scale throughout the game.

This functionality was the biggest hurdle in our design. We initially made the anchor of the world fixed on the player's head and scaled the environment from there, but this was a bit disorienting. We found that slightly lowering the anchor point more towards the player's feet felt more natural.

The scaling is implemented but as you can tell it's quite rapid. You could get away with this rapid scaling on a traditional screen game (although you probably wouldn't want to) but you can't get away with it in VR. An important aspect to keep in mind while designing in VR is that things like movement and transitions need to happen in a way that won't disorient the user. Rapid scaling like this confuses our brain and is a bit frightening and is a good way to cause VR sickness for your player.

To fix this we simply slowed down the scaling speed to about 2 seconds. This made the transition so seamless that it was barely noticeable – an important consideration for the percieved speed of the game.

Movement

To make the game more interesting and last longer we made the playspace very large. So large that you'd have to have a large warehouse to run from one end to the other on your feet and that's just across one axis. It's equally tall as it is wide. Nobody has a setup like that so we had to design around available playspace. To do this we simply added a locomotion mechanic to allow the player to move freely in all directions.

To do this we used an available locomotion plugin and installed it into our game. With this tool the player can pull the trigger on their controller and move freely throughout the space. This immediately opened up the game and made it feel much, much larger. Flying through a dense field of players and food pellets while your player blob chases you is something you have to experience to understand.

Wrap up

This was a fun weekend hack that taught us a lot about considerations for spacial awareness in our environment design. When designing in a 3D environment there are considerations that one might not immediately consider but can make all the difference for a comfortable and engaging experience. This page will update as the project continues. In the future we plan to add multiplayer functionality, a more robust mass and scoring system, and to create some protections around glitches.

Thanks for reading

If you like this project and want to see more, check out my full portfolio. If you want to connect with me, you can find me on these platforms.