Circled – An Android game made in Unity in 72 hours



A character floating in the cosmos attached to a heart and trapped in an infinite loop of rings closing over him.

How to play

Move by clicking on the screen to avoid the rings as much as you can. The click and drag mechanic is not implemented.

Developed for the Ludum Dare 47 Game Jam with theme "Stuck in a Loop" by:







About the development of this game

On October 2, 2020 the Ludum Dare 47 game jam was held, an event where you have to make a game in 72 hours based on a theme chosen by the community. The theme of the jam was “Stuck in a loop“. We participated in a team of three.

Most of the event I was live streaming what I was doing on my computer and also the discussions we were having to reach an agreement. I transmitted a total of approximately 32 hours and in the following video you can see all those hours of work summarized in 5 minutes.

40 hours of live streaming summarized in minutes


A few days before the jam starts we met to propose ideas based on the candidate themes, there were three rounds of voting with 16 themes each, we took the first round and chose 4 themes at random. Then everyone took 5 minutes to think of an idea with a simple mechanic. Coincidentally the theme “Stuck in a loop” was among our chosen ones so for the jam we already had a previous idea.


The general aesthetics of the game is based on the Synthwave style, with saturated colors and fonts according to that style.

The sprites are made in Pixel Art style using Aseprite software.

Technical Details

This game is a 2D project developed with the Unity engine.

Scene structure

This game is set up in two scenes, the first scene is the main menu that has some buttons, one to start the game, one for the credits window where you see our faces and links to our networks, we have another button to close the game and there is also a button to continue a game, but this only appears when we have already played at least once and passed the first round, which means that this information is stored in memory and then retrieve it and decide whether to show the button or not.


The character is controlled by clicking on the place on the screen where the player wants to move. The character starts to accelerate in that direction until it reaches a maximum speed and then starts to stop, this makes that for each pulse the character moves a predictable distance.

During the game there are concentric rings that are generated, each one with twice the scale of the previous one, there are different types of rings that have one or more outputs. While a ring is active it will shrink in size until it becomes tiny. The character must move to escape through the openings because, if touched by a ring, the character dies.

This is the first game to which I implemented a translation system which has a record of each text that appears on the screen and arrays containing the translations for each one, by pressing the language change button we go to the next language of the system and the system is responsible for updating each of the texts on the screen.

The game is set up in two scenes, the first scene is the initial scene of the main menu in which you can also see the credits screen. By pressing the “Play” button we switch to the game scene. Since in the game scene we have on-screen texts, it was necessary to think of a system to transfer data between scenes in order to assign the text in the appropriate language.

In the Android and Windows versions the sun sprite that appears in the background of the game scene changes size depending on the amplitude of the music, this is done by reading a chunk of the bytes from the audio clip and averaging them to get a value that will then be related to the scale of the sprite. It is not possible to do this in WebGL because one of the functions that allows us to analyze the audio clip cannot be used in WebGL. An alternative could be to pre-calculate these values for each song and to have these data organized in lists to be applied to the sprite scale.

In this game, data is saved using PlayerPrefs to remember what the maximum score was and update it if it is exceeded.

Scroll to Top
Secured By miniOrange