Metaverse_Studio ├── Config # 配置文件目录:存放 JSON/CSV 配置文件 │ ├── DefaultEventConfig.json # 默认事件配置文件,用于配置 LevelSequence 的逻辑 │ ├── DefaultRoomConfig.json # 房间配置文件,定义物理房间与虚拟房间的映射关系 │ ├── DefaultVersionConfig.json # 版本管理配置,支持多场地差异化部署 │ └── ... ├── Content # 插件内置资源目录:存放插件自带的素材或UI资源 │ ├── UI # 工具界面的图标或样式资源 │ │ └── Icon128.png # 示例:图标资源 │ └── ... ├── Source # 源代码目录 │ ├── Metaverse_Studio # 插件的主模块 │ │ ├── Metaverse_Studio.Build.cs # 插件的构建脚本 │ │ ├── Public # 公共头文件:模块接口、配置管理等 │ │ │ ├── Core # 核心框架:模块管理器、模块基类 │ │ │ │ ├── MetaverseGameInstance.h │ │ │ │ ├── ModuleBase.h # 模块基类接口,用于定义模块的通用行为 │ │ │ │ ├── ModuleManager.h # 模块管理器,负责模块的注册和生命周期管理 │ │ │ │ ├── ConfigManager.h # 配置管理器,加载和解析 JSON/CSV 文件 │ │ │ │ ├── NetworkManager.h # 网络管理器,负责网络通讯 │ │ │ │ └── ... │ │ │ ├── Modules # 模块化设计:所有功能分为独立模块,通过模块管理器统一管理,支持动态扩展。 │ │ │ │ ├── RoomModule.h # 房间管理模块,负责物理房间与虚拟房间的映射 │ │ │ │ ├── SceneModule.h # 场景管理模块,使用 PAK 动态加载场景资源 │ │ │ │ ├── BoundaryModule.h # 引导边界模块,生成用户的移动引导区域 │ │ │ │ ├── SyncModule.h # 多人同步模块,实时同步用户信息,由单独的数据结构维护 │ │ │ │ ├── InteractionModule.h # 交互模块,提供动态交互逻辑 │ │ │ │ └── ... │ │ │ ├── Utilities/ # 工具类 │ │ │ │ ├── ProtoConverter.h # Protobuf转换工具 │ │ │ │ └── ... │ │ └── Private # 私有实现:模块的具体功能实现 │ │ │ ├── Core │ │ │ │ ├── MetaverseGameInstance.cpp │ │ │ │ ├── ModuleBase.cpp # 模块基类实现 │ │ │ │ ├── ModuleManager.cpp # 模块管理器实现 │ │ │ │ ├── ConfigManager.cpp # 配置管理器实现 │ │ │ │ ├── NetworkManager.cpp # 网络管理器实现 │ │ │ │ └── ... │ │ │ ├── Modules │ │ │ │ ├── RoomModule.cpp # 房间管理模块实现 │ │ │ │ ├── SceneModule.cpp # 场景管理模块实现 │ │ │ │ ├── BoundaryModule.cpp # 引导边界模块实现 │ │ │ │ ├── SyncModule.cpp # 多人同步模块实现 │ │ │ │ ├── InteractionModule.cpp # 交互模块实现 │ │ │ │ └── ... │ ├── Metaverse_StudioEditor # 插件的 Editor 模块:用于工具界面和可视化支持 │ │ ├── Metaverse_StudioEditor.Build.cs # Editor 模块的构建脚本 │ │ ├── Public │ │ │ └── UI │ │ │ ├── PAKToolUI.h # PAK 打包工具的界面支持,为美术提供资源打包支持。 │ │ │ ├── SequenceToolUI.h # Sequence配置工具,为策划提供时间轴逻辑配置支持,如在Seq编辑完后导出EventTable CSV配置表 │ │ │ └── InteractionToolUI.h # 交互配置工具的界面支持,为策划提供交互逻辑可视化配置。 │ │ └── Private │ │ └── UI │ │ ├── PAKToolUI.cpp # PAK 打包工具的界面实现 │ │ ├── SequenceToolUI.cpp # Sequence 配置工具的界面实现 │ │ └── InteractionToolUI.cpp # 交互配置工具的界面实现 │ ├── Metaverse_AI/ # 预留AI模块 │ └── Metaverse_Physics/ # 预留高级物理模块 ├── Resources # 插件的描述文件和图标 │ ├── Icon128.png # 插件图标 │ └── Metaverse_Studio.uplugin # 插件描述文件,定义插件元数据
public:
// 模块注册表
UPROPERTY()
TMap<FName, UMetaverseModule*> ActiveModules;
// 初始化所有模块
virtual void OnStart() override;
};
public:
virtual void InitializeModule() PURE_VIRTUAL(UModuleBase::InitializeModule);
virtual void ShutdownModule() PURE_VIRTUAL(UModuleBase::ShutdownModule);
virtual FString GetModuleName() const = 0; // 获取模块名称
};
// 模块管理器 UCLASS() class FMetaverseModuleManager{
GENERATED_BODY()
TMap<FName, TSubclassOf<UModuleBase>> RegisteredModules;
template<typename T>
void RegisterModule(FName ModuleName) {
RegisteredModules.Add(ModuleName, T::StaticClass());
}
void UnregisterAllModules();
TSharedPtr<IMetaverseModule> GetModule(const FString& ModuleName);
// 模板函数:直接获取特定模块的类型
template <typename T>
TSharedPtr<T> GetModuleAs(const FString& ModuleName)
{
TSharedPtr<IMetaverseModule> BaseModule = GetModule(ModuleName);
return StaticCastSharedPtr<T>(BaseModule);
}
};
网络层改造 // 网络管理器(支持双协议) UCLASS() class METAVERSE_STUDIO_API UNetworkManager : public UObject { GENERATED_BODY()
// UDP快速通道 void SendUdpDatagram(const TArray& Data);
// TCP可靠通道 void EnqueueTcpPacket(const FMetaversePacket& Packet);
private:
FSocket* UdpSocket;
FSocket* TcpSocket;
FRunnableThread* TcpWorkerThread;
// Protobuf序列化工具
TSharedPtr<FProtoSerializer> ProtoSerializer;
};