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

@@ -4,7 +4,7 @@ DefaultAIClassTag=(TagName="Class.Saber")
bApplyPlayerClassMeshToPlayers=True bApplyPlayerClassMeshToPlayers=True
bApplyPlayerClassMeshToAI=False bApplyPlayerClassMeshToAI=False
!PlayerClassMeshes=ClearArray !PlayerClassMeshes=ClearArray
+PlayerClassMeshes=(ClassTag=(TagName="Class.Saber"),PlayerMesh=None,PlayerRetargeter=) +PlayerClassMeshes=(ClassTag=(TagName="Class.Saber"),PlayerMesh="/Game/AGame/Character/Ida/SK_MMO_ADVANCED_F_01_AGame.SK_MMO_ADVANCED_F_01_AGame",PlayerRetargeter="/Game/AGame/Animation/Retargeters/RTG_Manny_To_Ida.RTG_Manny_To_Ida")
+PlayerClassMeshes=(ClassTag=(TagName="Class.Lancer"),PlayerMesh=None,PlayerRetargeter=) +PlayerClassMeshes=(ClassTag=(TagName="Class.Lancer"),PlayerMesh=None,PlayerRetargeter=)
+PlayerClassMeshes=(ClassTag=(TagName="Class.Archer"),PlayerMesh=None,PlayerRetargeter=) +PlayerClassMeshes=(ClassTag=(TagName="Class.Archer"),PlayerMesh=None,PlayerRetargeter=)
+PlayerClassMeshes=(ClassTag=(TagName="Class.Rider"),PlayerMesh=None,PlayerRetargeter=) +PlayerClassMeshes=(ClassTag=(TagName="Class.Rider"),PlayerMesh=None,PlayerRetargeter=)

View File

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

View File

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

View File

@@ -133,7 +133,13 @@ bool UPHYClassComponent::ApplyConfiguredPlayerMeshIfAllowed(AActor* AvatarActor)
const FSoftObjectPath PlayerRetargeter = GetConfiguredPlayerRetargeter(); const FSoftObjectPath PlayerRetargeter = GetConfiguredPlayerRetargeter();
UPHYCharacterMeshBridgeComponent* MeshBridge = Character->GetMeshBridgeComponent(); 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 bool UPHYClassComponent::ApplyClassAttributesToAbilitySystem(UAbilitySystemComponent* AbilitySystemComponent) const

View File

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