Auto compile-time support for Unity Animation Parameters
Previously I wrote about the problems in Unity of having to use string literals for Tags. In the article I provided a solution to automatically generate constants to be able to provide compile-time checking. I have now enhanced this to support Animation Parameters too.
The Problem — magic strings
When you write code to change an animation parameter you end up having to use a string. E.g.
It is a very brittle technique. Have you spelt it correctly, has a animation designer changed the parameter, what are the available parameters when you add new code, etc.
Automatically generate a constants file
When I edit the parameters of a animation controller, I want the parameter to be more concretely available to my code.
In this example I have opened the SolvalouController animation controller and added an IsReady parameter. I then must save the project.
Now if I look in my Globals folder, not only do I have a list of my Unity Tags I now have a Param file per Controller.
I can change my code and be more comfortable that my params are now accurate and I will have compile time errors if a change occurs.
Plug-in design
When I wrote the Tag Processor it was a standalone script. However, now I have two processors I thought it was time to create a better design.
Tag Processor Container
The Container lives in the Resources folder, it just makes it easy to load from code. Its role is to provide a list of Processors that are to be used. In the above example you can see that it contains 2 elements, Tag Processor and Animation Param Processor.
The Processors
Each processor derives from PostProcessorBase. This contract means something can ask, “Can you handle this changing file”, and “Go ahead and process the changes”.
This means the previously written AssetModificationProcessor can iterate over the processors to see if anyone is interested in the changed files and call the appropriate one.
Known Problems
The code currently does NOT cope with clashes of Controller Names that are in different namespaces. I am mulling over how best to handle that, suggestions welcome.
I am still not refreshing the Asset Database so for the first run the constants class file may not appear in the hierarchy until after a compilation has occurred.
The Code
If you would like to use the code, then please feel free and let me know how you get on. But it is just experimental so please ensure you have the correct back-ups of your code before using it.
cbcstudio/Editor/TagProcessors at main · paulio/cbcstudio (github.com)