|
@@ -0,0 +1,136 @@
|
|
|
+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 # 插件描述文件,定义插件元数据
|
|
|
+
|
|
|
+
|
|
|
+1. 系统入口类
|
|
|
+// 继承自UGameInstance,作为系统总控
|
|
|
+UCLASS()
|
|
|
+class UMetaverseGameInstance : public UGameInstance {
|
|
|
+ GENERATED_BODY()
|
|
|
+
|
|
|
+public:
|
|
|
+ // 模块注册表
|
|
|
+ UPROPERTY()
|
|
|
+ TMap<FName, UMetaverseModule*> ActiveModules;
|
|
|
+
|
|
|
+ // 初始化所有模块
|
|
|
+ virtual void OnStart() override;
|
|
|
+};
|
|
|
+
|
|
|
+1. 模块管理系统
|
|
|
+// 模块基类(抽象接口)
|
|
|
+UCLASS(Abstract)
|
|
|
+class IModuleBase : public UObject {
|
|
|
+ GENERATED_BODY()
|
|
|
+
|
|
|
+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);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+1. 网络层改造
|
|
|
+// 网络管理器(支持双协议)
|
|
|
+UCLASS()
|
|
|
+class METAVERSE_STUDIO_API UNetworkManager : public UObject {
|
|
|
+ GENERATED_BODY()
|
|
|
+
|
|
|
+ // UDP快速通道
|
|
|
+ void SendUdpDatagram(const TArray<uint8>& Data);
|
|
|
+
|
|
|
+ // TCP可靠通道
|
|
|
+ void EnqueueTcpPacket(const FMetaversePacket& Packet);
|
|
|
+
|
|
|
+private:
|
|
|
+ FSocket* UdpSocket;
|
|
|
+ FSocket* TcpSocket;
|
|
|
+ FRunnableThread* TcpWorkerThread;
|
|
|
+
|
|
|
+ // Protobuf序列化工具
|
|
|
+ TSharedPtr<FProtoSerializer> ProtoSerializer;
|
|
|
+};
|