Description

Child Animation Blueprint that inherits a Layer Interface can have the Layer Interface added a second time giving the impression changing the layers within the child will override them for the child.

In UE4 when you try to add Layer1 to the Animation blueprint it issues a warning saying it isn't blueprintable.

 

User note:

If this is intentional, it should be re-thought because its counter-intuitive.
Child Anim Blueprints should be able to override their parent's Graphs, even the main graph, and should be able to get parent graph evaluation like how a normal function can call its Parent function if desired.

Functionally you can override the Animation Layer Interface Outputs by creating a new class and giving it the interface, then calling Character-Mesh-LinkAnimClassLayers(separateAnimBP)
But this forces us to separate even more functionality that could be contained in the same Blueprint.

This is especially a problem when using Animation Blueprint Templates. Because the template may utilize Animation Layer Interfaces as a way to get the pose of a montage animation running on a slot (because slots don't work in templates).
The child class of the template can't implement their own version of the animation layer interface layers. There has to be another sister class that is not inherited from the template that implements the interface, and then is LinkAnimClassLayers to the mesh/childAnimBP.

While you're reading this. Hear that we want a way to get Montage Slot Poses to be used in BP Templates.
We want to be able to override Animation Graphs/Layers/Cached Poses of the parent/template Animation BP.

Steps to Reproduce
  1. Create a Third Person Template project with Preview 2
  2. Create an Animation Layer Interface named 'AnimLayerInt'
    1. Open AnimLayerInt then create a layer called 'Layer1'
    2. Compile then Close AnimLayerInt
  3. Create an Animation Blueprint using UE4_Mannequin_Skeleton named "AnimBP_Parent"
    1. In the Class settings add AnimLayerInt
    2. Open Animation Layer 'Layer1'
    3. Add a 'Play ThirdPerson_Jump' node then connect it to the out pose
    4. In the AnimGraph drag in Layer1 then connect it to the Output Pose's Result
    5. Compile then close AnimBP_Parent
  4. Right-Click AnimBP_Parent then select "Create Child Blueprint Class" named "AnimBP_Child"
    1. In the Class Settings of AnimBP_Child observe AnimLayerInt is inherited, and that there isn't a way to override the Layers it contains
  5. In the Class Settings of AnimBP_Child add AnimLayerInt
    1. Open Animation Layer 'Layer1'
    2. Add a 'Play ThirdPersonIdle' node then connect it to the out pose
    3. Compile then close AnimBP_Child
  6. Place AnimBP_Parent and AnimBP_Child in the level
  7. Play in Editor
  8. Observe the 2 Actors

Expected Results:
Either AnimBP_Child plays ThirdPersonIdle; or the layer Interface can't be added to the child; or adding the layer interface to the child overrides the parent.

Actual Results:
ThirdPersonIdle doesn't play on AnimBP_Child; the layer interface can be added to the child.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-147316 in the post.

3
Login to Vote

Fixed
ComponentUE - Anim - Runtime - Anim Blueprints
Affects Versions5.0
Target Fix5.1
Fix Commit22050512
Main Commit22054506
Release Commit22050512
CreatedMar 28, 2022
ResolvedSep 16, 2022
UpdatedOct 7, 2022