Able touches a lot of systems, so I have a pretty good list (the CameraShake has already been called out by Kaidoom15, so I’ll focus on the others I saw):
Sweeps now take in an FQuat for sweep rotation:
World->AsyncSweepByObjectType(EAsyncTraceType::Single, StartTransform.GetLocation(), EndTransform.GetLocation(), **FQuat::Identity,** ObjectQuery, Shape);
FAnimTickRecord swapped parameter order:
FAnimTickRecord& SequenceTickRecord = Proxy->CreateUninitializedTickRecord(SyncGroup, NAME_None); // Was previously (FName, SyncGroup)
Animation Sequences now take in a FAnimationPoseData struct when querying pose/curve data:
Previously:
AnimSequence->GetAnimationPose(Output.Pose, Output.Curve, FAnimExtractContext(OutputTime, Output.AnimInstanceProxy->ShouldExtractRootMotion()));
Now:
FAnimationPoseData PoseData(/*FPoseContext*/Output);
AnimSequence->GetAnimationPose(PoseData, FAnimExtractContext(OutputTime, Output.AnimInstanceProxy->ShouldExtractRootMotion()));
Getting an Animation Pose requires using a new structure and has a new data type called FStackCustomAttributes:
Previously:
FCompactPose Poses;
FBlendedCurve Curves;
float Weights = 0.0f;
AnimationSequence->GetAnimationPose(Poses, Curves, FAnimExtractContext(CurrentEntry.TimeAccumulator, Proxy->ShouldExtractRootMotion()));
Now:
FCompactPose Poses;
FBlendedCurve Curves;
FStackCustomAttributes Attribs;
float Weights = 0.0f;
FAnimationPoseData PoseA(Poses, Curves, Attribs);
AnimationSequence->GetAnimationPose(PoseA, FAnimExtractContext(CurrentEntry.TimeAccumulator, Proxy->ShouldExtractRootMotion()));
Likewise, BlendPosesTogether got updated:
Previously:
FAnimationRuntime::BlendPosesTogether(Poses, Curves, Weights, Output.Pose, Output.Curve);
Now:
FAnimationRuntime::BlendPosesTogether(Poses, Curves, Attribs, Weights, PoseData);
If you have a custom Animation Graph Node, they changed up how you add a sync group.
Previously:
UAnimBlueprint* AnimBlueprint = GetAnimBlueprint();
Node.GroupIndex = AnimBlueprint->FindOrAddGroup(SyncGroup.GroupName);
Node.GroupRole = SyncGroup.GroupRole;
Now:
UAnimBlueprint* AnimBlueprint = GetAnimBlueprint();
AnimBlueprint->FindOrAddGroup(SyncGroup.GroupName);
Node.GroupName = SyncGroup.GroupName;
Node.GroupScope = SyncGroup.GroupScope;
Node.GroupRole = SyncGroup.GroupRole;
They also added a new required virtual function called OnProcessDuringCompilation, but you can just pull that from of the other graph nodes - it’s pretty generic.
If you inherit from the FBlueprintEditor (or SCSEditor), the **CommonInitialization **got a new parameter added to it - you can read about what it does in the code.
Previously:
CommonInitialization(MyAsset);
Now:
CommonInitialization(MyAsset, false);
Probably a few others I’m forgetting, but obviously the Animation changes were what hit me the most.