Test Releases

This page lists the changes that occured throughout the public Alpha and Beta tests of Animancer v4.0.

Final Release

Released 2020-01-28

Changes since Release Candidate 2 (see the v4.0 Change Log for the full list of changes since v3.1):

Release Candidate 2

Released 2020-01-25

Changes since Release Candidate 1 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Fixed the assertions in AnimancerState.EventUpdatable to not allocate garbage if they pass. #22
  • Renamed AnimancerState.EventUpdatablePoolCapacity to EventPoolCapacity.

Release Candidate 1

Released 2020-01-25

Changes since Beta 6 (see the v4.0 Change Log for the full list of changes since v3.1):

  • StateMachine.CanSetState now returns true if the parameter is null since the other methods support nulls.
  • Fixed the TransitionPreviewWindow to work properly when the previous or next animation is the same as the one being previewed.
  • The TransitionPreviewWindow now uses a topological sort to ensure that the unnecessary components it removes from the preview instance do not cause errors due to [RequireComponent] attributes.
  • TimeRuler now clamps event icons to display within the bounds of the area.
  • Fixed Float3ControllerState to show all of its parameters in the Inspector rather than only the first two. #19
  • The ReadMe now includes the Animancer Version in its name to better detect if the user did not delete a previous version before updating (since Unity's package importer will overwrite old files but not rename them).
  • Improved reliability and performance of AnimationGatherer.
  • Improved the examples:
    • Fixed the Directional Blending example to go back to sleep properly.
    • Rewrote the Footstep Events example to include Animancer Events and much more detail about how to set everything up.
    • The More Brains example now enables and disables the brains in code when swapping them instead of using the UnityEvents on the UI Buttons.
    • Improved the Platformer example:
      • Jumping now uses a specific target height rather than an arbitrary amount of force.
      • It now allows the player to jump higher by holding the button longer.
      • Reviving the character now plays the death animation backwards.
    • Improved the IK examples.
      • Changed StartingPositions to TransformResetter and it now resets rotations as well.
    • The Hybrid Mini Game example now has the character walk into and out of the mini game rather than teleporting.
    • Cleaned up the Hybrid Mini Game example.
    • Improved the 3D Game Kit example:
      • It is now based on the 3D Game Kit Lite since the full version is a massive pain to download and import.
      • It now shows which system (Animancer or Mecanim) is active and lets you swap between them with keyboard controls instead of UI Buttons.
      • It now uses custom end times as part of each transition rather than End Animation Events or separate end time fields.
      • The root object is now separate from the model with RootMotionRedirect passing on the root motion.
      • AirborneState and LandingState now use Mixers instead of Blend Trees since they are more convenient to use and can give the same result now that time synchronisation has been implemented.
      • Added FlinchState and DieState.
      • Attacks can how kill enemies and destroy objects and do not use a custom transition class.
      • Removed the copy of RandomAudioPlayer and used UnityEvents to access the existing script.
      • Removed the copy of AttackTrail and used UnityEvents to access the existing TimeEffect script.

Beta 6

Released 2020-01-14

Changes since Beta 5 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Improved the TransitionPreviewWindow:
    • Added some ambient lighting.
    • Added a ground grid. #15
    • Added proper support for root motion. #15
    • Fixed errors when you save the scene with it open (because saving the scene destroys all PlayableGraphs for no real reason).
  • Added AnimancerPlayable.StateDictionary.Create to create states on layer 0 so you can call animancer.State.Create(clip) if you do not care about layers.
  • Improved Transition Context Menus:
    • Fixed LinearMixerState.Transition to add the correct Context Menu Functions.
    • Fixed Mixer Transitions to show their context menu when you Right Click on the header of the state list in the Inspector.
    • Fixed Mixer Transitions to properly list all their Context Menu functions.
    • The "Threshold" header in the Mixer Inspector is now a dropdown menu which lists all the threshold calculation functions. #12
  • The Find Animations context menu function for DirectionalAnimationSets now properly supports undo commands.
  • PlayableGraphs created in Edit Mode are now destroyed properly if the target Animator is destroyed.
  • Improved the examples:
    • The Basic Movement example now uses a serialized field so its initial facing direction can be set in Edit Mode and it now has a dedicated Play method which takes a DirectionalAnimationSet instead of calling GetClip in each location it wants to play something.
    • Renamed the "Animation Events" example group to "Events" (since they now demonstrate Animancer Events as well).
    • Renamed the "Simple and End Events" example to "Golf Events" and updated it to demonstrate regular Animation Events, a SimpleEventReceiver, Animancer Events defined in the Inspector, and Animancer Events with their times set in the Inspector and callbacks set in code.
    • Renamed "Other Events" to "Footstep Events" and reordered it to come before "Golf Events".

Beta 5

Released 2020-01-02

Changes since Beta 4 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Added a C# in Unity section to explain the fundamentals of programming in Unity.
  • Removed incorrect [Obsolete] attributes from the Transition Asset classes in Animancer Pro.
  • Changed all [Obsolete] attributes to use fully qualified names to avoid issues where they are runtime-only in scripts without using System;.
  • Fixed TransitionDrawer to initialise its always expanded mode properly.
  • Fixed broken UI buttons in some of the example scenes: Creatures, Interrupt Management, and More Brains. #5

Beta 4

Released 2020-01-01

Changes since Beta 3 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Improved Transition Assets (the AnimancerTransition ScriptableObjects that hold an AnimancerState.Transition):
    • AnimancerTransition is now the non-generic base class for transition assets.
    • Added transition assets for all transition types using the naming convention that XXXTransition has a XXXState.Transition (which will create a XXXState when played). For example, a ClipTransition holds a ClipState.Transition.
    • Any references to AnimancerTransition from previous versions are equivalent to the new ClipTransition, however you may wish to leave fields as they are so that any transition asset can be assigned if you aren't doing anything specific to ClipState.Transitions. Any previously created assets will be automatically changed to the new type.
    • AnimancerTransition no longer exposes the properties of the Transition (except for those required by ITransition) so instead of transitionAsset.Clip you now need to use transitionAsset.Transition.Clip. This greatly simplifies its implementation as well as the implementation of all derived classes and makes it clearer that modifications are being applied to an object which may be shared.
    • AnimancerTransition.Transition now has a comment warning that the transition.State can only hold one value even though multiple states could have been created on different objects from that same transition.
  • Removed Assets/Create/Animation Clip menu function since Unity already has Assets/Create/Animation (which is inappropriately named since Animation is the name of the legacy component).
  • Improved TransitionDrawer:
    • It now draws the preview button as a toggle which stays active for the transition currently being previewed and can be clicked again to close the window.
    • Events are now added at the preview time if the current property is being previewed.
    • The transition currently being previewed is now highlighted in the Inspector.
    • It no longer shows "Animation has no length", but pretends it has a standard 1 second length instead.
    • It now displays the correct default Start Time when the Speed is negative.
  • Improved TransitionPreviewWindow:
    • The Preview Settings area now indicates that it is not serialized.
    • It now shows previous/current/next animation rather than just from/to in order to avoid confusion.
    • States are no longer expanded by default.
    • It now automatically recreates the transition state when it starts playing or sets the time to make sure it is up to date.
    • Fixed exception in PlayTransition if the next animation is cleared after the current animation starts.
    • Fixed exceptions when using the preview button inside the window to close it. #6
    • Setting the time after the fade out now resets the transition state's time properly.
    • It now repaints immediately in response to undo commands (specifically, whenever the scene is modified).
  • Improved TimeRuler:
    • It no longer uses 1 pixel of padding in Unity 2019.3 since the Box style no longer has an outline.
    • You can now double click in it to add an event at that time.
    • It now supports negative speeds.
  • Added ITransitionDetailed.IsLooping so the Inspector can force looping event times to stay between 0 and 1.
    • Setting a looping event time to 1 will instead set it to AnimancerEvent.AlmostOne because 1 would wrap around to 0.
  • BoolPref can now take a custom key prefix.
    • Added prefixes to all prefs.
  • Fixed AnimancerGUI.DoOptionalTimeField to allow the seconds value to be set when it has no length.
  • Renamed MixerState.AreWeightsDirty to WeightsAreDirty.
  • Improved the output setup of AnimancerPlayable:
    • Removed the exception for initialising without an Animator.
    • Renamed the static Play methods to SetOutput and made them non-static.
    • Calling SetOutput multiple times will now destroy the old PlayableOutput so it does not cause errors in Unity 2019.3+ and you can change the Animator properly.
  • NamedAnimancerComponent now avoids initialising its AnimancerPlayable in Awake if it has no animations.
  • AnimancerLayer.CreateState now properly sets the AnimancerState.Key.
  • Renamed AnimancerPlayable.StateDictionary.Create to CreateStates.
  • Renamed the Basics/Simple Hybrid example to Hybrid Basics.
  • ClipState.Transition.Apply now applies a default start time based on the speed if the state.Weight == 0. Same for PlayableAssetState transitions.
  • Added AnimancerEvent.Sequence.GetDefaultNormalizedStartTime.
  • The Linear Blending example now uses Transition Assets.
  • AnimancerState.NormalizedTime now returns 0 if Length is 0.
  • AnimancerState.Duration now sets the speed to infinity if the value is set to 0.
  • The AnimancerNode.Speed and Weight setters now assert that the value is not NaN.
  • Fixed mixer time synchronisation to not set the speeds to NaN when delta time is 0.
  • Improved the Spider Bot and Directional Blending examples:
    • They now use a shared SpiderBot base class and demonstrate polymorphism.
    • SpiderBotAdvanced now follows the mouse cursor so it can truly move in any direction rather than being limited to 8 directions with WASD.

Beta 3

Released 2019-12-20

Changes since Beta 2 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Improved ITransition:
    • Play(transition) no longer tries to calculate the fade out duration. If you want to do that, you need to call AnimancePlayable.GetFadeOutDuration yourself and pass it into Play(transition, duration, mode).
    • It now implements a FadeMode directly instead of bool CrossFadeFromStart.
    • Fixed AnimancerPlayable.CancelUpdate to not adjust the current updatable index when the current one is being removed.
  • Fixed AnimancerState.EventUpdatable to not clear event sequences that did not come from the ObjectPool.
  • Improved TransitionPreviewWindow:
    • Fixed custom end times.
    • The Play button now stops all previous animations to properly demonstrate the transition.
  • Improved TimeRuler:
    • Fixed the duration bar to always start at time 0 even if the Start Time is elsewhere.
    • The "Start Time is after End Time" now checks for negative speed and shows "... before ..." when playing backwards.
    • Increased the intensity of the fade highlight and duration bar.
  • Fixed AnimancerState.AppendDetails to use the correct delimiter for the end event.
  • AnimancerComponent.InitialisePlayable will now try using GetComponent if it has no Animator reference and throw an exception if one still isn't found.
  • Added AssemblyInfo files for the Animancer.FSM and Animancer.Examples assemblies to suppress unnecessary compiler warnings.
  • Improved the ReadMe Inspector layout and added descriptions of each of the support links.
  • Improved the Sequence Coroutine example:
    • Cleaned up the script and added more comments.
    • Added assertions for reliability.

Beta 2

Released 2019-12-16

Changes since Beta 1 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Fixed exception in ManualMixerState.Transition.MaximumDuration when any of the clips are null.
  • Fixed FadeMode.FromStart to work properly when changing layers.
  • Added Assembly Definitions for Animancer.FSM and Animancer.Examples to make sure the FSM system is entirely separate.
  • Removed null checks from AnimancerPlayable.Play(animator, playable, component) so it will now throw exceptions if the parameters are null.
  • Fixed Animancer Events to work properly with UltEvents:
    • The dummy callback property height now changes properly when expanded.
    • The dummy object is no longer read-only so UltEvents doesn't get greyed out.
    • Fixed GUI error in TimeRuler when changing the selected event.
  • Improved the RootMotion example:
    • It now overrides Transition.Apply to set the root motion flag so the caller doesn't need to do it.
    • It now has some extra fields to specify another object to apply the root motion to.
  • Renamed the Simple Playing example to Quick Play and improved its script comments a bit.
  • Added [DefaultExecutionOrder] attributes to all Creature examples as well as comments in Awake to reinforce its importance.

Beta 1

Released 2019-12-09

Changes since Alpha 1 (see the v4.0 Change Log for the full list of changes since v3.1):

  • Highlights:
    • Implemented Mixer Time Synchronisation.
    • Added Timeline support.
    • Improved the TransitionPreviewWindow.
    • Added support for Unity 2019.3.
    • Added Assets/Create/Animation Clip menu function since the Animation window doesn't allow you to create new AnimationClips without an Animator Controller.
  • Improved Mixer States:
    • They can now synchronise the times of their children.
    • It's not quite as advanced as the proper Foot Phase Synchronisation used in Blend Trees which analyses the strides the character makes so that it can better synchronise animations with non-uniform timings such as when walking with a limp or an animation that includes multiple walk cycles.
    • But it does have one major advantage: you actually get to control it so you can choose which animations are synchronised.
    • It's on by default and can be disabled for individual children using the SynchroniseChildren array.
    • This advantage can be seen in the Linear Blending example. Enabling synchronisation on all animations gives the same result as the Blend Tree, meaning that the blending between Idle and Walk gives a much slower shuffle than it should. But disabling synchronisation on the Idle gives a much better result because there's no need for consistency between the timing of those two animations.
    • They now override IsLooping to return true if any child state is looping.
    • Optimised ManualMixerState.NewTime.
  • Added Timeline support:
  • Improved the TransitionPreviewWindow:
    • Fixed exceptions caused by trying to move the camera when it hasn't been initialised (because there is no target Animator).
    • Improved the way it determines which object to instantiate a copy of.
    • Added the ability to choose which Animator to use.
    • It now locks the camera to a front view for Sprite animations.
    • The main state drawer is now automatically expanded.
    • You can now drag and drop any model into the preview window to use it instead of the object the target transition comes from.
    • It now clears the events from any animation it plays to prevent them from affecting the rest of the scene.
    • TimeRuler now shows the current preview time and can change it.
    • Selecting an event or modifying its time now sets the time of the preview as well.
    • Fixed errors when entering Play Mode with the window open.
    • It now shows a warning explaining that multi-animation previewing doesn't work properly before Unity 2018.3.
    • Fixed null exception if there are no Animators in the previewed object.
    • The Transition From and Transition To dropdown menus now have a "None" option.
    • The Play button now changes to Pause if the graph is already playing.
    • Added Overall Speed field to the Preview Settings.
  • Added support for Unity 2019.3:
    • Fixed the preview icon to use a different texture since the old one seems to be missing.
    • Fixed AnimancerGUI.DoOptionalTimeField.
    • Fixed the event drawer foldout.
    • Fixed Inspector Error on the NamedAnimancerComponent.
    • Fixed import warnings from the Spider Bot model due to multiple objects having the same name.
    • Added a workaround so the base TransitionDrawer does not take proprity over its more specific children (only happens in a DLL).
  • Changed the default ClipState.Transition.Speed back to 1. It can still be set to float.NaN to not change the speed, but most of the time you will want 1.
  • Changed StateBehaviour.Reset to OnValidate so it always enforces its rule.
  • The preview icon is now only shown for properties that implement ITransitionDetailed (which includes all inbuilt transitions).
  • Fixed AnimancerEvent.Sequence.AssertNormalizedTimes to properly account for NaNs.
  • Added DummyObjectDrawer as a fallback custom Inspector for any Object ... which does nothing (the class literally just inherits from UnityEditor.Editor and has no members). For some reason Unity executes PropertyDrawers differently in the default Inspector than it does in a custom Inspector (even an empty one) and that difference causes the TimeRuler to not display properly without a custom Inspector. Since it is set as a fallback, any other custom Inspector should automatically override it, but if not you can simply delete Animancer/Internal/Editor Utilities/Inspector/DummyObjectEditor.cs.
  • Improved AnimancerEvent.Sequence.Serializable:
    • It now supports having no callbacks when there are event times (to reduce unnecessary serialized data if you just want to set times in the Inspector and fill the callbacks in code at runtime).
    • It now uses the same empty delegate for every missing or empty callback.
    • Renamed _Events to _Callbacks.
    • Removed GetOrCreateSequence and changed Sequence to always return a value instead of null if there are no events.
    • Changed InitialiseSequence to GetSequenceOptional which returns null if there are no events anyway. This is what the implicit conversion uses.
  • Improved EventSequenceDrawer:
    • All events now use the same optional time toggle to remove the event rather than a separate x button.
    • Added Editor-Only ISerializationCallbackReceiver to AnimancerEvent.Sequence.Serializable so it can now ensure that it never serializes events out of order, regardless of what the GUI does.
    • TimeRuler now properly formats labels for times larger than 100.
    • TimeRuler now better handles situations where the Start Time is after the End Time.
    • Adjusted TimeRuler highlight color to look better in the dark skin.
    • Fixed it to not lose the hot control when dragging the time of the dummy end event.
    • Fixed TemporarySettings to not lose selected events during assembly reloads.
    • Removed ISerializationCallbackReceiver from TemporarySettings and changed it to use OnEnable and OnDisable because certain operations can't be used during serialization.
    • Fixed potential null exception in TemporarySettings on startup.
    • Fixed manually typing an event time with all events visible to properly allow the change to be undone without clicking on another field.
  • Replaced the custom transition context menus with the standard serialized property context menu:
    • It now displays the size of the serialized Animancer Event arrays.
  • Fixed the End Event/Clear context menu function to be disabled when the time is not set.
  • Updated the Sequence Coroutine example to use the new custom end time system rather than needing a ClipState.Transition subclass with its own PlayDuration field.
  • Improved AnimancerTransition (a ScriptableObject that holds a single ClipState.Transition):
    • Renamed the Animation field and property to Transition.
    • Added Events wrapper.
  • Moved the custom GUI for the Start Time and Speed fields to the base TransitionDrawer.
  • AnimancerGUI.DoOptionalTimeFieldGUI now makes sure that the label doesn't overlap the toggle.
  • Added AnimancerPlayable.LayerList.SetMinDefaultCapacity.
  • Renamed the AnimancerPlayable.StateDictionary.Destroy overloads that take collections to DestroyAll to avoid ambiguity.
  • Removed AnimancerComponent.CurrentState since you can just use animancer.States.Current.
  • Renamed AnimancerGUI.DeselectGUI to Deselect and fixed it to not prevent Undo commands.
  • Removed unnecessary GUI suffix from various methods in AnimancerGUI.
  • Made several AnimancerState members virtual instead of abstract: AverageVelocity, ApplyAnimatorIK, ApplyFootIK.
  • Fixed an exception caused by destroying a state that has events.
  • Improved AnimationGatherer:
    • It now finds the character's root object by counting the number of Animators below each parent. An object with more Animators is assumed to be the parent of multiple characters, so the previous object is the root. Once it finds the root, it gathers animations from the child components of that object.
    • Added ICharacterRoot for components to manually specify which object is the root.
    • AnimancerEditorUtilities.FindRoot now checks if the object is part of a prefab to use its root instead of counting Animators, though still lower priority than ICharacterRoot.
    • Moved MixerState.Transition<TMixer, TParameter>.Drawer out to MixerState.TransitionDrawer because the generic parameters cause errors.
  • Ctrl + Click on a state in the Inspector now unpauses the graph as well as fading to that state.
  • All calls to EditorGUI.Foldout now set EditorGUIUtility.hierarchyMode = true to ensure that the arrow gets the correct indentation.
  • Play(transition) no longer tries to calculate the fade out duration. If you want to do that, you need to call AnimancePlayable.GetFadeOutDuration and pass it into Play(transition, duration, mode).
    • Moved the main part of AnimancerPlayable.GetFadeOutDuration to AnimancerEvent, leaving behind only the part specific to Animation Events with the function name "End".

Alpha 1

Released 2019-11-25

First public test release (see the v4.0 Change Log for the full list of changes since v3.1).