Lucas' Portfolio Website
Grease

Fishy Business

About:

On July 6th 2023, my second game was released. It is an arcade-style game with levels and an unlimited mode. This was the first game where I created everything myself; code, music, sprites, etc.
In this game, you are a strong fish who made it his purpose to clean the oceans with his powerful kick to save the coral! But beware of the nets and fishing rods!
This game was made to spread awareness of conserving the oceans. Overfishing, marine pollution by plastic, and starvation of coral are displayed.


Created by:


Engine:

Made in Unity


Platforms:

Windows, HTML5


Game:



Screenshots:

FishyBusiness1 FishyBusiness2 FishyBusiness3

Process:

ProcessPictures
My first idea for this game was a platformer where you play as a crab. Because I had created a platformer already; ForestFoxDX in Unreal Engine 5, I decided to make a different kind of game.

ProcessPictures
My next idea was an arcade type of game, where you are meant to improve your high score. I added fishing rods and nets, to show overfishing and the bottles represent plastic pollution.

ProcessPictures
I concluded that a level system might be better, with a bigger second level and thus area to defend in-game.

ProcessPictures
I wanted a visual indication for the player why it is important to kick the bottles back, so I made some coral reefs with a health bar.

I started by doing the Unity tutorials; the Essentials, the Creative Core as well as the Junior Programmer course. I continued learning by watching many, many tutorials on using Unity. Then I made a level layout and a movable character with updating animations. I made a collecting system with a current score, a high score, and a timer. At this point, the base for my platformer (back then) was ready.

Now that I was somewhat comfortable with how Unity and C# work, I decided to focus on the theme of my game, so I made a fish character with different physics than the base character. It was able to swim instead of walk and jump and wasn’t bound to gravity. I made custom sprites for my character, the rods, nets, plastic bottles, background, coral reefs, ground, and more.

Then I made the corresponding GameObjects; thus the rods, nets, and bottles, and gave them their behavior; the bottles sink to the bottom, the rods and nets go into the water until a certain height is reached, and stay a couple of seconds, and leave the water again. All have different spawn rates and speeds. I gave my fish character an attack move, so he could 'kick' the bottles out of the water.

I learned to use Lerp to be able to get the Nets and Rods in and out of the water smoothly and I created Prefabs from most GameObjects to be able to easily use them in other levels as well.

I added controller inputs to attract a wider range of players, created a menu and a welcome, win, and lose screen, and finally a little story, so the player knows what the goal is. Afterward, I added custom music and sound effects, a second level, and finally an arcade game mode, where the only goal is beating your high score.

ProcessPictures
This is a screenshot from level 1 in the final build. I realized that it would be better if the Main Mode levels didn’t have a high score on display because the player isn’t able to kick more bottles than the goal of 15. I deleted it here, so only the arcade/unlimited mode levels have one.

ProcessPictures
This is a screenshot from the second level of the arcade game mode in the final build.

ProcessPictures
I found that the height where gameObjects spawn varies per gameObject and level. That’s why I changed the Instantiate(y), to a public float dubbed spawnHeight, so I can change it inside Unity itself. This made adjustments and testing a lot simpler.

ProcessPictures
I used color-coding for the buttons; On the Welcome scene you can see a green button for start, because that is what the player often wants, on the Win scene is a red button for quit, because it is a bright color that generally means ‘danger’ (this is because you do not accidentally want to quit the entire game), and lastly I made the unlimited mode buttons orange and red retrospectively, to nudge the player to try the main campaign first.

ProcessPictures
I decided to create a timer with three decimals, rather than without any, so there could be somewhat of a speedrunning experience, or the player could also try to beat their best time. I consider it to be a good addition to the game, adding to the fluency and experience of the game.

After creating the basics of the game, I started letting others playtest my game, gathering feedback, and improving my game.

The first playtester let me know that the random.range of the x-position for the spawn point of the bottles is too much to the right. I fixed it by moving the float leftestPoint and the float rightestPoint both to the left. ProcessPictures

The second playtester found the second level easier than the first level. Presumably, because the spawnRates of the bottles, nets, and fishing rots stay the same, which means that the same amount of entities spawn over a bigger x-range, which makes it feel empty. I fixed this by reducing the spawnRates by a second and half a second.
ProcessPictures
ProcessPictures
Level 2
Level 1


ProcessPictures
ProcessPictures
A first-year student noticed that the KeyBinding for the kick move was not clear. I fixed this by adding the KeyBinding in the selection scene.

I started making this game by knowing nothing about Unity. Now I have made a game that I want to improve by processing feedback, adding more levels with new enemies, a boss fight, and a level selection screen that is unlockable after beating the game.

During this project, I developed my skills in Game Design, Level Design, Unity, C#, Prototyping and Gathering and Applying Feedback.


Download it for free on my Itch page!

Look at this page on your laptop/pc to play or download the Windows version for free on my Itch page!