跳转到内容

目录和命名空间结构

对开发感兴趣吗?

Project EAUploader一直在招募开发成员! 只是想聊聊也非常欢迎! 请访问本项目的Discord服务器。 点击这里加入



本文档基于EAUploader v1.6.2编写。

目录结构


EAUploader作为VPM包tech.uslog.eauploader发布。包的主要目录结构如下。

tech.uslog.eauploader/
├── package.json 包信息(版本、依赖关系)
├── CHANGELOG.md 更新历史
├── Docs/ 规范文档(英语)
├── Editor/ 编辑器扩展(EAUploader.Editor程序集)
│ ├── EAUploader.Editor.asmdef
│ ├── Public EAUploader API/ 面向外部工具的公开API(每个文件一个类)
│ ├── Scripts/
│ │ ├── EAUploaderCore.cs 启动、初始化、全局状态
│ │ ├── EAUploaderEditorManager.cs 编辑工具的注册
│ │ ├── EAUPluginAttribute.cs [EAUPlugin]特性
│ │ ├── AvatarUploader.cs 构建和上传
│ │ ├── AssetProcessor.cs 素材导入时的处理
│ │ ├── Config.cs 设置文件(settings.json)
│ │ ├── LanguageUtility.cs, T7e.cs 多语言支持
│ │ ├── ThemeUtility.cs 主题
│ │ ├── CustomPrefabUtility/ 管理用Prefab Variant、标签、预览、着色器检查、VRM转换、迁移、删除
│ │ ├── Coexistence/ 与AvatarOptimizer共存
│ │ ├── VRCSDK/ Avatar性能计算
│ │ └── Feedback/, SubWindow/ 反馈发送和欢迎窗口(目前未使用)
│ └── Resources/
│ ├── Localization/ UI翻译文件(ja.json、ko.json)
│ ├── Message/ 帮助消息(按语言)
│ ├── Shaders/ AlwaysShow.shader(预览标记)、TextureAdjust.shader(纹理编辑)
│ └── UI/
│ ├── EAUploader.cs 主窗口
│ ├── MainWindow.uxml
│ ├── styles.uss / tailwind.uss
│ ├── Components/ 自定义UI组件
│ ├── Modals/ 窗口内显示的模态窗口
│ ├── TabContents/
│ │ ├── AvatarList/ Avatar列表
│ │ ├── Setup/ 编辑界面
│ │ │ └── Editor/ 内置编辑工具(Common、ViewpointPositionEditor、ShapeKeyEditor、TextureEditor、OutfitTool)
│ │ ├── Upload/ 上传表单
│ │ └── ImportSettings/ EA Library文章(目前未在界面中显示)
│ └── Windows/ 对话框、错误报告、VRM转换窗口
├── Runtime/ 运行时组件(EAUploader程序集)
│ ├── EAUploader.asmdef
│ └── Components/ EAUploaderMeta、EAUploaderOutfit、AvatarTagComponent
└── .vpm/, .github/ 用于生成和发布VPM仓库

程序集


程序集位置平台内容
EAUploader.EditorEditor/EditorEAUploader本体。UI、物品管理、编辑工具、上传、公开API
EAUploaderRuntime/全部添加到Avatar上的组件

EAUploader.Editor定义了以下Version Defines。

符号包条件
HAS_VRMjp.pokemori.vrm-converter-for-vrchat41.1.0及以上
HAS_AAOcom.anatawa12.avatar-optimizer1.7.0及以上
HAS_MAnadena.dev.modular-avatar1.9.0及以上

EAUploader(Runtime)在存在VRChat SDK - Avatars(com.vrchat.avatars)时定义VRC_SDK3A。

命名空间


命名空间主要类内容
EAUploaderEAUploaderCore、EAUploaderEditorManager、EditorRegistration、EAUPluginAttribute、AvatarUploader、LanguageUtility、T7e、Config启动、编辑工具注册、上传、多语言支持等核心功能
EAUploader.CustomPrefabUtilityManagedPrefabs、PrefabManager、PrefabInfo、TagManager、PrefabPreview、ShaderChecker、Utility、VRMImporter管理用Prefab Variant、元数据、标签、预览图、着色器检查、VRM转换、迁移、删除
EAUploader.UIEAUploader、ThemeUtility主窗口、界面切换、主题
EAUploader.UI.AvatarListMainAvatar列表(内部)
EAUploader.UI.SetupMain、ViewpointPositionEditor编辑界面和视点位置编辑器
EAUploader.UI.Setup.EditToolsEditToolModal、EditToolSession、ToolModalFrame、EditToolUtility等内置编辑工具及其通用基础(内部)
EAUploader.UI.UploadUploadForm上传表单(内部)
EAUploader.UI.ModalsImportModal、SettingsModal、ClothSettingModal、TagFilterModal、TagSettingsModal、PrefabPreviewModal等窗口内显示的模态窗口
EAUploader.UI.ComponentsModal、ToastManager、ShadowButton、MaterialIcon、HelpButton、DropdownFieldPro、Preview等自定义UI组件
EAUploader.UI.WindowsDialogPro、Logger对话框、错误报告、日志输出
EAUploader.Editor.APICoreAPI、LanguageAPI、UploadAPI公开API
EAUploader.Editor.Plugin.APIPluginAPI公开API(扩展功能注册)
EAUploader.Editor.Prefab.APIPrefabAPI、PrefabPreviewAPI、ShaderAPI、PrefabUtilityAPI、VRMAPI公开API(预制体操作)
EAUploader.Editor.Resource.APIEAUResourceAPI、HelpButtonAPI、LinkAPI、MaterialIconAPI等公开API(样式、UI组件)
EAUploader.ComponentsAvatarTagComponent、EAUploaderMeta、EAUploaderOutfit运行时组件

EAUploader.Editor.*.API是供外部工具使用的公开API。它是对内部实现(EAUploader、EAUploader.CustomPrefabUtility)的轻量封装。详情请参阅”API参考”。

类之间的关系


主要类之间的关系如下。

EAUploaderCore ([InitializeOnLoad])
├── EAUploaderEditorManager ...... 注册并保存编辑工具(EditorRegistration)
├── ShaderChecker ................ 检查预制体的着色器
├── PrefabManager ................ 管理用Prefab Variant的列表(PrefabInfo)和元数据
│ ├── ManagedPrefabs ........... 创建、复制、定位Variant
│ ├── TagManager ............... 标签和标签分组
│ └── PrefabPreview ............ 生成并保存预览图
└── UI.EAUploader(主窗口)
├── UI.AvatarList.Main ....... Avatar列表
├── UI.Setup.Main ............ 编辑界面(编辑工具列表、物品信息)
│ └── UI.Upload.UploadForm → AvatarUploader → VRChat SDK
└── modal / toasts ........... 通用模态窗口和通知

各界面共享EAUploaderCore.selectedPrefabPath(所选物品的路径)。

处理流程的详细内容请参阅”编辑器”。