Platform:
Windows PC
Engine:
Unity Engine 2021.3.14f1
Programming Languages:
C#, LUA
Duration:
9 months
Tools Used:
Visual Studio Code, Photoshop, Blender, Drawing Tablet, Audacity
Completed:
August 2023
Team Size:
Total: 23
Design/Engineering: 6
Art: 5
Animation: 8
Audio/VA: 4
Role:
Technical Director
Cross The Sea is a short first-person action-adventure game built in the Unity game engine. It features sailing, quests, puzzles, and a narrative about a teenage boy braving a strange new world in an effort to find his father after he vanishes mysteriously.
On the journey to find their father, the player sails from island to island, interacting with their inhabitants and discovering notes and cassette tapes that have been left behind to assist the protagonist in his search and to enrich the world. The vertical slice ends with a cliffhanger.
Project Goals
Create a fun and engaging experience to showcase our skillsets to employers.
Tell a narrative coherently and impactfully.
Prove our skills as soon-to-be graduates of the ACC game design program.
Create an engaging sailboat vehicle that feels dynamic to the player and poses unique problems to them.
Contributions
My official title on the project was Technical Director. I was responsible for setting the formatting standards and optimization expectations for all code submitted. I managed the project’s source code using Unity Teams and Plastic SCM. I was the main point of contact for any implementation questions anyone on the project had. I also voiced the titular father character.
My contributions to the project include:
Creative input on game mechanics
Boat movement and wind propulsion
Scene agnostic loading system and loading screen
Boat animation and animation syncing
Agnostic interaction interface system
Camera swapping system
Wind shader and cave painting shader that fade in and pulse
Wind particle effect
and much more!
Agnostic Loading System
Blend shapes, Animation Layers, And Procedural Animation
Animation layer setup within the animation controller
Code driving the animations layers (Github)
Outcome of boat animations working together
Early on in our development, we ran into an animation problem with our primary hero asset, the sailboat. Our problem was that animations could not be stopped at any angle/amount of progress to provide the full range of motion available to a sailboat in real life. We solved this problem by making use of Unity’s animation layer system and blending smoothly between what is effectively two keyframes that represent the extremes of each part of the boats movement. IE. We’d have two animation clips that contain one frame for the boom positions, 35 degrees port and starboard, and then we assign a blend value through code to decide where in that range it ought to be. If we fed in a value of 0.5 in this example, then the sail would be centered along the length of the boat.
Shaders
Code and Sequencing (Github)
Programmatic Sailboat Icon Animation (Github)
Outcome of these systems working togher
Throughout our early development, we ran into many issues getting our loading screens to provide a seamless transition between scenes within the game. While approaching this problem, I knew that it had to consist of three parts: a fade to black smoothing out of a scene, a loading screen that was displayed while assets were loaded in, and a fade from black smoothing into the new scene. I used a persistent canvas specifically for loading on the game manager to maintain a consistent look to all loading screens and to provide that wanted seamless effect since the game manager is persistent through all scenes.
Wind Displacement Outcome
Cave Painting Shader Graph
Cave painting finale outcome
Both of these shaders were developed in collaboration with our art director, Roarke Estrin. The wind shader was created to provide a feeling of life to all of the plant/folliage assets. I specifically designed it to be easily modifiable within the inspector by our artists. Allowing them to use the single shader for all of the different assets they may want to add, just by creating new materials and adjusting the exposed parameters to their liking.
The cave painting shader was specifically made to facilitate the finally of our game. I was given a list of features our art director wanted, and I designed the shader to his specification. His wants included: the ability to fade them into view from being invisible and the ability to customize emission, metallic, roughness, and culling maps of each decal separately.
In conclusion, my shader development for this game aimed to empower our artists to bring their creative vision to life and to customize the look of their assets on an ongoing basis.