Animancer v4.4

Released 2020-03-27

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

Features

  • Mixer Transitions now have a Speed field for the whole mixer as well as the individual animations.
  • Mixers now show dropdown menus as the headdings of each column instead of using context menus so that the available functions are much more obvious.

Improvements

  • Added AnimancerPlayable.StateDictionary.ReferenceKeysOnly so that the dictionary comparer can be set to use ReferenceEquals for better efficiency if you aren't using value types.
  • The Inspector now locks event times for looping animations into the 0-1 normalized time range since values outside that range are not supported.
  • Added LinearMixerState.SortByThresholds.
  • LinearMixerTransition now displays an error in the Inspector if the thresholds are out of order and you can click it to sort them.
  • EventSequenceDrawer now overrides CanCacheInspectorGUI to return false so that it can draw the TimeRuler properly when no custom editor is present.
    • Removed DummyObjectEditor since it is now unnecessary.
  • MixerState.AppendDetails now includes the child synchronization flags.
  • MixerState<TParameter>.AppendDetails now includes the thresholds.
  • Improved various assertions:
    • AnimancerNode.Weight does not allow Negative, Infinity, or NaN.
    • AnimancerNode.Speed and AnimancerState.Time do not allow Infinity, or NaN.
    • Added similar assertions to MixerState.ApplySynchroniseChildren.
    • Added various assertions to verify the correct initialization of the Playables.

Fixes

  • Fixed Animation Events to work properly on Generic Rigs.
  • Changed the default AnimancerNode.Index to int.MinValue because PlayableGraph.Connect with an index of -1 causes it to allocate and connect to a new port instead of throwing an exception. #33
  • Fixed MixerState.Speed to work properly when using synchronization. #34
  • LinearMixerState now defers its call to AssertThresholdsSorted so that you can actually set thresholds individually without immediately triggering the assertion.
  • Reordering a Mixer Transition in the Inspector will now properly reorder their sync flags as well.
  • Fixed MixerState.ApplySynchroniseChildren to properly handle child states with 0 length (generally nested mixers that have all their children at 0 weight).