Warning
Requires Unity 2019.4 LTS or newer.
Footstep audio is in a way similar to ambience : Players won't pay attention or singing much praise for the game that has it, because they are so natural to the ears they fade away. However a game missing it immediately feels empty. Moving is supposed to feel more tactile.
Implementing footsteps or ambience instantly bumps up polish level of your game to a new territory. Frequency wise, you will hear the footsteps all the time as soon as you move. It is definitely a worthwhile investment in development time to make it detailed and dynamic.
Build upon this
Other solutions out there are all trying to be the complete solution. Many made direct mention to :
- Terrain plane or mesh.
- Physics, rigid body collision, or inverse kinematics.
- The animation or events to trigger the steps.
- 3D model, an actual feet of the model.
- Player controller script.
- Specific action of the player, such as jumping.
- Specific attributes of the surface, such as wet/dry/etc.
- Even visual aspects such as particles, step marks, etc.
I understand why these features are needed in the game, but they have no business in the footstep audio scripting package that I wanted to own and use in many projects to come. I would rather build up a perfect-fit solution from a more barebone pure-audio solution.
Modular Footstep aims to provide LESS, but combined with your manual effort, it is more likely that the package can solve footstep problems while satisfying unique problems of your game.
I surveyed and was not satisfied with available "premium" solutions in the Asset Store. I would rather walk forward from the plugin, not backwards.
Extensive, dynamic clip picking and playing behaviour
Variations is a very valuable feature in scripting great-sounding footsteps. In the inspector of an asset called FootstepBehaviour
, even the pickiest sound designers are welcomed to have a lot of fun.
Not only you can script volume and clip variations per one permutation of surface and stepper, how they got picked can be selected between randomized or sequential.
Random has chance weighting curve and exclusion list to prevent repetitive random. Sequential can be in array order or any looping sequence you wish.
Each picked clip can be further tuned the volume, which can be set to randomize from an inclusive range to easily make it sounds dynamic. Setup per-clip attack point calibration to bring them in line together. Even let it insert footstep lifts in-between the interval.
Modular API with asset combinations
It is not obvious how can we simplify footstep scripting API so that it covers use cases such as walking, jumping, different surface, same surface but wet, etc. without directly mentioning those terms and in turn specializing the plugin too much.
Modular Footsteps's solution : The API will not allow directly using FootstepBehaviour
you just made. Instead, 4 kinds of resolving asset are required to resolve into 1 FootstepBehaviour
, which the plugin can play.
These are the "modular" aspect of the plugin. Footsteps often have hierarchy and shared traits. Stepping on the same grass but with different characters? The same character but now they run or slide on that same grass instead? How many configurations you must maintain if you then increase the type of surface or type of character later? Can you keep up with all the combinations?
These 4 assets plus the "resolver" will replace the C# code which would have been your work, having to pick the right sound given the current situation. Now you can just switch around any of these 4 assets on the input to instantly resolve to a different result!
Dual play modes
Two play modes balancing between efficiency and flexibility.
1. Interval Play
This mode's workflow is a sequence of calling start-update-stop. It needs an interval number on starting to kick off the routine.
This one has its own perks other than convenience. There is no coroutine in sight, instead a singleton scheduler handles firing of all things stepping in the scene in 1 update. How about moving each step earlier in time, differently, to compensate attack point difference in the clip? You can also stop with or without "respect" to the step, abruptly cut off the lingering step or not. You can also specify start offset to attempt to sync up with sprite animations where you can't wire up each individual step like 3D model.
2. One-Shot Play
You can always ask the API to "one-shot" a surface to handle jumping, landing, precise walk cycle animation keyframing, or even digging it with a shovel! That crossed the line of "footsteps" but well, this plugin is so abstracted.
You will hear something once. But that could be really dynamic across multiple shots. It keeps a state memory across calls. This is a mode you can wire up with those animation keyframes, surface colliders, and any other tight integration you may have seen from more premium solutions. Now you are able to build that on your own, which is a good thing because you will understand your own code the best.
Up to the task
As both a programmer and a sound design amateur, I went out there for months and do field recording of my own footsteps, process them, and try implementing many surfaces and situations on my own plugins.
I learned about many unique challenges along the way in both recording and editing, ultimately how the plugin should be able to help out at the final point in the pipeline. Can your solutions handle real world intricacies of footsteps well enough?
Those would bloat this front page for sure. You can read about them in Concepts/Footstep Problems.
"Ready, set, step!"
- Read about the most crucial abstraction used in this plugin in Concept/Behaviour and the Resolving Assets.
- Before you purchase, see an online WebGL demo about 2 cubes with the most realistic footsteps ever in Getting Started/Demo and Samples.