Animancer v5.2

Released 2020-09-16

When upgrading to a newer version of Animancer, you must delete any previous version from your project first.

See the Animancer v5.0 Upgrade Guide if you're 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

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 Weight of 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 RawTime and Length based on only those children if at least one of them has any Weight. 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 WarningType to OptionalWarning and added documentation comments for all of them.
  • Renamed AnimancerState.Name to EditorName and SetName to SetEditorName to make it clearer that they are Editor-Only.
  • Replaced the Interpolation class with Easing (used by the Custom Fade system):
    • It has most of the same functions, but they are grouped into nested classes. For example, Interpolation.QuadraticIn is now Easing.Quadratic.In.
    • Removed the Spring functions 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.

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.ChildCount and GetChild.
  • Added MixerState.MinimumSynchroniseChildrenWeight to set the minimum total weight for synchronization to be used (default 0.01).
  • Added ObjectPool.Disposable to allow pooled objects to be acquired and released within using statements 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 AnimancerTransition class are now virtual. #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 AnimationBindings system:
    • 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.avatar is 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.Log message explanation and added a link to the OptionalWarning documentation.
    • 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 IOwnedState implementation by manually specifying the generic arguments to prevent it from inferring the wrong type.
    • Removed comments from override members if they are identical to their base since Visual Studio's Intellisense can finally display inherited comments.

Fixes

  • Fixed AnimancerState.Time to always apply the set value even if it was already at that value (because setting the time of a Playable causes 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 AnimancerState to properly pause its Playable by default.
  • Fixed MixerState.RawTime to use its own time instead of 0 if no children have any weight.
  • Fixed LinearMixerState.ExtrapolateSpeed to set the correct speed when enabling it with the Parameter below 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 AnimationBindings to not execute while entering Play Mode because it might waste time doing things both before and after the domain reload.
  • Fixed AnimationGatherer to 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.