Jordan Ross
Game Developer
EcoTide
Project name: EcoTide
Made in
10-March/2025 until 18-april/2025
GitHub:

My contribution
This project I made all on my own. I wanted to focus on learning new game elements so during this project I focused on sound design and world design using different background sounds to enjoy the experience more and make the game come to life. I also focused on practising with animations, the animation I made was for the boat man in the row boat, he keeps rowing with the paddles once the boat is moving to make it look like the man is actually rowing the boat.
Team size: 1
Tools used: Unity, visual studio (2022) C#, GitHub.
Description: I started working on a water base game because I never worked with water and waves before so I used this project to start learning allot of new techniques to apply in future projects. The theme of this project was focused on recycleing because of the 17 sustainable development goals of the world! focused on all the plastic in the oceans. So the main objective is to collect plastic and sell them to the local fisher to collect money and expand your collection empire!


After leaving the boat and collecting the plastic bags in the ocean, you can go to the local fisherman and sell your bags in return for money. Just like a tycoon game you can earn money and slowly grow your recylced income! The fisher man will give different inputs depending on how many bags you sell at the time. If you sell between 1 and 9 bags the fishermans response will say: great work keep it up! and once you sell more then 10 bags he will respond with: The Car is leaving! once the fihser man says that the car will be filled with boxes and drives off to the city.
The row boat is used to float around the water and use the net attached to the back of the boat to collect trash bags that are floating around on the water. For every trash bag you collected it will be added to your storage. You have to collect as many bags as you can but if you run out of time before you are out of the boat, then the player will be spawned out of the boat automatically and your plastic will be set to zero. So the key is to be as fast as possible and watch the timer closely!




The more money you earn the more you can expand your fishing empire. With the money of the recycled plastic you can buy a bigger faster boat that makes it easier to collect more bags and faster to earn money!
You can also spend your money unlocking the city and buying all the houses and buildings to make the world bigger and more interesting to look around! This gives a purpose to all the fishing and sets a light on the importance of recycling and what can be done if recycling is taken seriously.


Here is a Professional comercial video for the game EcoTide. Showcasing how fun the game is to play!
Code snippets
WaveManager

The waveManager script acts as a core wave function generator. It defines a simple sine wave using the four float paramaters. Amplitude ( controls the waves height), Length ( controls the waves length the distance between peaks), Speed ( determines how quickly the wave moves and the next wave starts), Offset ( continuously increases over time to animate the wave). In the GetWaveHeight function the vertical displacement gets returned on the Y-axis. and set at a given X-position. Then the offset updates over time, which animates the wave horizontally.

The water object is based on an empty object where I added the WaveManager script mentioned above and also added the WaterManager script. together with the audio source and a box collider to showcase where the empty object is located. then on this empty object I added two other empty objects one for the spawn area this shows where the plastic bags can spawn using a box collider on the water. and the other object uses another box collider to surround the enitere area and is set to trigger so that the game knows once the player is inside of this box then the water wave sound will play.
The WaterManager script dynamically updates the mesh verticies of the gameobject it is attached to. It achieves this by checking the wave height from the WaveManger script and modifying each vertex accordingly.
The script loops through the mesh's verticies, and for each vertex it calculates a new Y-position on its
X-coordinate and the objects world position. Then the vertical displacement is retrieved by calling the WaveManager.GetWaveHeight() function.


Here is an example of the wave calculation. The wave gets bigger by changing the amplitude, here you can clearly see the plane making beautiful artifical waves in the scene. This was one of the biggest challenges I had to face during this project along with making the boats float accordingly and made the boat follow the rithem of the waves without either drowning the boat or making the boat flip upside down. The boats use 4 empty gameobjects on the corners that are called floaters and these floaters try to stay above the water this way when one of the corners of the boat goes under water the boat slowly goes up again and follows the rithem of the wave perfectly. these floaters are set to a minimum amount of depth that they can be under water. This minimum depth is used to make sure the boat doesn't fly above the water and actually goes up and down.
The rest of my code can be found on my Github page by clicking the logo on the top of this page. You can also play this game and many of my other projects on Itch.io by clicking the big play now button in the middle of this page.