fix(interaction): 修复编译错误和交互系统集成问题

- SystemDriver: EffectManager改为值持有,去掉TUniquePtr和条件编译
- SystemDriver: 补充EngineUtils.h include修复TActorIterator编译错误
- GameMode: BeginPlay自动Spawn ASystemDriver
- InteractableActor: 改为abstract基类,子类自行创建交互组件
- DoorActor: 创建DoorInteractableComp替代基类组件
- EffectManager: 实现ExecuteToggleDoor调用实际门开关逻辑
- InteractableComponent/DoorComponent: 修复GetGameInstance路径和调用方式
- EffectManager: Broadcast改为Execute(单播委托)
This commit is contained in:
2026-06-12 00:51:00 +08:00
parent c14c63f30d
commit 237885e3b8
13 changed files with 69 additions and 82 deletions
@@ -9,7 +9,7 @@
#include "Components/SphereComponent.h"
#include "Engine/World.h"
#include "GameFramework/GameInstance.h"
#include "Engine/GameInstance.h"
#include "GameFramework/Character.h"
// ============================================================================
@@ -59,7 +59,8 @@ void UInteractableComponent::BeginPlay()
}
// --- 恢复跨场景持久状态 ---
if (UPersistenceSubsystem* Persistence = GetGameInstance()->GetSubsystem<UPersistenceSubsystem>())
UGameInstance* GI = Owner->GetGameInstance();
if (UPersistenceSubsystem* Persistence = GI ? GI->GetSubsystem<UPersistenceSubsystem>() : nullptr)
{
RestorePersistentState(Persistence);
}
@@ -94,9 +95,9 @@ void UInteractableComponent::Consume_Implementation()
}
// 写入持久层
if (UWorld* World = GetWorld())
if (UGameInstance* GI = GetOwner() ? GetOwner()->GetGameInstance() : nullptr)
{
if (UPersistenceSubsystem* Persistence = World->GetGameInstance()->GetSubsystem<UPersistenceSubsystem>())
if (UPersistenceSubsystem* Persistence = GI->GetSubsystem<UPersistenceSubsystem>())
{
Persistence->MarkItemCollected(Data.ItemId);
}