Released 2020-09-16
See the Animancer v5.0 Upgrade Guide if you are upgrading from a version older than that.
Experimental
A potential change to the FSM system is currently being considered for the next major version (v6.0).
Features
- Added
EventNamesAttributewhich lets you specify a set of allowed Event Names for Animancer Events to display in a dropdown menu instead of using a text field. #56 - Added the ability to reset the
TransitionPreviewWindowcamera by pressingF. - Added Update Rate example.
- Added
TimeSynchronizationGroupand used it in the Directional Character example. Feedback wanted.
Changes
- States with 0 length will now trigger all their Animancer Events once per frame (instead of only triggering the End Event). #71
- Setting the
Weightof a state in the Inspector will automatically re-normalize its siblings. This can be disabled in the Context Menu via Display Options/Auto Normalize Weights. - Mixers with synchronised children now calculate their
RawTimeandLengthbased on only those children if at least one of them has anyWeight. This means that Animancer Events on an Idle/Walk/Run mixer where the Idle is not synced will trigger based only on the Walk and Run time so the events can line up with the walk-cycle (except when the parameter is at 0 so only the Idle is playing). - Renamed
WarningTypetoOptionalWarningand added documentation comments for all of them. - Renamed
AnimancerState.NametoEditorNameandSetNametoSetEditorNameto make it clearer that they are Editor-Only. - Replaced the
Interpolationclass withEasing(used by the Custom Fade system):- It has most of the same functions, but they are grouped into nested classes. For example,
Interpolation.QuadraticInis nowEasing.Quadratic.In. - Removed the
Springfunctions because the derivative was wrong and it didn't have in/out variants. - Fixed several mathematically incorrect functions (Unit Tests are available on request if you plan to modify any of the functions or add your own).
- Fixed all of the ranged methods (ones with
(start, end, value)parameters) to properly correspond to the appropriate normalized methods (ones with a single(value)parameter). - Added ranged derivative functions.
- Added comments to explain what mathematical functions the methods represent.
- It has most of the same functions, but they are grouped into nested classes. For example,
Improvements
- Improved the default name generation for Mixers to remove a
"State"suffix and combine any prefix by all children. For example,"LinearMixerState (Humanoid-Run, Humanoid-Walk, Humanoid-Idle)"would now be"LinearMixer Humanoid- (Idle, Walk, Run)". - Added
IPlayableWrapper.ChildCountandGetChild. - Added
MixerState.MinimumSynchroniseChildrenWeightto set the minimum total weight for synchronization to be used (default 0.01). - Added
ObjectPool.Disposableto allow pooled objects to be acquired and released withinusingstatements instead of needing to manually release everything. It has a bit of overhead though, so it is currently only used in Editor-Only code. - All methods in the base
AnimancerTransitionclass are nowvirtual. #70 - The Drag and Drop Sub-Assets feature of Inspector Gadgets Pro was used to turn various animations into sub-assets organise them a bit better (Directional Basics and Directional Character).
- Improved
AnimationBindingssystem:- It is now limited to only gather the bindings of one animation per frame to avoid freezing for too long when an object with lots of animations is selected.
- The warnings now indicate if the
Animator.avataris missing. - The warnings will no longer list the bindings if none are missing.
- The icons are now only loaded when needed.
- Fixed it to work correctly if a character is not already selected while entering Play Mode.
- Improved comments:
- Improved the
Validate.Logmessage explanation and added a link to theOptionalWarningdocumentation. - Added documentation link to the copyright comment at the top of every script.
- Added User Manual, Example, and API documentation links to the comments of all public types.
- Added a detailed example to the StateExtensions documentation to explain how you can still use them when your field type inherits the
IOwnedStateimplementation by manually specifying the generic arguments to prevent it from inferring the wrong type. - Removed comments from
overridemembers if they are identical to their base since Visual Studio's Intellisense can finally display inherited comments.
- Improved the
Fixes
- Fixed
AnimancerState.Timeto always apply the set value even if it was already at that value (because setting the time of aPlayablecauses it to stay at that value after the next animation update, so skipping it would change the behaviour rather than just being an optimization). - Fixed
AnimancerStateto properly pause itsPlayableby default. - Fixed
MixerState.RawTimeto use its own time instead of 0 if no children have any weight. - Fixed
LinearMixerState.ExtrapolateSpeedto set the correct speed when enabling it with theParameterbelow the highest threshold. #64 - Fixed Mixer Synchronization to not cause extremely large time values if the total weight of all synchronised states is very small.
- Fixed potential NaN error in
TransitionPreviewWindow.Scene.CameraPosition. - Fixed
AnimationBindingsto not execute while entering Play Mode because it might waste time doing things both before and after the domain reload. - Fixed
AnimationGathererto work properly for collections. - Fixed exiting error message in
PlayableBehaviour. #69 - Fixed Mixers to clear their automatically generated name if any children are added or removed.
- Fixed
AnimancerPlayable.StateDictionary.DestroyAll(IAnimationClipSource)to actually work. - Fixed various examples triggering
OptionalWarning.EndEventInterrupt.