Completion: 2023
Studio: Bounding Box Games
Platforms: WebGL
Engine and tools: Unity, Visual Studio, Git
Team size: 1
Project length: 3 months
Responsibilities: Gameplay, Audio, VFX, Animation, Menu System
Summary of Contributions
Basic Gameplay
During the game items appear along your path and the goal of the game is to collect coins, avoid evil items and dodge obstacles. A running distance score is accumulated.
The running distance will increase up to a maximum run speed.
The coins collected will increase when the player runs through a coin.
The game will end when Kara strikes an obstacle, collects too many evil items or the player decides to end gameplay.
Player Control
You control the character as it moves forward along a path: side-to-side, jump, double jump.
Gameplay Mechanics
As the game progresses, pickups become harder to collect making it difficult to collect all objects.
Sound & Effects
Music - background music for gameplay and UI screens.
SFX - sound effect when picking up good and evil items, hitting obstacles, button clicks.
VFX - particles for running dirt trail, character landing, collisions.
Animations
Kaya Mixamo character as the runner. Animations: run, jump, fall down, fall backwards.
Camera shake when character impacts objects.
User Interface
The start screen gives options to play and review UI controls.
Controls screen: WASD, Jump, Double Jump, Pause.
Other
Events - load next tile, game over, speed change, collect coins, play particles, etc.
Custom skybox
Spawn Manager - random spawn of collectables, avoidables, and obstacles at random frequency in random locations.
Modular menu system - created a template to easily create UI menus.
Multiple scenes - One persistent scene and several additive scenes for menus and gameplay.
Advanced
Atmospheric fog - use to limit sight beyond the rendered objects.
World curvature shader created using Shader Graph.
Scene objects move curve along the x-axis. I explored several techniques before settling on Perlin noise.
- Shader Graph with trigonometry equation: sine wave, hyperbolic tangent.
- Animation for the x-axis curve to shader.
- Cloud noise texture. Didn't try implementing this but might be a viable alternative if needed.
- Perlin noise - I take the output of the algorithm and feed it into the shader.
Pick-up Items: Shader is used to position items along the curve and to rotate the items.
Performance Enhancements
I used the Unity Profiler to gather performance data and make improvements. I documented the results in the sheet below.
Scene Optimizations
With the techniques below, I was able to reduce draws from 3882 to 73.
Reduced the complexity of objects by choosing low-polygon assets. These low-polygon assets do not require Levels of Detail (LODs).
Reduced the number of objects in the scene while still providing interest.
Reduce the number of tiles in the scene, reducing the number of vertices.
Tilt camera down to avoid viewing out into the distance.
Distance Fog - utilized this technique to prevent user from viewing beyond the last tile.
World curvature to limit far distance viewing and create interest.
Physics Optimizations
Colliders - removed colliders from static objects that do not require physics or triggers
Render Optimizations
Cast Shadows - turned off cast shadows on meshes for objects that will not cast shadows.
Mesh Baker - baked multiple textures into atlases that were used for the baked meshes.
Object pool
created an object pool for the tile prefabs.
created object pools for collectables, avoidables, and obstacles.