Soul

Soul is a short game project I made in two weeks made to showcase the knowledge I gained learning how to use Unity over a month and a half. The game is composed of 5 levels in which you collect souls to progress, avoiding enemy souls in the process. 

Responsibilities and Experience

For this game I mainly focused on programming player movement, the enemy AI, and level design. However, I was also responsible for the camera movement, soul collection and score, door interaction and animation, and UI integration.

My main takeaways:

The Process

I began by creating the prefab for the player soul model, adding a point light in order to give the appearance of a glowy-type soul. My idea of progression was to make the player soul larger and brighter as you collect other soul.

I then created a script that handles that behavior; it accesses the light component's range and intensity. They are used in functions that raise or lower the brightness and intensity which can be called when colliding with souls or enemy souls.

For the enemy soul prefab I included a script which controlled its movement behavior. The red radius represents the range that can detect the player; when inside, the enemy tracks the player. I gave each enemy soul its own variable that dictates its value to decrease the score, so that it would be simple to add different enemy types with different punishments.

The collectible soul model is the similar to the enemy, only with no AI.

The layout for the levels were made from one long, continuous plane. Each level progresses in difficulty by adding more enemy souls to each level. 

At the end of each level there is a gate with a interact hitbox and a progression hitbox. The progression hitbox disables player controls and moves the camera to the next room. At first, I had a third hitbox in the sky, above the gate which the camera would collide with to stop it from moving.  This is because I first made the progression hitbox add a force to move the camera and it would only be able to stop using the third hitbox. I did not like this approach because I felt like there were too many unnecessary components to each gate and it meant that the camera would be a physical object. Instead, I created a Camera Manager that integrates the position of the camera to the desired final position, without using any physics.