Browse Source

vr框架目录架构

wuzj 2 months ago
parent
commit
174e39d290
1 changed files with 136 additions and 0 deletions
  1. 136 0
      README.md

+ 136 - 0
README.md

@@ -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;
+};