UE C++ 创建subsystem
时间: 2025-06-29 17:17:59 浏览: 16
### 如何在 Unreal Engine 中使用 C++ 创建 Subsystem
创建子系统 (Subsystem) 是扩展游戏功能的一种有效方式。通过实现特定接口并注册到引擎中,可以方便地管理全局资源和服务。
#### 定义新的 Subsystem 类
为了定义一个新的子系统类,需继承 `UWorldSubsystem` 或其派生类,并标记为可由蓝图访问:
```cpp
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Subsystems/GameInstanceSubsystem.h"
// 声明自定义子系统的头文件
DECLARE_LOG_CATEGORY_EXTERN(MySubsystem, Log, All);
DEFINE_LOG_CATEGORY(MySubsystem);
class MYPROJECT_API UMyCustomSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
// 构造函数用于初始化成员变量
UMyCustomSubsystem();
protected:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
};
```
此代码片段展示了如何声明一个名为 `UMyCustomSubsystem` 的新子系统[^1]。
#### 实现必要的方法
每个子系统都应至少重写两个重要虚函数:`Initialize()` 和 `Deinitialize()`. 这些生命周期回调允许开发者执行启动和关闭逻辑:
```cpp
void UMyCustomSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
UE_LOG(MySubsystem, Display, TEXT("Initializing My Custom Subsystem"));
}
void UMyCustomSubsystem::Deinitialize()
{
UE_LOG(MySubsystem, Display, TEXT("Shutting down My Custom Subsystem"));
Super::Deinitialize();
}
```
上述实现了日志记录功能,在子系统激活时打印消息至控制台[^2].
#### 注册与获取实例
为了让其他部分能够找到这个子系统,需要确保它被正确加载到了适当的作用域内(通常是 Game Instance)。之后可以通过静态模板辅助工具来检索当前活动的对象指针:
```cpp
if(UGameInstance* GameInst = GetDefault<UGameInstance>())
{
if(auto* SysPtr = GameInst->GetSubsystem<UMyCustomSubsystem>())
{
SysPtr->DoSomethingUseful();
}
}
```
这段示范了怎样安全地查询已存在的子系统对象,并调用其中的方法.
阅读全文
相关推荐


















