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
EventSequenceDrawer
when adding an event to an object that has not yet been deserialized. - Fixed an error in
TransitionPreviewWindow
where un-maximising the window caused it to lose its singleton reference. - Renamed
AnimancerLayer.CreateStates
toCreateIfNew
. - Renamed
IAnimancerRoot
toICharacterRoot
. - Renamed
IAnimancerTransition
toITransition
. - Renamed
IAnimancerTransitionDetailed
toITransitionDetailed
. - Renamed
IAnimancerUpdatable
toIUpdatable
.
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
toEventPoolCapacity
.
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 isnull
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
UnityEvent
s 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
toTransformResetter
and 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
RootMotionRedirect
passing on the root motion. AirborneState
andLandingState
now 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
FlinchState
andDieState
. - Attacks can how kill enemies and destroy objects and do not use a custom transition class.
- Removed the copy of
RandomAudioPlayer
and usedUnityEvent
s to access the existing script. - Removed the copy of
AttackTrail
and usedUnityEvent
s to access the existingTimeEffect
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
AnimancerPlayable.StateDictionary.Create
to create states on layer 0 so you can callanimancer.State.Create(clip)
if you do not care about layers. - Improved Transition Context Menus:
- Fixed
LinearMixerTransition
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
- Fixed
- The
Find Animations
context menu function forDirectionalAnimationSet
s now properly supports undo commands. PlayableGraph
s 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 callingGetClip
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".
- 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
TransitionDrawer
to 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
AnimancerTransition
ScriptableObject
s that hold anAnimancerTransition
):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 aXXXTransition
(which will create aXXXState
when played). For example, aClipTransition
holds aClipTransition
. - Any references to
AnimancerTransition
from 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 toClipTransition
s. Any previously created assets will be automatically changed to the new type. AnimancerTransition
no longer exposes the properties of theTransition
(except for those required byITransition
) so instead oftransitionAsset.Clip
you 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.Transition
now has a comment warning that thetransition.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 hasAssets/Create/Animation
(which is inappropriately named sinceAnimation
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 theSpeed
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).
- The
- 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.
- It no longer uses 1 pixel of padding in Unity 2019.3 since the
- 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.
- Setting a looping event time to 1 will instead set it to
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
toWeightsAreDirty
. - Improved the output setup of
AnimancerPlayable
:- Removed the exception for initializing without an
Animator
. - Renamed the static
Play
methods toSetOutput
and made them non-static. - Calling
SetOutput
multiple times will now destroy the oldPlayableOutput
so it does not cause errors in Unity 2019.3+ and you can change theAnimator
properly.
- Removed the exception for initializing without an
NamedAnimancerComponent
now avoids initializing itsAnimancerPlayable
inAwake
if it has no animations.AnimancerLayer.CreateState
now properly sets theAnimancerState.Key
.- Renamed
AnimancerPlayable.StateDictionary.Create
toCreateStates
. - Renamed the Basics/Simple Hybrid example to Hybrid Basics.
ClipTransition.Apply
now applies a default start time based on the speed if thestate.Weight == 0
. Same forPlayableAssetState
transitions.- Added
AnimancerEvent.Sequence.GetDefaultNormalizedStartTime
. - The Linear Blending example now uses Transition Assets.
AnimancerState.NormalizedTime
now returns 0 ifLength
is 0.AnimancerState.Duration
now sets the speed to infinity if the value is set to 0.- The
AnimancerNode.Speed
andWeight
setters 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
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.
- 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.GetFadeOutDuration
yourself and pass it intoPlay(transition, duration, mode)
.- It now implements a
FadeMode
directly instead ofbool 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 theObjectPool
. - 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 the duration bar to always start at time 0 even if the
- Fixed
AnimancerState.AppendDetails
to use the correct delimiter for the end event. AnimancerComponent.InitializePlayable
will now try usingGetComponent
if it has noAnimator
reference and throw an exception if one still isn't found.- Added
AssemblyInfo
files for theAnimancer.FSM
andAnimancer.Examples
assemblies to suppress unnecessary compiler warnings. - Improved the
ReadMe
Inspector 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.MaximumDuration
when any of the clips are null. - Fixed
FadeMode.FromStart
to work properly when changing layers. - Added Assembly Definitions for
Animancer.FSM
andAnimancer.Examples
to make sure theFSM
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.
- It now overrides
- Renamed the
Simple Playing
example to Quick Play and improved its script comments a bit. - Added
[DefaultExecutionOrder]
attributes to allCharacter
examples as well as comments inAwake
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 Synchronization.
- 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 newAnimationClip
s 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
SynchroniseChildren
array. - 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
IsLooping
to return true if any child state is looping. - Optimised
ManualMixerState.NewTime
.
- Added Timeline support:
- Added
PlayableAssetState
for playingPlayableAsset
s. - 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
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
Animator
s in the previewed object. - The
Transition From
andTransition To
dropdown menus now have a "None" option. - The
Play
button now changes toPause
if the graph is already playing. - Added
Overall Speed
field 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
TransitionDrawer
does not take proprity over its more specific children (only happens in a DLL).
- Changed the default
ClipTransition.Speed
back to 1. It can still be set tofloat.NaN
to not change the speed, but most of the time you will want 1. - Changed
StateBehaviour.Reset
toOnValidate
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 forNaN
s. - Added
DummyObjectDrawer
as a fallback custom Inspector for anyObject
... which does nothing (the class literally just inherits fromUnityEditor.Editor
and has no members). For some reason Unity executesPropertyDrawer
s differently in the default Inspector than it does in a custom Inspector (even an empty one) and that difference causes theTimeRuler
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 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
_Events
to_Callbacks
. - Removed
GetOrCreateSequence
and changedSequence
to always return a value instead of null if there are no events. - Changed
InitializeSequence
toGetSequenceOptional
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
toAnimancerEvent.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
fromTemporarySettings
and changed it to useOnEnable
andOnDisable
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 Coroutineexample to use the new custom end time system rather than needing aClipTransition
subclass with its ownPlayDuration
field. - Improved
AnimancerTransition
(aScriptableObject
that holds a singleClipTransition
):- Renamed the
Animation
field and property toTransition
. - Added
Events
wrapper.
- Renamed the
- Moved the custom GUI for the
Start Time
andSpeed
fields to the baseTransitionDrawer
. 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 toDestroyAll
to avoid ambiguity. - Removed
AnimancerComponent.CurrentState
since you can just useanimancer.States.Current
. - Renamed
AnimancerGUI.DeselectGUI
toDeselect
and fixed it to not prevent Undo commands. - Removed unnecessary
GUI
suffix from various methods inAnimancerGUI
. - 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
Animator
s below each parent. An object with moreAnimator
s 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 countingAnimator
s, though still lower priority thanICharacterRoot
.- Moved
MixerTransition<TMixer, TParameter>.Drawer
out toMixerTransitionDrawer
because the generic parameters cause errors.
- It now finds the character's root object by counting the number of
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 setEditorGUIUtility.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 callAnimancePlayable.GetFadeOutDuration
and pass it intoPlay(transition, duration, mode)
.- Moved the main part of
AnimancerPlayable.GetFadeOutDuration
toAnimancerEvent
, 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).