Animancer v5.3

Released 2020-10-06

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 are upgrading from a version older than that.

Animancer v5.3.1

Released 2020-10-08

  • Fixed several Development Build errors.
  • Fixed the TransitionPreviewWindow to not trigger OptionalWarning.EndEventInterrupt if the Next Animation is empty.

Experimental

Several changes are currently being considered for the next major version (v6.0). Any feedback would be appreciated.

Changes

  • Renamed IKeyHolder to IKeyedListItem.
  • Reworked Mixer Synchronisation to fix several bugs:
    • Mixers now keep a list of references to the synchronised child states rather than a bool[] that indicates which children are synchronised.
    • This is slightly more efficient (significantly for nested mixers).
    • Added MixerState.AutoSynchroniseChildren to control whether newly added children are automatically added to the synchronisation list (default true).
    • Fixed it to work properly on nested mixers by giving their synchronised children to the parent mixer to synchronise them all together so that the outcome is not based on the non-deterministic AnimancerNode update order.
    • Fixed it to keep states synchronised even when none of those states have any Weight.
    • Fixed it to work properly with LinearMixerState.ExtrapolateSpeed.
    • Fixed it to work properly with negative speeds.
    • Fixed it to work properly with zero length states.
    • Added OptionalWarning.MixerSynchroniseZeroLength.

Improvements

  • Animancer Event markers on the TimeRuler can now be dragged to move their time.
  • Added AnimancerState.NormalizedEndTime to wrap AnimancerEvent.Sequence.NormalizedEndTime and return the default time based on the EffectiveSpeed if the value is NaN.
  • Improved the PlayableAssetState binding system:
    • The "Markers" track in Timeline Assets is now automatically skipped.
    • The PlayableAssetState.Transition Inspector now highlights the size of the Bindings array as a warning if it does not match tracks in the the assigned Asset.
    • The track names are now used for their respective Bindings fields (instead of the default "Element X").
  • Negative AnimancerState.Time values are now displayed correctly in the Live Inspector.
  • AnimationBindings now continues gathering bindings even when the Unity Editor is Paused.
  • Improved the formatting of AnimancerNode.AppendDescription.
  • Improved automatically generated state names:
    • Changed the default name generated by AnimancerState.ToString to Main Object Name (Type Name) (instead of putting the Type Name first.
    • Added similar ToString methods to Transitions.
    • AnimancerTransition.Apply now assigns the asset's name to the state.
  • The Inspector now shows the Real Speed of a state if it is different from the AnimancerNode.Speed (because Mixer Synchronisation changes the internal Playable Speed without setting the State Speed).
  • Added OptionalWarning.UnusedNode.

Fixes

  • Fixed Mixer Synchronisation to ignore zero length states.
  • Fixed AnimancerNode.EffectiveSpeed to properly account for the root AnimancerPlayable speed.
  • Fixed EventSequenceDrawer to work properly outside of a TransitionDrawer.
  • Fixed exception when attempting to destroy a state connected to a mixer which doesn't have its Root set.
  • Fixed OptionalWarning.EndEventInterrupt to not trigger if the AnimancerLayer.CommandCount changes.
  • Fixed AnimancerEvent.Sequence.SetCallback to not trigger OptionalWarning.DuplicateEvent.
  • Fixed ObjectPool.Disposable to work properly for HashSets.
  • Fixed AnimationBindings to work properly for Euler Angle rotations (rather than only Quaternion rotations).
  • Fixed the TransitionPreviewWindow to not throw exceptions if the Key of the previewed transition is null.
  • Fixed the AnimancerNode finalizer to not cause Unity threading errors.
  • Fixed various Context Menu Functions on Mixer Transitions to ensure they target the correct SerializedProperty if there are multiple such fields on the same object.
  • Fixed various OptionalWarning.Log calls to not create any garbage unless the warning is actually enabled.