Recently I’ve been working on audio for a first-person shooter created in Unity, the team are using FMOD for audio implementation and one of the first stages was setting up a useful material based footstep system. I’ve been through a few iterations so far, but have finally settled on a system that I’m happy with. The challenge was making the audio engine easily adaptable when new materials and objects were introduced in-game, which is of course really useful when you’re in the early stages of development.
The first system can be seen in the screenshots below, showing the Object Footsteps event inside FMOD. Each track had a nested event which contained its associated object footstep sound, and the Object parameter control at the top, basically automated which one you’d hear depending on the surface the character stood on. (automation can be seen in fig 1.2).
This system worked however my main concern was that every event would be playing simultaneously each time a footstep event cue was triggered in the game – this meant over 40 audio assets being run in real time for each step! Clearly… this was not the best solution (especially when you take multiplayer networking into account) so I adapted the system so that only one footstep event would play at a given moment, reducing the amount of audio being played back at once and optimising performance in the process. You can check out some of the sounds and how the object parameter value effects the event in the video below.
Fig 1.3 shows the logic behind the event, which is super simple! Unity will send a value between 0 and 8 for every step sound that is triggered. In this case ‘0’ is the generic default step, ‘1’ is asphalt and so on. Then each of the nested events (blue regions) are given a specific target range to work on (shown bottom right). For example the target range of the generic step is between 0 and 0.9, asphalt is 1 and 1.9 etc. Obviously this relies on your audio programmer or whoever is incharge of scripting inside Unity to send out the values so that FMOD can read them – but it’s fairly straightforward once you’ve got the system in place.
The next step will be to add a ‘crouch’ parameter which will change the sound of each footstep event if the player is in the crouch position. Stay tuned!