I Test ChaosMover Pawn to use PlayMontage(MoverActor). there is no effect on AnimRootMotion.
I modified the code myself. If there is a more correct way, please help me.
bool FLayeredMove_AnimRootMotion::GenerateMove(const FMoverTickStartData& SimState, const FMoverTimeStep& TimeStep, const UMoverComponent* MoverComp, UMoverBlackboard* SimBlackboard, FProposedMove& OutProposedMove)
{
//...
OutProposedMove = FProposedMove();
OutProposedMove.MixMode = MixMode;
/** begin of Code Modify @TangRongQi */
OutProposedMove.bHasDirIntent = true;
/** end of Code Modify @TangRongQi */
// Convert the transform into linear and angular velocities
OutProposedMove.LinearVelocity = WorldSpaceRootMotion.GetTranslation() / DeltaSeconds;
OutProposedMove.AngularVelocity = WorldSpaceRootMotion.GetRotation().Rotator() * (1.f / DeltaSeconds);
#if !UE_BUILD_SHIPPING
UE_CLOG(CVarLogAnimRootMotionSteps->GetBool(), LogMover, Log, TEXT("AnimRootMotion. SimF %i (dt %.3f) Range [%.3f, %.3f] => LocalT: %s (WST: %s) Vel: %.3f"),
TimeStep.ServerFrame, DeltaSeconds, ExtractionStartPosition, ExtractionEndPosition,
*LocalRootMotion.GetTranslation().ToString(), *WorldSpaceRootMotion.GetTranslation().ToString(), OutProposedMove.LinearVelocity.Length());
#endif // !UE_BUILD_SHIPPING
return true;
}
/** begin of Code Modify @TangRongQi */
bool FLayeredMove_AnimRootMotion::GenerateMove_Async(const FMoverTickStartData& StartState, const FMoverTimeStep& TimeStep,
UMoverBlackboard* SimBlackboard, FProposedMove& OutProposedMove)
{
if (StartState.MoverComp.IsValid())
{
return GenerateMove(StartState, TimeStep, StartState.MoverComp.Get(), SimBlackboard, OutProposedMove);
}
return false;
}
/** end of Code Modify @TangRongQi */