特定条件のモーション素材でカーブをいじるとプレビュー画面からキャラクタが消える

お世話になっております。

こちら、手元でも再現いたしました。

コードを確認するとScaleを - FVector(1.f)行っている箇所があり、そこでscaleがマイナスされているのが原因でした。

以下のコードを編集することで現象を回避できると思いますので、ご検討いただけますでしょうか。

AnimSequence.hのResetRootBoneForRootMotionの宣言に引数を追加します。

void ResetRootBoneForRootMotion(FTransform& BoneTransform, const FBoneContainer & RequiredBones, ERootMotionRootLock::Type InRootMotionRootLock, bool isScale) const;

AnimSequence.cppのResetRootBoneForRootMotionの定義を以下のように変更します。

void UAnimSequence::ResetRootBoneForRootMotion(FTransform& BoneTransform, const FBoneContainer& RequiredBones, ERootMotionRootLock::Type InRootMotionRootLock, bool isScale) const
{
	switch (InRootMotionRootLock)
	{
		case ERootMotionRootLock::AnimFirstFrame: BoneTransform = ExtractRootTrackTransform(0.f, &RequiredBones); break;
		case ERootMotionRootLock::Zero: BoneTransform = FTransform::Identity; break;
		default:
		case ERootMotionRootLock::RefPose: BoneTransform = RequiredBones.GetRefPoseArray()[0]; break;
	}

	if (isScale && IsValidAdditive() && InRootMotionRootLock != ERootMotionRootLock::AnimFirstFrame)
	{
		//Need to remove default scale here for additives
		BoneTransform.SetScale3D(BoneTransform.GetScale3D() - FVector(1.f));
	}
}

同ファイルの呼び出しで引数を追加します。

#if WITH_EDITOR
	// this happens only with editor data
	// Slower path for disable retargeting, that's only used in editor and for debugging.
	if (bUseRawDataForPoseExtraction)
	{
		const bool bShouldUseSourceData = (RequiredBones.ShouldUseSourceData() && SourceRawAnimationData.Num() > 0);
		const TArray& AnimationData = bShouldUseSourceData ? SourceRawAnimationData : RawAnimationData;

		BuildPoseFromRawData(AnimationData, OutPose, ExtractionContext.CurrentTime);

		if ((ExtractionContext.bExtractRootMotion && bEnableRootMotion) || bForceRootLock)
		{
			ResetRootBoneForRootMotion(OutPose[FCompactPoseBoneIndex(0)], RequiredBones, RootMotionRootLock, false);
		}
		return;
	}
#endif // WITH_EDITOR


// Once pose has been extracted, snap root bone back to first frame if we are extracting root motion.
	if ((ExtractionContext.bExtractRootMotion && bEnableRootMotion) || bForceRootLock)
	{
		ResetRootBoneForRootMotion(OutPose[FCompactPoseBoneIndex(0)], RequiredBones, RootMotionRootLock, true);
	}

以上となります。

また、挙動としてはバグに見受けられますので、別途バグ登録させていただこうと思います。

お手数をおかけしますが、よろしくお願いします。