Error9.1.骨骼网格体动画切换首帧TPose问题!
大约 1 分钟
常见原因
- AnimInstance 重建延迟
每次调用SetAnimInstanceClass
或更换骨骼网格时,AnimInstance 会被销毁然后重新创建,这个过程在新的动画蓝图生效前会渲染一个默认绑定姿势(T‑pose。 - Skeleton 不匹配
如果新网格使用的 Skeleton 与当前 AnimBlueprint 不一致,则系统会先清空 AnimClass,导致角色短暂 T‑pose,然后才重新加载正确的。 - 动画首次 Tick 延迟
新组件注册(RegisterComponent
)后,下一帧才会更新动画系统,这一帧空白期间会显示骨骼的默认姿势。
解决方案
1. 预热(Pre‑warm)AnimInstance
MeshComp->SetVisibility(false);
//加载模型后设置为可见
MeshComp->SetVisibility(true);
2. 立即播放单节点动画
MeshComp->SetAnimationMode(EAnimationMode::AnimationSingleNode);
MeshComp->SetSkeletalMesh(NewMesh);
MeshComp->PlayAnimation(IdleAnim, true);
MeshComp->SetPlayRate(1.f);
MeshComp->bAutoActivate = true;
此时动画会在同一帧被应用,取代默认姿势citeturn0search5。
3. 延迟一帧切换
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [this]()
{
MeshComp->SetSkeletalMesh(NewMesh);
}, 0.f, false);