Celioton it's a Videogame for PC that are development in Unity, it's a metroidvania, whit a little of a Collector Game. The narrative tell us when a Biologist try to safe the marine fauna, that are used to create inordinately better for human beings.
Celioton (Mechanics Development )
Celioton it's a Videogame for PC that is developed in Unity, it's a Metroidvania, whit a little of a Collector Game.
The narrative tells us when a Biologist tries to save the marine fauna, that is used to create inordinately better for human beings
My job as the team's programmer was to incorporate all the artistic and narrative content developed by the rest of the team and to program all the mechanics, both of the character and the enemies.
For the movement of the character I use a character controller that responds to the X and Z axes through the keyboard inputs (W, A, S, D) for its movement, I use a floating value to set the speed which is Controlled through the LShift for running and LCtrl for crouching, crouching also reduces the size of the character controller. This speed value also directly controls the BlendTree of the animator on the player.
I used cinemachine to control the player's camera, we established as a team that the best to keep the environment stealth inside the laboratory would use something very similar to an American shot, which allows the player to rotate the camera in 360 degrees.
This was undoubtedly the most complicated task, I had never had experience developing an enemy that had a vision range of a certain amount of degrees in front of him, so he cannot see behind him, for this I used a Nav Mesh Agent that Through a state machine it controls the movement of the enemy.
It has 3 base states:
-Follow your destination route (moves to specific targets that respond to a position in X, Y, and Z).
-Warning (It rotates for a short period on its Y-axis to look around and look for the player, this response to Physics.CheckSphere that defines if the player walks without being crouched or runs close to the enemy who is not watching).
-Follow the player (It consists in that every time the enemy sees the player, he move himself to the last position in which he saw him, and upon arrival, he executes the alert state for a short time in case of having lost the player of sight).
It also has two other states that respond through Physics.CheckSphere to calculate what attack will be executed by the player at the time of using the attack, if the distance or the close.
The vision of the enemy is calculated first through Physics.OverlapSphereNonAlloc that allows us to store within an int the number of collisions within an area, then we will verify if between the collisions there is the player, then through a vector 3 we will create an angle that is generated towards the front of the enemy, this will be the total angle of the enemy's vision, finally, we will put a RayCastHit that is calculated between the player's fall and that of the enemy, if the beam detects the collision within the range of the active angle the boolean variable that determines whether the player is in sight or not. This RayCastHit being located in the head of both the player and the enemy and passes over the obstacles of lower height, when the player crouches the RayCastHit is calculated from the knees of the character so he will not be able to see it through these obstacles shorter due to cutting the RayCast
This is a special ability of an enemy that has already been modified with the energy produced through sea creatures, it consists of a sphere that is thrown towards the player, after a couple of seconds it is destroyed and activates a pink image that covers The entire screen, also activates another image that a camera renders through a texture, that camera takes the position of the character's camera at the moment of the explosion, so it seems that the image remains fixed for a short period, these two images begin to lose opacity as time passes after the exploration, at the end of the flash effect it is seen how some smoke particles remain in the field for 3 seconds, if we enter these particles a post effect URP processing is activated and gives the sensation of hallucinating, the effect disappears once we leave the smoke or it despawns
For the collectibles we decided that it should take a while to be collected since this would allow us to maintain the tension at certain times, for which when entering a Trigger of a box collider a floating Ui will be displayed that indicates the progress when pressing and holding the E key to collect, this mechanic was implemented at the time of collecting the sleeping mushrooms, the cards that the enemies drop and opening the doors
For each mushroom collected, an attack can be made, depending on the distance at which the attack is launched this will work differently, at a distance it will throw a dart forward, if it triggers a collider that the enemy has, it will sleep it if the player Attacks at close range will launch a gas that if collides generates the same effect, the gas is easy to hit due to the size of its collider
For this, it had to give the feeling that we are very deep under the ocean, where there was not much lighting of the environment but of bioluminescent flora of the depths and the external lights of the laboratory, Within the post-processing effects that were used we have an adjustment from the shadows, mid-tones, and highlights, make a color adjustment, we also use a bit of chromatic aberration, we also use a Film gain very subtly, we add Depth of field Gaussian after 60 camera units and finally we add an ACES tone mapping and a little bloom.
I also decided to add fog to finish closing the vision to the distance in the water and leave the directing light deactivated. This way generates the effect of being underwater and having little visibility from afar.
For this, I make the planning of the locations of the enemies, the ranges of their ranges, the size and the proportion of the structures in the comparison of the characters,
we define how the level architecture would be for this alpha version