Vector2MixerState Class

Summary

[Pro-Only] An Animancer.AnimancerState which blends an array of other states together based on a two dimensional parameter and thresholds.
graph BT Type-->Base0["MixerState<Vector2>"] Base0-->Base1["ManualMixerState"] click Base1 "/animancer/api/Animancer/ManualMixerState" Base1-->Base2["AnimancerState"] click Base2 "/animancer/api/Animancer/AnimancerState" Base2-->Base3["AnimancerNode"] click Base3 "/animancer/api/Animancer/AnimancerNode" Base3-->Base4["AnimancerNodeBase"] click Base4 "/animancer/api/Animancer/AnimancerNodeBase" Base4-->Base5["Object"] Type-.->Interface0["ICopyable<AnimancerNode>"] Type-.->Interface1["IEnumerable<AnimancerState>"] Type-.->Interface2["IEnumerator"] Type-.->Interface3["IHasDescription"] click Interface3 "/animancer/api/Animancer/IHasDescription" Type-.->Interface4["IAnimationClipCollection"] click Interface4 "/animancer/api/Animancer/IAnimationClipCollection" Type-.->Interface5["ICloneable<AnimancerState>"] Type-.->Interface6["ICopyable<AnimancerState>"] Type-.->Interface7["ICopyable<ManualMixerState>"] Type-.->Interface8["IParametizedState"] click Interface8 "/animancer/api/Animancer/IParametizedState" Type-.->Interface9["IUpdatable"] click Interface9 "/animancer/api/Animancer/IUpdatable" Type-.->Interface10["ICopyable<MixerState<Vector2>>"] Type-.->Interface11["ICopyable<Vector2MixerState>"] Type["Vector2MixerState"] class Type type-node Derived0["CartesianMixerState"]-->Type click Derived0 "/animancer/api/Animancer/CartesianMixerState" Derived1["DirectionalMixerState"]-->Type click Derived1 "/animancer/api/Animancer/DirectionalMixerState"

Syntax

public abstract class Vector2MixerState : MixerState<Vector2>, ICopyable<AnimancerNode>, 
    IEnumerable<AnimancerState>, IEnumerator, IHasDescription, IAnimationClipCollection, 
    ICloneable<AnimancerState>, ICopyable<AnimancerState>, ICopyable<ManualMixerState>, 
    IParametizedState, IUpdatable, ICopyable<MixerState<Vector2>>, ICopyable<Vector2MixerState>

Remarks

Documentation: Mixers

Properties

Name Value Summary
ApplyAnimatorIK bool
Inherited from ManualMixerState
ApplyFootIK bool
Inherited from ManualMixerState
ApplyParentAnimatorIK bool
Should setting the Animancer.AnimancerNodeBase.Parent also set this node's Animancer.AnimancerNode.ApplyAnimatorIK to match it? Default is true.
Inherited from AnimancerNode
static
ApplyParentFootIK bool
Should setting the Animancer.AnimancerNodeBase.Parent also set this node's Animancer.AnimancerNode.ApplyFootIK to match it? Default is true.
Inherited from AnimancerNode
static
ChildCapacity int
The size of the internal array of Animancer.ManualMixerState.ChildStates.
Inherited from ManualMixerState
ChildCount int
The number of nodes using this as their Animancer.AnimancerNodeBase.Parent.
Inherited from ManualMixerState
ChildStates AnimancerState[]
The states connected to this mixer.
Inherited from ManualMixerState
Clip AnimationClip
The UnityEngine.AnimationClip which this state plays (if any).
Inherited from AnimancerState
DebugName Object
[Assert-Only] The Inspector display name of this node.
Inherited from AnimancerNode
DefaultChildCapacity int
Animancer.ManualMixerState.ChildCapacity starts at 0 then expands to this value when the first child is added.
Inherited from ManualMixerState
static
Duration float
The number of seconds the animation will take to play fully at its current Animancer.AnimancerNodeBase.EffectiveSpeed.
Inherited from AnimancerState
EffectiveSpeed float
The Animancer.AnimancerNodeBase.Speed of this node multiplied by the Animancer.AnimancerNodeBase.Speed of each of its parents to determine the actual speed it's playing at.
Inherited from AnimancerNodeBase
EffectiveWeight float
The Animancer.AnimancerNode.Weight of this state multiplied by the Animancer.AnimancerNode.Weight of each of its parents down the hierarchy to determine how much this state affects the final output.
Inherited from AnimancerNode
FadeGroup FadeGroup
The current fade being applied to this node (if any).
Inherited from AnimancerNode
FadeSpeed float
The speed at which this node is fading towards the Animancer.AnimancerNode.TargetWeight.
Inherited from AnimancerNode
Graph AnimancerGraph
The Animancer.AnimancerGraph containing this node.
Inherited from AnimancerNodeBase
HasEvents bool
Have the Animancer.AnimancerState.SharedEvents or Animancer.AnimancerState.OwnedEvents been initialized?
Inherited from AnimancerState
HasOwnedEvents bool
Have the Animancer.AnimancerState.OwnedEvents been initialized?
Inherited from AnimancerState
Index int
The index of the port this node is connected to on the parent's UnityEngine.Playables.Playable.
Inherited from AnimancerNode
IsActive bool
Is this state currently updating or affecting the animation output?
Inherited from AnimancerState
IsCurrent bool
Is this state playing and not fading out?
Inherited from AnimancerState
IsLooping bool
Are any child states looping?
Inherited from ManualMixerState
IsPlaying bool
Is the Animancer.AnimancerState.Time automatically advancing?
Inherited from AnimancerState
IsStopped bool
Is this state not playing and at 0 Animancer.AnimancerNode.Weight?
Inherited from AnimancerState
KeepChildrenConnected bool
Should child playables stay connected to the graph at all times?
Inherited from AnimancerNodeBase
Key Object
The object used to identify this state in the graph Animancer.AnimancerGraph.States dictionary. Can be null.
Inherited from AnimancerState
Layer AnimancerLayer
The root Animancer.AnimancerLayer which this node is connected to (if any).
Inherited from AnimancerNodeBase
LayerIndex int
The index of the Animancer.AnimancerLayer this state is connected to (determined by the Animancer.AnimancerNodeBase.Parent).
Inherited from AnimancerState
MainObject Object
The main object to show in the Inspector for this state (if any).
Inherited from AnimancerState
MainObjectType Type
[Editor-Only] The base type which can be assigned to the Animancer.AnimancerState.MainObject.
Inherited from AnimancerState
MinimumSynchronizeChildrenWeight float
The minimum total weight of all children for their times to be synchronized. Default 0.01.
Inherited from ManualMixerState
static
NormalizedEndTime float
The Animancer.AnimancerState.NormalizedTime after which the Animancer.AnimancerEvent.Sequence.OnEnd callback will be invoked every frame.
Inherited from AnimancerState
NormalizedParameter Vector2
The Animancer.MixerState`1.Parameter normalized into the range of 0 to 1 across all thresholds.
NormalizedTime float
The Animancer.AnimancerState.Time of this state as a portion of the animation's Animancer.AnimancerState.Length, meaning the value goes from 0 to 1 as it plays from start to end, regardless of how long that actually takes.
Inherited from AnimancerState
NormalizedTimeD double
The underlying double value of Animancer.AnimancerState.NormalizedTime.
Inherited from AnimancerState
OwnedEvents AnimancerEvent.Sequence
Events which will be triggered while this state plays based on its Animancer.AnimancerState.NormalizedTime.
Inherited from AnimancerState
Owner Object
[Assert-Only] An optional reference to the object that owns this state.
Inherited from AnimancerState
ParameterNameX StringReference
If set, this will be used as a key in the Animancer.ParameterDictionary so any changes to that parameter will automatically set the Animancer.Vector2MixerState.ParameterX.
ParameterNameY StringReference
If set, this will be used as a key in the Animancer.ParameterDictionary so any changes to that parameter will automatically set the Animancer.Vector2MixerState.ParameterY.
ParameterX float
Animancer.MixerState`1.Parameter.x.
ParameterY float
Animancer.MixerState`1.Parameter.y.
Parent AnimancerNodeBase
The object which receives the output of the Animancer.AnimancerNodeBase.Playable.
Inherited from AnimancerNodeBase
Playable Playable
The internal object this node manages in the UnityEngine.Playables.PlayableGraph.
Inherited from AnimancerNodeBase
RaiseEventsDuringFadeOut bool
Should events be raised on a state which is currently fading out?
Inherited from AnimancerState
static
RemainingDuration float
The number of seconds this state will take to go from its current Animancer.AnimancerState.NormalizedTime to the Animancer.AnimancerState.NormalizedEndTime at its current Animancer.AnimancerNodeBase.EffectiveSpeed.
Inherited from AnimancerState
SharedEvents AnimancerEvent.Sequence
Events which will be triggered while this state plays based on its Animancer.AnimancerState.NormalizedTime.
Inherited from AnimancerState
Speed float
[Pro-Only] How fast the Animancer.AnimancerState.Time is advancing every frame (default 1).
Inherited from AnimancerNodeBase
SynchronizedChildCount int
The number of Animancer.ManualMixerState.SynchronizedChildren.
Inherited from ManualMixerState
SynchronizedChildren AnimancerState[]
A copy of the internal list of child states that will have their times synchronized.
Inherited from ManualMixerState
SynchronizeNewChildren bool
Should newly added children be automatically added to the synchronization list? Default true.
Inherited from ManualMixerState
static
TargetWeight float
The desired Animancer.AnimancerNode.Weight which this node is fading towards according to the Animancer.AnimancerNode.FadeSpeed.
Inherited from AnimancerNode
Time float
The number of seconds that have passed since the start of this animation.
Inherited from AnimancerState
TimeD double
The underlying double value of Animancer.AnimancerState.Time.
Inherited from AnimancerState
TraceConstructor bool
[Assert-Only] Should a System.Diagnostics.StackTrace be captured in the constructor of all new nodes so Animancer.OptionalWarning.UnusedNode can include it in the warning if that node ends up being unused?
Inherited from AnimancerNode
static
UpdatableIndex int
The index of this object in its Animancer.IndexedList`2.
Inherited from ManualMixerState
Weight float
The current blend weight of this node which determines how much it affects the final output.
Inherited from AnimancerNode

Methods

Name Value Summary
~AnimancerNode() void
[Assert-Only] Checks Animancer.OptionalWarning.UnusedNode.
Inherited from AnimancerNode
Add(AnimancerState) void
Assigns the `state` as a child of this mixer.
Inherited from ManualMixerState
Add(AnimationClip) ClipState
Creates and returns a new Animancer.ClipState to play the `clip` as a child of this mixer.
Inherited from ManualMixerState
Add(ITransition) AnimancerState
Calls Animancer.AnimancerUtilities.CreateStateAndApply(Animancer.ITransition,Animancer.AnimancerGraph) then Animancer.ManualMixerState.Add(Animancer.AnimancerState).
Inherited from ManualMixerState
Add(Object) AnimancerState
Calls one of the other Animancer.ManualMixerState.Add(System.Object) overloads as appropriate for the `child`.
Inherited from ManualMixerState
AddContextMenuIK(GenericMenu, AnimancerNodeBase) void
[Editor-Only] Adds functions to show and set Animancer.AnimancerNodeBase.ApplyAnimatorIK and Animancer.AnimancerNodeBase.ApplyFootIK.
Inherited from AnimancerNodeBase
static
AddRange(AnimationClip[]) void
Calls Animancer.ManualMixerState.Add(UnityEngine.AnimationClip) for each of the `clips`.
Inherited from ManualMixerState
AddRange(IList<AnimationClip>) void
Calls Animancer.ManualMixerState.Add(UnityEngine.AnimationClip) for each of the `clips`.
Inherited from ManualMixerState
AddRange(IList<ITransition>) void
Calls Animancer.ManualMixerState.Add(Animancer.ITransition) for each of the `transitions`.
Inherited from ManualMixerState
AddRange(IList<Object>) void
Calls Animancer.ManualMixerState.Add(System.Object) for each of the `children`.
Inherited from ManualMixerState
AddRange(ITransition[]) void
Calls Animancer.ManualMixerState.Add(Animancer.ITransition) for each of the `transitions`.
Inherited from ManualMixerState
AddRange(Object[]) void
Calls Animancer.ManualMixerState.Add(System.Object) for each of the `children`.
Inherited from ManualMixerState
AppendDescription(StringBuilder, string) void
Appends a detailed descrption of the current details of this object.
Inherited from AnimancerNode
AppendIKDetails(StringBuilder, string, AnimancerNodeBase) void
Appends the details of Animancer.AnimancerNodeBase.ApplyAnimatorIK and Animancer.AnimancerNodeBase.ApplyFootIK.
Inherited from AnimancerNode
static
AppendParameter(StringBuilder, Vector2) void
Appends the `parameter` in a viewer-friendly format.
AssertConnectionStatus() void
[Assert-Only] Calls Animancer.AnimancerNode.GetConnectionStatusError and logs the result if it isn't null.
Inherited from AnimancerNode
AssertConnectionStatusRecursive(AnimancerNodeBase) void
[Assert-Only] Calls Animancer.AnimancerNode.AssertConnectionStatus for the `node` and all of its children.
Inherited from AnimancerNode
static
AssertOwnership(Object) void
[Assert-Conditional] Sets the Animancer.AnimancerState.Owner and asserts that it wasn't already set to a different object.
Inherited from AnimancerState
CalculateRealEffectiveSpeed() float
The multiplied UnityEngine.Playables.PlayableExtensions.GetSpeed``1(``0) of this mixer and its parents down the hierarchy to determine the actual speed its output is being played at.
Inherited from ManualMixerState
CalculateTotalWeight(AnimancerState[], int) float
Calculates the sum of the Animancer.AnimancerNode.Weight of all `states`.
Inherited from ManualMixerState
static
CancelFade() void
Removes this node from the Animancer.AnimancerNode.FadeGroup.
Inherited from AnimancerNode
ChangeMainObject<T>(T, T) bool
Sets the `currentObject` and calls Animancer.AnimancerNode.RecreatePlayable. If the `currentObject` was being used as the Animancer.AnimancerState.Key then it is changed as well.
Inherited from AnimancerState
Clone(CloneContext) AnimancerState
Creates a new object with the same type and values this.
Inherited from ManualMixerState
CopyFrom(AnimancerNode, CloneContext) void
Copies the details of `copyFrom` into this node, replacing its previous contents.
Inherited from AnimancerState
CopyFrom(AnimancerState, CloneContext) void
Copies the contents of `copyFrom` into this object, replacing its previous contents.
Inherited from ManualMixerState
CopyFrom(MixerState<Vector2>, CloneContext) void
Copies the contents of `copyFrom` into this object, replacing its previous contents.
CopyFrom(Vector2MixerState, CloneContext) void
Copies the contents of `copyFrom` into this object, replacing its previous contents.
CopyIKFlags(AnimancerNodeBase) void
Copies the IK settings from `copyFrom` into this node:
  • If is true, copy .
  • If is true, copy .
Inherited from AnimancerNode
CreatePlayable() void
Creates and assigns the UnityEngine.Playables.Playable managed by this state.
Inherited from AnimancerState
CreatePlayable<T>(AnimancerGraph, T, bool) AnimationScriptPlayable
Creates an UnityEngine.Animations.AnimationScriptPlayable to run the specified Animation Job instead of the usual UnityEngine.Animations.AnimationMixerPlayable.
Inherited from ManualMixerState
CreatePlayable<T>(Playable, T, bool) void
Creates an UnityEngine.Animations.AnimationScriptPlayable to run the specified Animation Job instead of the usual UnityEngine.Animations.AnimationMixerPlayable.
Inherited from ManualMixerState
Destroy() void
DestroyChildren() void
Destroys all Animancer.ManualMixerState.ChildStates connected to this mixer. This operation cannot be undone.
Inherited from ManualMixerState
DestroyPlayable() void
Destroys the UnityEngine.Playables.Playable.
Inherited from AnimancerNode
DisableRemainingStates(int) void
Sets the weight of all states after the `previousIndex` to 0.
Inherited from ManualMixerState
DisconnectChildSafe(int) void
Disconnects the UnityEngine.Playables.Playable of the child at the specified `index` from this node.
Inherited from AnimancerNode
DontSynchronize(AnimancerState) void
Removes the `state` from the Animancer.ManualMixerState.SynchronizedChildren.
Inherited from ManualMixerState
DontSynchronizeChildren() void
Removes all children of this mixer from the Animancer.ManualMixerState.SynchronizedChildren.
Inherited from ManualMixerState
EnsureRemainingChildCapacity(int) void
Ensures that the remaining unused Animancer.ManualMixerState.ChildCapacity is greater than or equal to the specified `minimumCapacity`.
Inherited from ManualMixerState
Events(Object) AnimancerEvent.Sequence
If the Animancer.AnimancerState.OwnedEvents haven't been initialized yet, this method gets them and returns true.
Inherited from AnimancerState
Events(Object, AnimancerEvent.Sequence) bool
If the Animancer.AnimancerState.OwnedEvents haven't been initialized yet, this method gets them and returns true.
Inherited from AnimancerState
GatherAnimationClips(ICollection<AnimationClip>) void
[Animancer.IAnimationClipCollection] Gathers all the animations in this state.
Inherited from ManualMixerState
GetChild(int) AnimancerState
Returns the state connected to the specified `index` as a child of this node.
Inherited from ManualMixerState
GetConnectionStatusError() string
Returns null if this node is properly connected to its parent. Otherwise, returns an error message to be logged.
Inherited from AnimancerState
GetConstructorStackTrace(AnimancerNode) StackTrace
[Assert-Only] Returns the stack trace of the constructor (or null if Animancer.AnimancerNode.TraceConstructor was false).
Inherited from AnimancerNode
static
GetEnumerator() FastEnumerator<AnimancerState>
Gets an enumerator for all of this node's child states.
Inherited from ManualMixerState
GetEventDispatchInfo(float, float, bool) void
Gets the details used to trigger Animancer.AnimancerEvents on this state: Animancer.AnimancerState.Length, Animancer.AnimancerState.NormalizedTime, and Animancer.AnimancerState.IsLooping.
Inherited from ManualMixerState
GetJobData<T>() T
Gets the Animation Job data from the UnityEngine.Animations.AnimationScriptPlayable.
Inherited from ManualMixerState
GetParameterError(Vector2) string
Returns an error message if the given `parameter` value can't be assigned to the Animancer.MixerState`1.Parameter. Otherwise returns null.
GetParameters(List<StateParameterDetails>) void
Gets the details of all parameters in this state.
GetParentMixer() ManualMixerState
Returns the highest Animancer.ManualMixerState in the hierarchy above this mixer or this mixer itself if there are none above it.
Inherited from ManualMixerState
GetParentMixer(AnimancerNodeBase) ManualMixerState
Returns the highest Animancer.ManualMixerState in the hierarchy above the `state` (inclusive).
Inherited from ManualMixerState
static
GetPath() string
Returns the hierarchy path of this node through its Animancer.AnimancerNodeBase.Parents.
Inherited from AnimancerNode
GetTemporaryFloatArray(int) float[]
Returns an array at least as large as the `count`.
Inherited from ManualMixerState
static
GetThresholdBounds(Vector2, Vector2) void
Gets the lowest and highest threshold values on each axis.
IndexOf(AnimancerState) int
Returns the index of the specified `child` state.
Inherited from ManualMixerState
InitializeSynchronizedChildren(bool[]) void
Initializes the internal Animancer.ManualMixerState.SynchronizedChildren list.
Inherited from ManualMixerState
IsChildOf(AnimancerNodeBase, AnimancerNodeBase) bool
Is the `child` a child of the `parent`?
Inherited from ManualMixerState
static
IsPlayingAndNotEnding() bool
Returns true if the animation is playing and has not yet passed the Animancer.AnimancerEvent.Sequence.EndEvent.
Inherited from AnimancerState
IsSynchronized(AnimancerState) bool
Is the `state` in the Animancer.ManualMixerState.SynchronizedChildren?
Inherited from ManualMixerState
MarkAsUsed(AnimancerNodeBase) void
[Assert-Conditional] Prevents the `node` from causing Animancer.OptionalWarning.UnusedNode.
Inherited from AnimancerNodeBase
static
MoveTime(double, bool) void
Sets the Animancer.AnimancerState.Time or Animancer.AnimancerState.NormalizedTime, but unlike those properties this method doesn't skip Events or Root Motion between the old and new time.
Inherited from ManualMixerState
MoveTime(float, bool) void
Sets the Animancer.AnimancerState.Time or Animancer.AnimancerState.NormalizedTime, but unlike those properties this method doesn't skip Events or Root Motion between the old and new time.
Inherited from AnimancerState
NormalizeAndApplyWeights(float, float[]) void
Divides `weights` by the `totalWeight` and applies them to the child states.
Inherited from ManualMixerState
NormalizeDurations() void
Recalculates the Animancer.AnimancerState.Duration of all child states so that they add up to 1.
Inherited from ManualMixerState
OnChildIsLoopingChanged(bool) void
Called when a child's Animancer.AnimancerState.IsLooping value changes.
Inherited from ManualMixerState
Play() void
Plays this state immediately, without any blending and without affecting any other states.
Inherited from AnimancerState
RecreatePlayableRecursive() void
Calls Animancer.AnimancerNode.RecreatePlayable on this node and all its children recursively.
Inherited from AnimancerNode
Remove(AnimancerState, bool) void
Removes the specified `child`.
Inherited from ManualMixerState
Remove(int, bool) void
Removes the child at the specified `index`.
Inherited from ManualMixerState
Set(int, AnimancerState, bool) void
Replaces the `child` at the specified `index`.
Inherited from ManualMixerState
Set(int, AnimationClip, bool) ClipState
Replaces the child at the specified `index` with a new Animancer.ClipState.
Inherited from ManualMixerState
Set(int, ITransition, bool) AnimancerState
Replaces the child at the specified `index` with a Animancer.ITransition.CreateState.
Inherited from ManualMixerState
Set(int, Object, bool) AnimancerState
Calls one of the other Animancer.ManualMixerState.Set(System.Int32,System.Object,System.Boolean) overloads as appropriate for the `child`.
Inherited from ManualMixerState
SetChildrenTime(float, bool) void
Sets Animancer.AnimancerState.Time for all Animancer.ManualMixerState.ChildStates.
Inherited from ManualMixerState
SetDebugName(Object) void
[Assert-Conditional] Sets the Animancer.AnimancerNode.DebugName to display in the Inspector.
Inherited from AnimancerNode
SetExpectFade(AnimancerState, float) void
[Internal] Sets a flag for Animancer.OptionalWarning.ExpectFade.
Inherited from AnimancerState
static
SetGraph(AnimancerGraph) void
SetJobData<T>(T) void
Sets the Animation Job data in the UnityEngine.Animations.AnimationScriptPlayable.
Inherited from ManualMixerState
SetParameters(List<StateParameterDetails>) void
Sets the details of all parameters in this state.
SetParent(AnimancerNode) void
Connects this state to the `parent` at its next available child index.
Inherited from AnimancerState
SetWeight(float) void
Sets the current blend weight of this node which determines how much it affects the final output. 0 has no effect while 1 applies the full effect of this node.
Inherited from AnimancerState
StartFade(float) void
Calls Animancer.AnimancerNode.OnStartFade and starts fading the Animancer.AnimancerNode.Weight over the course of the Animancer.AnimancerGraph.DefaultFadeDuration (in seconds).
Inherited from AnimancerNode
StartFade(float, float) void
Calls Animancer.AnimancerNode.OnStartFade and starts fading the Animancer.AnimancerNode.Weight over the course of the `fadeDuration` (in seconds).
Inherited from AnimancerNode
Stop() void
Stops the animation and makes it inactive immediately so it no longer affects the output.
Inherited from AnimancerNode
Synchronize(AnimancerState) void
Adds the `state` to the Animancer.ManualMixerState.SynchronizedChildren.
Inherited from ManualMixerState
ToString() string
Returns a string describing the type of this mixer and the name of states connected to it.
Inherited from ManualMixerState
UpdateEventsRecursive(AnimancerState) void
Checks if any events should be invoked on the `parent` and its children recursively.
Inherited from AnimancerState
static
UpdateEventsRecursive(AnimancerState, bool) void
Checks if any events should be invoked on the `parent` and its children recursively.
Inherited from AnimancerState
static

Extension Methods

Name Value Summary
CalculateEditorFadeDuration(float) float
[Animancer Extension] [Editor-Only] Returns the duration of the `node`s current fade (if any), otherwise returns the `defaultDuration`.
CalculateThresholdsFromAverageVelocityXZ() void
[Animancer Extension] [Pro-Only] Calculates all thresholds in the `mixer` using the Animancer.AnimancerState.AverageVelocity of each state on the X and Z axes.

Note that this method requires the Root Transform Position (XZ) -> Bake Into Pose toggle to be disabled in the Import Settings of each UnityEngine.AnimationClip in the mixer.
IsValid() bool
[Animancer Extension] Is the `node` is not null and its Animancer.AnimancerNodeBase.Playable valid?