Embark was our second project in The Game Assembly. I also helpd create the music for the game, at the same time as the project was ongoing.
One of my main tasks in Embark was the water that you see during gameplay. It is supposed to rise and flow when alligining all the tiles correctly and winning the level.
We had three different tiles: Straight, curved and T, which the water had to work on. To achieve this
we had a plane that matched the tile in the middle with a shader.
To make the water rise, the plane had a shader attached to itself, we than fed it a texture we created. that went from black to white in a certain direction. The texture decided in what direction and how smoothly the water would rise. If we wanted the water to rise from the oppisite side, we just rotated the plane 180 degrees. This of course depended on how the tile was rotated and from which way the previous tile water came from.
(one of the first tests with the water)
This of course works great on a simple straight tile. Another texture needed to be created that as the one before it went from black to white. But instead the direction had to be more precise.
(The water in action on an actual level, with straight and curved tiles)
The T tiles were the hardest tiles to get right. I tried many different textures and ideas, but non of them worked. I decided it would take to much work to make it work so I just let the water rise from the middle and flow towards each entry point.
It can be quite difficult to know for sure when animating something in maya on how it is gonna look in-game. Which was the case with our tiles. We knew we wanted the tile to rotate 90 degrees once we clicked on them. But how would they turn? How fast/slow should it reach it's target?
It was these questions that in the end I decided to create a small and easy tool in Unity to let our animators use to decide the rotation, height and speed of the whole tile turning.
I used Unity's AnimationCurve as the base for my tool. With these I created two separate animationCurves. One for the translation of the object.
(curve for the translation of the object, y decides how high the object goes to based on its world position)
And one for the rotation.