top of page

I developed Wasteland Fugitive specifically for this portfolio. To challenge myself. I went out of my way to learn and use tools, patterns and workflows I'd not used before. You can download the game here.

​

A few of the highlights are:

  • All audio implemented with FMOD

  • A robust and generic object pooling system

  • Perlin noise terrain deformation

  • Unity's new Input System

​

Terrain Deformation

I used perlin noise as a procedural height map to deform Unity's terrain system. Scrolling the Y axis of the noise texture and updating the mesh accordingly (and mesh textures) creates a nice illusion of movement. I then had my player camera stay in place and simply adjust height based on the upcoming terrain.

The illusion of forward movement is helpful so that I didn't have to deal with large floating numbers if the player has a run that lasts a great distance.

Object Pooling

As this is an endless runner I knew I'd need a robust object pooling system. Assets get spawned in and used briefly and regularly so I wanted to avoid creating garbage. Unity's  GameObject.Instantiate() creates too much garbage for this repeated use-case.

I made my own generic pooling system (a singleton). It dynamically creates new pools for new objects and keeps those pools in a Dictionary (the Dictionary key being the object name). If an object is being spawned or returned to the pool I check if a relevant pool exists and either create one, pull from the relevant pool or put the deactivated object back into the relevant pool.

While you may appear to pass hundreds of props in a minute there are never more than 4 or 5 instances of an asset loaded into memory.

FMOD Studio

I'm very familiar and comfortable with Unity's built-in audio implementation workflow so FMOD was stepping out of my comfort zone. I had to dive into their documentation regularly. But I have a passion for audio and I thoroughly enjoyed learning and implementing FMOD. I found it to have built in solutions for many things that I've had to code for myself in the past. Such as sound randomisation (clip, pitch and volume), adjusting parameters in realtime, and optimisation. I could definitely see myself diving deeper and learning the well of functionality if I found myself in an audio focused role.

Watch with sound.

Programming

I tried to focus on learning and implementing programming patterns and C# functionality that I have not used (or not consciously dived into before)

  • Humble Object Pattern

  • Separation of concerns

  • Event workflow (having simple, readable behaviours that are activated by simple Events and then have those linked up in different configurations depending on the gameobject)

  • I tried to focus on using C# Async Tasks instead of Unity's Coroutines

  • Generally strengthening my Game Math (a lot of lerping, perlin noise, Vector math, ray-casting and sphere-casting, aligning object to a surface normal etc.)

​

I used the Singleton pattern and Humble Object pattern for my gameplay feedback.

bottom of page