Eye in the Sky is an asymmetric multiplayer game that can be played on a desktop or tablet. The players can either play on the ground and try to collect all pineapples and bring them back to the home base before the time runs out or play as the Eye in the Sky who tries to interfere with the other players and stop them from completing their mission!
Eye in the Sky is a project created for the course Advanced Graphics and Interaction at KTH in the fall of 2020.
The goal of this project was to create an interactive social socially-distant asymmetric multiplayer experience combining methods advanced computer graphics with advanced human-computer interaction.
The primary motivation for creating this project was to expand our own skill-sets and learn more about game design, AR and modelling. Another motivation was the wish to create a fun experience where the players are able to interact with each other while still being able to be physically distant.
Eye in the Sky is a project that was created over the course of around 16 weeks and the process was divided into two phases.
Related Work
We were partly inspired by "CatEscape",
an asymmetrical multi-platform game that incorporated collaborative virtual reality,
augmented reality and tablet gameplay. One of the players in CatEscape has a top-down view of the game world, which
we later incorporated in Eye In The Sky.
Phase 1
During the first phase a lot of focus was put on network implementation, cross-platform connection, augmented
reality and movement of our 3d player. We also started creating models for the environment, which we had
envisioned to be planets. Some difficulties came with having the game environment be spherical, since gravity
and especially the player camera were difficult to implement. Parts of the environment were finished and we
had our first AR prototype for Eye in the Sky on the tablet but it became clear that having a spherical game
world would become too big of a challenge and therefore the decision was made to change plans and discard much
of the work previously done.
Phase 2
During phase 2 we had reimagined the arena for the players and decided on floating islands instead of the
planets. These were modelled, colored and populated with old and new models. Characters were designed,
modelled, rigged and animated. We also created crucial interaction mechanics, such as a jump pad for the
player to use to jump between islands. Pineapples were added for the player to collect and a Heads Up Display
(HUD) was programmed to count the pineapples as well as show a countdown.
Instead of an AR implementation for the Eye in the Sky player, we opted for a gyroscope on the tablet and
added a freeze interaction. Lastly, we created original music in the form of a theme for the game.
Design and game mechanics were polished during the last weeks of the project work, as well as particle effects being added.
We faced several obstacles during our project work, from which we learned to adapt and compromise.
Spherical game world
One challenge was the implementation of gravity for the spherical planets and the camera movement required for
it. Sadly we didn’t have the time to overcome this challenge and instead adapted to a different option.
AR
The implementation of AR on the tablet as a cross-platform game mechanic - which would have enabled the Eye in
the Sky to walk around the room to view the game environment - showed to be very problematic. The
synchronization between platforms was the main offender here and this problem could unfortunately not be
solved. Instead, we resorted to having the player on the tablet use a gyroscope.
Network
The networking part of the game proved to be a huge challenge.
None of us had any prior experience of network programming for games, so a lot of our time was spent on
learning how to use the network interface and actually make it work, such as server-client calls, and updating the game state for all players.
We managed to overcome most of the challenges regarding the network.
Unity is a popular cross-platform game engine. Unity was used as the base for our game and all game logic was handled by internal Unity components and by custom components written in the C# programming language; this includes player movement and interactions, physics, animation handling, sound, visual effects and more. We chose to use Unity because of its capability for developing for multiple platforms simultaneously and its rich feature set.
Blender is an open-source 3D computer graphics software toolset. We used blender for all 3D-graphics in the game; this includes 3D-modeling, UV-mapping, rigging and animating the 3D-models and more. Blender was chosen as the tool for creation of our 3D-assets as it is open source and widely available, and a great tool for learning 3D-modeling.
Mirror is a high level Networking API for Unity. We used Mirror to handle all network traffic between the game clients and the game host/server; this includes spawning players, updating world state, tracking player and item positions/transforms and more. We chose to use Mirror as our network framework rather than Unity's built in network framework Unet or any other solution, sice Mirror builds on Unet making it very easy integrating it into Unity while fixing a lot of issues present in Unet.
Textures were drawn by hand and exported for use on our 3D-models using the illustration and drawing software Clip Studio Paint.
During this project I have been involved in making 3D models and designing environments for the game. I have also created the particle system for the home base area, indicating where the players should drop the pineapples. In addition I have also created the interaction mechanics for the jump pad which makes it possible to move between the different planets.
In this project I was heavily involved in creating the 3D graphics for the game, which includes modelling of the game environment as well as characters and adding rigs and animations for them. Additionally, I had created first drafts of a UI menu and a HUD display. I also worked on interaction mechanics such as the player picking up and counting the collected pineapples.
In this project i have mostly been working with gameplay programming and network implementation, that is implementing gameplay such as player interactions and movement, spawning players, updating the game state, tracking the players and items positions over the network. I have also been responsible for our git repository making sure that we follow a good branch structure and that merging goes smoothly.
In this project I have worked on character animations, 3D graphics and 2D graphics. I have created concept art and character designs, created 3D models for characters and objects, painted textures for characters and objects, created rigs and animations for the characters and implemented and configured the animations in Unity. I have also created some art assets for the game and user interface.
My main focus in this project has been the back-end logic concerning things like network programming, general gameplay and interaction mechanics. I’ve worked mostly on things like network implementation and testing across devices, distinguishing the airborne player from ground players via device detection, and the ability for the former to interact with the latter’s movement over the network, i.e. freezing them.