Animation¶
All · 15 min · No code
Problems with the animation Blueprints, anim layers, montages and imported clips. For the model behind them, read Animation.
Play refuses to start with "Blueprint failed to compile", and no error is shown anywhere¶
Fails silently
The anim Blueprint shows no red node, the Message Log is empty and the Output Log says nothing. Only its compile status is wrong.
Why: the anim Blueprint compiler checks some graph nodes in a silent pass and then discards the messages, but keeps the error count. The most common cause is a Get node for a variable that a programmer added to the C++ anim instance without making it readable from Blueprints.
Fix:
- Compile each anim Blueprint you changed and look at the Compile button: a red icon means it failed, even with an empty log. The last one you edited is the likely culprit.
- Undo your last graph change, or delete Get nodes for variables added recently, until it compiles. Then ask whoever added the variable to fix it (below).
For programmers
The variable is a UPROPERTY marked EditDefaultsOnly or EditAnywhere without
BlueprintReadOnly or BlueprintReadWrite. Add BlueprintReadOnly, rebuild C++ (a reflected
change cannot go through Live Coding), and restart the editor. A normal Blueprint shows this
error; an anim Blueprint swallows it.
Avoid it next time: Choose an animation style.
Equipping a weapon never changes the character's stance¶
Why: the stance is an anim layer, chosen by the weapon when it is drawn or sheathed. The weapon
instance Blueprint (for example Weapons/GreatSword/B_WeaponInstance_GreatSword) has two
settings: Equipped Anim Set (drawn) and Uneuipped Anim Set (sheathed; the spelling is
Lyra's). If both name the same layer, drawing the weapon links the same layer again and nothing
changes.
Fix: set Equipped Anim Set to your weapon's layer (like
ABP_XenoCore_GreatSwordAnimLayers) and Uneuipped Anim Set to the unarmed layer. To check a
layer is used at all, right-click it and choose Reference Viewer: an unused layer has no
referencers.
Avoid it next time: Add a weapon.
The pose pops when switching between armed and unarmed¶
Why: this happens only if you changed how the weapon instance Blueprint links its layer (its Set Drawn function). The switch is smoothed by an inertialization request made right after the layer is linked. It pops when:
- the layers are unlinked and then linked: unlinking drops every node to its fallback for a frame. Link Anim Class Layers replaces the old layer on its own.
- the layer is linked every frame from the anim Blueprint instead of once, on the draw or sheathe event.
- the slot group name passed to Request Slot Group Inertialization does not match the Slot node's group. A wrong name fails silently.
Fix: link once per change, from the weapon's draw or sheathe, with no unlink. Keep the group
name DefaultGroup unless you changed the Slot node, and keep the Inertialization node
downstream of it in ABP_XenoCore_Base.
Avoid it next time: Add a weapon.
A montage slot I added inside an anim layer never plays anything¶
Why: montages play on the character's main anim instance. A linked anim layer is a separate instance, and it only sees the main instance's montages if Use Main Instance Montage Evaluation Data is on in its class settings. It is off by default.
Fix: put montage slots in ABP_XenoCore_Base, not in a layer. If a layer truly needs one, turn
that setting on for the layer class.
Avoid it next time: Choose an animation style.
I reparented an anim Blueprint to another one and its graph is gone¶
Why: an anim Blueprint whose parent is another anim Blueprint becomes a child anim Blueprint, which has no AnimGraph of its own. The graph is discarded on save.
Fix: restore the asset from source control. To share logic between anim Blueprints, give each
one the parent class XenoCoreAnimInstance instead (logic shared that way is C++, a programmer's
job). Child anim Blueprints are only
right for override-only layers, like the weapon layers, which replace assets but keep the
parent's graph.
Avoid it next time: Choose an animation style.
Feet slide or float between walk and run speeds¶
Why: stride warping is applied once, in ABP_XenoCore_Base's AnimGraph. A second Stride
Warping node, for example in an anim layer's move graph, sits on the same chain and scales the
stride twice. A Stride Warping node missing its thigh bones is inactive, and warns
Stride Warping - Thigh bone definition is required on compile; "fixing" that warning on a
duplicate node is what switches the double warp on.
Fix: keep exactly one Stride Warping node, the one in the base. Delete others rather than
completing them. To compare with warping off, run a.AnimNode.StrideWarping.Enable 0 in the
console.
Avoid it next time: Choose an animation style.
The character's feet snap or jitter only while a weapon is equipped¶
Why: foot placement traces down to find the ground. A weapon mesh with blocking collision, attached to the character's back, is hit by those traces instead of the floor.
Fix: on your weapon actor's mesh, set the collision preset to NoCollision and turn off overlap events.
Avoid it next time: Add a weapon.
Imported Paragon clips play in place and don't move the character¶
Why: the Paragon animation library animates in place. Its clips carry no root motion, so a montage that relies on root motion to lunge or dodge leaves the character standing still.
Fix: move the character in the ability instead (for example with a root motion task), or use clips that carry root motion.
Avoid it next time: Create an attack art.
The idle break never plays, or an armed stance plays the unarmed fidget¶
Why: the idle break is set per anim layer, on the layer's Class Defaults: Idle Break
Anim, Idle Break Delay and Idle Break Jitter (XenoCore › Idle Break). An empty Idle
Break Anim means that stance never breaks. A layer child that does not set it inherits its
parent's clip, so a new armed layer made from the unarmed one plays the unarmed fidget. The unarmed
default, MM_Unarmed_IdleBreak_Fidget, is set on ABP_XenoCore_UnarmedAnimLayers; the layer base,
ABP_XenoCore_ItemLayersBase, leaves it empty.
A character with an Anim Profile overrides that clip with its own lists: Idle Breaks with the weapon away, Armed Idle Breaks with it drawn. If a character plays the wrong fidget, look there first: an unarmed clip in Armed Idle Breaks plays straight through the sword. The profile is read once, when the body spawns, so an edit made during Play shows only after you press Play again.
Fix: set Idle Break Anim on every layer child, or clear it to opt out. For one character's own fidgets, fill its profile's Idle Breaks and leave Armed Idle Breaks empty unless you have clips made for the weapon. If you rebuild the idle graph, remember Blend Poses by bool's top pose is the True pose; wired backwards, the fidget becomes the idle.
Avoid it next time: Choose an animation style and Give a character its own idle breaks and faces.
A companion's face never changes expression, or one expression never shows¶
Fails silently
Nothing is logged for a missing curve or a misspelt expression name.
Why: expressions are rows of the face's Expression Table
(Characters/Core/Face/DT_XenoCore_FaceExpressions by default). A name that is not a row is tried as a
single face curve, and a curve the VRoid model does not have does nothing. So a typo in a profile's
Social Expressions, a face rule or a Play Expression On Actor call shows a neutral face. Only
VRoid members have a face at all: a Mannequin-bodied character never shows one.
Fix: copy the row name exactly from the table. Build new rows from the VRM preset curves (happy,
angry, sad, relaxed, surprised, aa, ih, ou, ee, oh, blink, blinkLeft,
blinkRight), and check any raw Fcl_* curve in Play before relying on it. If the downed or victory
face is missing on one character only, its retarget anim Blueprint has its own Expression Rules
list; add the missing rule there, or reset the property to its default. The seven shipped retarget
anim Blueprints keep the default list.
Avoid it next time: Give a character its own idle breaks and faces.
A feminine or armed character stands in the masculine unarmed idle, but moves correctly¶
Why: a layer child swaps clips with asset overrides, and each override is tied to one node
in the layer base, ABP_XenoCore_ItemLayersBase. If that node is deleted and rebuilt, for
example while you rework the FullBody_Idle graph, every child's override for it is dropped
when the child is next saved. Nothing warns you. The child then plays the base's own clip,
MM_Unarmed_Idle_Ready. Locomotion keeps working because the blend-space override sits on a
different node, so the fault only shows when the character stands still.
Fix: open the layer child, for example ABP_XenoCore_UnarmedAnimLayers_Feminine, and in the
Asset Override Editor tab (it opens by itself for a layer child; if you closed it, reopen it
from the Window menu) set the idle again: MF_Unarmed_Idle_Ready for the feminine layer,
AS_Kwang_Idle for the greatsword layer. Compile and Save. Set it once only (see
Choose an animation style).
Avoid it next time: after any edit to the layer base's graph, open each layer child and check its overrides are still listed. Right-click the child in the Content Browser and choose Reference Viewer: its idle clip must appear among its references.
A character's own Topple (or flinch, block, dodge, death) never plays; the shared clip does¶
Why: the character's Anim Profile never reaches the reaction. Nothing warns you, because an empty profile slot is supposed to fall back to the shared clip. The usual causes: Anim Profile is set on a parent Blueprint the character does not spawn as; the profile row's key is a reaction this character is never granted; or a reaction ability you made yourself has an empty Profile Key.
Fix: press Play and run XenoCore.Anim.Describe in the console (add enemy or part of a
pawn's name for someone other than the leader). The Output Log lists every reaction slot as
PROFILE or default, says profile: None when the pawn has none, flags a profile row that
matches no granted reaction, and shows no ProfileKey on an ability that never reads a profile.
Avoid it next time: Give a character its own combat animations.
Hits knock a character back but its flinch barely shows, or a hit cuts its swing short¶
Why: the flinch montage shares a slot group with the attack montages. Montages in one group stop
each other, so the flinch interrupts the swing and the next swing interrupts the flinch. Compiling an
anim Blueprint with a new slot puts that slot in DefaultGroup, which is how this happens. Less
often: the flinch clip is not additive, or the montage is not on the AdditiveHitReact slot.
Fix: open the character's skeleton › Anim Slot Manager, add a group AdditiveGroup and move
AdditiveHitReact into it (SK_Mannequin and SK_Minion_Core ship this way). Check the flinch
montage's slot is AdditiveHitReact and its clip's Additive Anim Type is Local Space.
Avoid it next time: Add an enemy, step 2.