Fix class visual mesh initialization

This commit is contained in:
2026-04-26 16:15:14 +08:00
parent 21865dcc09
commit d9faa65a27
5 changed files with 24 additions and 7 deletions

View File

@@ -36,7 +36,10 @@ void UPHYCharacterMeshBridgeComponent::InitializeMeshBridge(ACharacter* Characte
ApplySourceDefaults();
const UPHYAnimationSettings* Settings = GetDefault<UPHYAnimationSettings>();
CurrentRetargeter = Settings ? Settings->DefaultIKRetargeter : FSoftObjectPath();
if (!CurrentRetargeter.IsValid())
{
CurrentRetargeter = Settings ? Settings->DefaultIKRetargeter : FSoftObjectPath();
}
if (Settings)
{

View File

@@ -91,16 +91,21 @@ void APHYCharacterBase::PreInitializeComponents()
UGameFrameworkComponentManager::AddGameFrameworkComponentReceiver(this);
}
void APHYCharacterBase::BeginPlay()
void APHYCharacterBase::PostInitializeComponents()
{
Super::BeginPlay();
ApplyCharacterSettings();
Super::PostInitializeComponents();
if (MeshBridgeComponent)
{
MeshBridgeComponent->InitializeMeshBridge(this, DisplayMeshComponent);
}
}
void APHYCharacterBase::BeginPlay()
{
Super::BeginPlay();
ApplyCharacterSettings();
if (RagdollComponent)
{

View File

@@ -133,7 +133,13 @@ bool UPHYClassComponent::ApplyConfiguredPlayerMeshIfAllowed(AActor* AvatarActor)
const FSoftObjectPath PlayerRetargeter = GetConfiguredPlayerRetargeter();
UPHYCharacterMeshBridgeComponent* MeshBridge = Character->GetMeshBridgeComponent();
return MeshBridge ? MeshBridge->ApplyDisplayMesh(PlayerMesh, nullptr, PlayerRetargeter) : false;
if (!MeshBridge)
{
return false;
}
MeshBridge->InitializeMeshBridge(Character, Character->GetDisplayMeshComponent());
return MeshBridge->ApplyDisplayMesh(PlayerMesh, nullptr, PlayerRetargeter);
}
bool UPHYClassComponent::ApplyClassAttributesToAbilitySystem(UAbilitySystemComponent* AbilitySystemComponent) const

View File

@@ -41,6 +41,9 @@ public:
/** @brief 注册 ModularGameplay 组件接收者。 */
virtual void PreInitializeComponents() override;
/** @brief 在 Possess 和 PlayerState 初始化前绑定显示层 Mesh 桥接组件。 */
virtual void PostInitializeComponents() override;
/** @brief 初始化角色运行时组件。 */
virtual void BeginPlay() override;