A Transition Asset is simply an Asset that contains a Transition. Each Transition Type also has an associated ScriptableObject
type with a transition field (and nothing else) so that you can create them as assets to share a transition throughout your project instead of each object having its own individual transition. They all follow the same naming convention:
Class | Type | Description |
---|---|---|
ClipState |
State | Manages the runtime details of an AnimationClip such as its Time , Speed , Events , etc. |
ClipTransition |
Inline Transition |
A serializable class which allows the above details to be defined in the Inspector and will create a ClipState when played. |
ClipTransitionAsset |
Transition Asset |
A ScriptableObject with a ClipTransition field. |
ClipTransitionAsset .UnShared |
UnShared Transition Asset |
A serializable class with a ClipTransitionAsset field and its own copy of the transition's State and Events in order to avoid conflicts between characters who share the same asset. |
- You can create transition assets using functions in the
Assets/Create/Animancer
menu. - The Linear Blending example demonstrates how to use them.
Inline Transition | Transition Asset |
---|---|
|
|
When you use a regular transition field, it is a part of the script where is it declared so every instance of that script will have its own transition details. |
When you use a transition asset, you need to actually create a separate asset for your field to reference, but then anything in your project can reference that asset to use the exact same transition settings. Normally when referencing another object like this you need to select that object to view or edit its values, but if you have Inspector Gadgets Pro it shows a foldout arrow on the Object Field so that you can show the referenced object's Inspector without changing your selection. |
UnShared
After you play a transition, its State
property stores a reference to the Animancer State it created. More specifically, a single transition can be used to create multiple states (usually on different characters who share the same transition asset) so the State
property actually only references the most recently created or played state. This leads to a problem where each character wants to access their own state, but because the asset can only remember one state at a time each character needs to store their own state in another field beside their reference to the transition.
Any Animancer Events stored in the transition's Events
property suffer from the same limitation. Each transition only has one AnimancerEvent.Sequence
containing one list of event times and callbacks, but each character sharing the same transition will usually want to assign their own callbacks to it.
These problems can be avoided by using the UnShared
class nested inside each transition asset class (e.g. ClipTransitionAsset.UnShared
) instead of directly referencing the transition asset itself (e.g. ClipTransitionAsset
). UnShared
is a serializable class which holds a reference to the transition asset and also keeps its own reference to the State
and its own copy of the Events
for each character.
Direct | UnShared |
---|---|
This is what the Linear Blending example looked like before UnShared transitions were implemented. |
And this is what it looks like now. |
|
|
Unfortunately, changing a field's type from a transition asset class to an UnShared
class will cause it to lose any existing references that were assigned to it.