Released 2020-09-16
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
- Added
EventNamesAttribute
which 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
TransitionPreviewWindow
camera by pressingF
. - Added Update Rate example.
- Added
TimeSynchronizationGroup
and 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
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
andLength
based 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
WarningType
toOptionalWarning
and added documentation comments for all of them. - Renamed
AnimancerState.Name
toEditorName
andSetName
toSetEditorName
to make it clearer that they are Editor-Only. - Replaced the
Interpolation
class withEasing
(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 nowEasing.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.
- 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.ChildCount
andGetChild
. - 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 withinusing
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 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
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 theOptionalWarning
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.
- Improved the
Fixes
- Fixed
AnimancerState.Time
to always apply the set value even if it was already at that value (because setting the time of aPlayable
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 itsPlayable
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 theParameter
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
.