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):
- Added Weapons example.
- Fixed error in
EventSequenceDrawerwhen adding an event to an object that has not yet been deserialized. - Fixed an error in
TransitionPreviewWindowwhere un-maximising the window caused it to lose its singleton reference. - Renamed
AnimancerLayer.CreateStatestoCreateIfNew. - Renamed
IAnimancerRoottoICharacterRoot. - Renamed
IAnimancerTransitiontoITransition. - Renamed
IAnimancerTransitionDetailedtoITransitionDetailed. - Renamed
IAnimancerUpdatabletoIUpdatable.
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.EventUpdatableto not allocate garbage if they pass. #22 - Renamed
AnimancerState.EventUpdatablePoolCapacitytoEventPoolCapacity.
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.CanSetStatenow returns true if the parameter isnullsince the other methods support nulls.- Fixed the
TransitionPreviewWindowto work properly when the previous or next animation is the same as the one being previewed. - The
TransitionPreviewWindownow uses a topological sort to ensure that the unnecessary components it removes from the preview instance do not cause errors due to[RequireComponent]attributes. TimeRulernow clamps event icons to display within the bounds of the area.- Fixed
Float3ControllerStateto show all of its parameters in the Inspector rather than only the first two. #19 - The
ReadMenow 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
StartingPositionstoTransformResetterand it now resets rotations as well.
- Changed
- 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
RootMotionRedirectpassing on the root motion. AirborneStateandLandingStatenow use Mixers instead of Blend Trees since they are more convenient to use and can give the same result now that time synchronization has been implemented.- Added
FlinchStateandDieState. - Attacks can how kill enemies and destroy objects and do not use a custom transition class.
- Removed the copy of
RandomAudioPlayerand usedUnityEvents to access the existing script. - Removed the copy of
AttackTrailand usedUnityEvents to access the existingTimeEffectscript.
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
AnimancerPlayable.StateDictionary.Createto create states on layer 0 so you can callanimancer.State.Create(clip)if you do not care about layers. - Improved Transition Context Menus:
- Fixed
LinearMixerTransitionto 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
- Fixed
- The
Find Animationscontext menu function forDirectionalAnimationSets 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
DirectionalAnimationSetinstead of callingGetClipin 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".
- 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
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 withoutusing System;. - Fixed
TransitionDrawerto initialize its always expanded mode properly. - Fixed broken UI buttons in some of the example scenes: Characters, Interruptions, 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
AnimancerTransitionScriptableObjects that hold anAnimancerTransition):AnimancerTransitionis now the non-generic base class for transition assets.- Added transition assets for all transition types using the naming convention that
XXXTransitionhas aXXXTransition(which will create aXXXStatewhen played). For example, aClipTransitionholds aClipTransition. - Any references to
AnimancerTransitionfrom previous versions are equivalent to the newClipTransition, 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 toClipTransitions. Any previously created assets will be automatically changed to the new type. AnimancerTransitionno longer exposes the properties of theTransition(except for those required byITransition) so instead oftransitionAsset.Clipyou now need to usetransitionAsset.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.Transitionnow has a comment warning that thetransition.Statecan only hold one value even though multiple states could have been created on different objects from that same transition.
- Removed
Assets/Create/Animation Clipmenu function since Unity already hasAssets/Create/Animation(which is inappropriately named sinceAnimationis 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 Timewhen theSpeedis negative.
- Improved
TransitionPreviewWindow:- The
Preview Settingsarea 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
PlayTransitionif 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).
- The
- Improved
TimeRuler:- It no longer uses 1 pixel of padding in Unity 2019.3 since the
Boxstyle no longer has an outline. - You can now double click in it to add an event at that time.
- It now supports negative speeds.
- It no longer uses 1 pixel of padding in Unity 2019.3 since the
- Added
ITransitionDetailed.IsLoopingso 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.AlmostOnebecause 1 would wrap around to 0.
- Setting a looping event time to 1 will instead set it to
BoolPrefcan now take a custom key prefix.- Added prefixes to all prefs.
- Fixed
AnimancerGUI.DoOptionalTimeFieldto allow the seconds value to be set when it has no length. - Renamed
MixerState.AreWeightsDirtytoWeightsAreDirty. - Improved the output setup of
AnimancerPlayable:- Removed the exception for initializing without an
Animator. - Renamed the static
Playmethods toSetOutputand made them non-static. - Calling
SetOutputmultiple times will now destroy the oldPlayableOutputso it does not cause errors in Unity 2019.3+ and you can change theAnimatorproperly.
- Removed the exception for initializing without an
NamedAnimancerComponentnow avoids initializing itsAnimancerPlayableinAwakeif it has no animations.AnimancerLayer.CreateStatenow properly sets theAnimancerState.Key.- Renamed
AnimancerPlayable.StateDictionary.CreatetoCreateStates. - Renamed the Basics/Simple Hybrid example to Hybrid Basics.
ClipTransition.Applynow applies a default start time based on the speed if thestate.Weight == 0. Same forPlayableAssetStatetransitions.- Added
AnimancerEvent.Sequence.GetDefaultNormalizedStartTime. - The Linear Blending example now uses Transition Assets.
AnimancerState.NormalizedTimenow returns 0 ifLengthis 0.AnimancerState.Durationnow sets the speed to infinity if the value is set to 0.- The
AnimancerNode.SpeedandWeightsetters now assert that the value is not NaN. - Fixed mixer time synchronization 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
SpiderBotbase class and demonstrate polymorphism. SpiderBotAdvancednow follows the mouse cursor so it can truly move in any direction rather than being limited to 8 directions with WASD.
- They now use a shared
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 callAnimancePlayable.GetFadeOutDurationyourself and pass it intoPlay(transition, duration, mode).- It now implements a
FadeModedirectly instead ofbool CrossFadeFromStart. - Fixed
AnimancerPlayable.CancelUpdateto not adjust the current updatable index when the current one is being removed.
- Fixed
AnimancerState.EventUpdatableto not clear event sequences that did not come from theObjectPool. - Improved
TransitionPreviewWindow:- Fixed custom end times.
- The
Playbutton 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 Timeis 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 the duration bar to always start at time 0 even if the
- Fixed
AnimancerState.AppendDetailsto use the correct delimiter for the end event. AnimancerComponent.InitializePlayablewill now try usingGetComponentif it has noAnimatorreference and throw an exception if one still isn't found.- Added
AssemblyInfofiles for theAnimancer.FSMandAnimancer.Examplesassemblies to suppress unnecessary compiler warnings. - Improved the
ReadMeInspector layout and added descriptions of each of the support links. - Improved the
Sequence Coroutineexample:- 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
ManualMixerTransition.MaximumDurationwhen any of the clips are null. - Fixed
FadeMode.FromStartto work properly when changing layers. - Added Assembly Definitions for
Animancer.FSMandAnimancer.Examplesto make sure theFSMsystem 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
TimeRulerwhen changing the selected event.
- Improved the
RootMotionexample:- It now overrides
Transition.Applyto 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.
- It now overrides
- Renamed the
Simple Playingexample to Quick Play and improved its script comments a bit. - Added
[DefaultExecutionOrder]attributes to allCharacterexamples as well as comments inAwaketo 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 Synchronization.
- Added Timeline support.
- Improved the
TransitionPreviewWindow. - Added support for Unity 2019.3.
- Added
Assets/Create/Animation Clipmenu function since the Animation window doesn't allow you to create newAnimationClips 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 Synchronization 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
SynchroniseChildrenarray. - This advantage can be seen in the Linear Blending example. Enabling synchronization 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 synchronization 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
IsLoopingto return true if any child state is looping. - Optimised
ManualMixerState.NewTime.
- Added Timeline support:
- Added
PlayableAssetStatefor playingPlayableAssets. - Added an introduction sequence to the Platformer example using Timeline.
- Added
- Improved the
TransitionPreviewWindow:- Fixed exceptions caused by trying to move the camera when it hasn't been initialized (because there is no target
Animator). - Improved the way it determines which object to instantiate a copy of.
- Added the ability to choose which
Animatorto use. - It now locks the camera to a front view for
Spriteanimations. - 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.
TimeRulernow 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 FromandTransition Todropdown menus now have a "None" option. - The
Playbutton now changes toPauseif the graph is already playing. - Added
Overall Speedfield to thePreview Settings.
- Fixed exceptions caused by trying to move the camera when it hasn't been initialized (because there is no target
- 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
TransitionDrawerdoes not take proprity over its more specific children (only happens in a DLL).
- Changed the default
ClipTransition.Speedback to 1. It can still be set tofloat.NaNto not change the speed, but most of the time you will want 1. - Changed
StateBehaviour.ResettoOnValidateso 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.AssertNormalizedTimesto properly account forNaNs. - Added
DummyObjectDraweras a fallback custom Inspector for anyObject... which does nothing (the class literally just inherits fromUnityEditor.Editorand has no members). For some reason Unity executesPropertyDrawers differently in the default Inspector than it does in a custom Inspector (even an empty one) and that difference causes theTimeRulerto 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 deleteAnimancer/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
_Eventsto_Callbacks. - Removed
GetOrCreateSequenceand changedSequenceto always return a value instead of null if there are no events. - Changed
InitializeSequencetoGetSequenceOptionalwhich 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
ISerializationCallbackReceivertoAnimancerEvent.Sequence.Serializableso it can now ensure that it never serializes events out of order, regardless of what the GUI does. TimeRulernow properly formats labels for times larger than 100.TimeRulernow better handles situations where the Start Time is after the End Time.- Adjusted
TimeRulerhighlight 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
TemporarySettingsto not lose selected events during assembly reloads. - Removed
ISerializationCallbackReceiverfromTemporarySettingsand changed it to useOnEnableandOnDisablebecause certain operations can't be used during serialization. - Fixed potential null exception in
TemporarySettingson 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/Clearcontext menu function to be disabled when the time is not set. - Updated the
Sequence Coroutineexample to use the new custom end time system rather than needing aClipTransitionsubclass with its ownPlayDurationfield. - Improved
AnimancerTransition(aScriptableObjectthat holds a singleClipTransition):- Renamed the
Animationfield and property toTransition. - Added
Eventswrapper.
- Renamed the
- Moved the custom GUI for the
Start TimeandSpeedfields to the baseTransitionDrawer. AnimancerGUI.DoOptionalTimeFieldGUInow makes sure that the label doesn't overlap the toggle.- Added
AnimancerPlayable.LayerList.SetMinDefaultCapacity. - Renamed the
AnimancerPlayable.StateDictionary.Destroyoverloads that take collections toDestroyAllto avoid ambiguity. - Removed
AnimancerComponent.CurrentStatesince you can just useanimancer.States.Current. - Renamed
AnimancerGUI.DeselectGUItoDeselectand fixed it to not prevent Undo commands. - Removed unnecessary
GUIsuffix from various methods inAnimancerGUI. - Made several
AnimancerStatemembers 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 moreAnimators 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
ICharacterRootfor components to manually specify which object is the root. AnimancerEditorUtilities.FindRootnow checks if the object is part of a prefab to use its root instead of countingAnimators, though still lower priority thanICharacterRoot.- Moved
MixerTransition<TMixer, TParameter>.Drawerout toMixerTransitionDrawerbecause the generic parameters cause errors.
- It now finds the character's root object by counting the number of
Ctrl + Clickon a state in the Inspector now unpauses the graph as well as fading to that state.- All calls to
EditorGUI.Foldoutnow setEditorGUIUtility.hierarchyMode = trueto 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 callAnimancePlayable.GetFadeOutDurationand pass it intoPlay(transition, duration, mode).- Moved the main part of
AnimancerPlayable.GetFadeOutDurationtoAnimancerEvent, leaving behind only the part specific to Animation Events with the function name "End".
- Moved the main part of
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).