184 lines
4.8 KiB
Markdown
184 lines
4.8 KiB
Markdown
|
|
# UI Editor
|
|||
|
|
|
|||
|
|
Unity 风格的编辑器 UI,使用 ImGui 实现,作为 XCEngine 游戏引擎编辑器的一部分。
|
|||
|
|
|
|||
|
|
## 简介
|
|||
|
|
|
|||
|
|
XCGameEngine UI 是一个仿 Unity 编辑器的桌面应用程序,提供场景管理、层级视图、属性检查器等功能。
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
- **渲染 API**: DirectX 12
|
|||
|
|
- **UI 框架**: ImGui
|
|||
|
|
- **语言**: C++17
|
|||
|
|
- **构建系统**: CMake
|
|||
|
|
- **依赖库**: DirectX 12 SDK
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
ui/
|
|||
|
|
├── src/
|
|||
|
|
│ ├── main.cpp # 程序入口
|
|||
|
|
│ ├── Application.cpp/h # 应用主类
|
|||
|
|
│ ├── Theme.cpp/h # 主题系统
|
|||
|
|
│ ├── Core/
|
|||
|
|
│ │ ├── GameObject.h # 游戏对象
|
|||
|
|
│ │ └── LogEntry.h # 日志条目
|
|||
|
|
│ ├── Managers/
|
|||
|
|
│ │ ├── LogSystem.cpp/h # 日志系统
|
|||
|
|
│ │ ├── ProjectManager.cpp/h # 项目管理
|
|||
|
|
│ │ ├── SceneManager.cpp/h # 场景管理
|
|||
|
|
│ │ └── SelectionManager.cpp/h # 选择管理
|
|||
|
|
│ └── panels/
|
|||
|
|
│ ├── Panel.cpp/h # 面板基类
|
|||
|
|
│ ├── MenuBar.cpp/h # 菜单栏
|
|||
|
|
│ ├── HierarchyPanel.cpp/h # 层级面板
|
|||
|
|
│ ├── InspectorPanel.cpp/h # 检查器面板
|
|||
|
|
│ ├── SceneViewPanel.cpp/h # 场景视图
|
|||
|
|
│ ├── GameViewPanel.cpp/h # 游戏视图
|
|||
|
|
│ ├── ProjectPanel.cpp/h # 项目面板
|
|||
|
|
│ └── ConsolePanel.cpp/h # 控制台面板
|
|||
|
|
├── bin/Release/ # 输出目录
|
|||
|
|
│ ├── XCVolumeRendererUI2.exe # 可执行文件
|
|||
|
|
│ ├── imgui.ini # ImGui 配置
|
|||
|
|
│ └── Assets/
|
|||
|
|
│ └── Models/
|
|||
|
|
│ └── Character.fbx # 示例模型
|
|||
|
|
├── build/ # 构建目录
|
|||
|
|
└── CMakeLists.txt # CMake 配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 构建方法
|
|||
|
|
|
|||
|
|
### 前置要求
|
|||
|
|
|
|||
|
|
- Windows 10/11
|
|||
|
|
- Visual Studio 2019 或更高版本
|
|||
|
|
- CMake 3.15+
|
|||
|
|
|
|||
|
|
### 构建步骤
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ui
|
|||
|
|
mkdir build && cd build
|
|||
|
|
cmake ..
|
|||
|
|
cmake --build . --config Release
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 运行
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 运行编译好的可执行文件
|
|||
|
|
.\bin\Release\XCGameEngineUI.exe
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
### 编辑器面板
|
|||
|
|
|
|||
|
|
#### 菜单栏(MenuBar)
|
|||
|
|
- 文件菜单(新建、打开、保存等)
|
|||
|
|
- 编辑菜单(撤销、重做等)
|
|||
|
|
- 视图菜单(面板显示/隐藏)
|
|||
|
|
- 帮助菜单
|
|||
|
|
|
|||
|
|
#### 层级面板(Hierarchy Panel)
|
|||
|
|
- 显示场景中所有游戏对象
|
|||
|
|
- 树形结构展示父子关系
|
|||
|
|
- 支持对象选择
|
|||
|
|
- 对象重命名
|
|||
|
|
|
|||
|
|
#### 检查器面板(Inspector Panel)
|
|||
|
|
- 显示选中对象的属性
|
|||
|
|
- 支持组件编辑
|
|||
|
|
- 变换组件(位置、旋转、缩放)
|
|||
|
|
- 材质组件
|
|||
|
|
|
|||
|
|
#### 场景视图(Scene View)
|
|||
|
|
- 3D 场景预览
|
|||
|
|
- 相机控制(平移、旋转、缩放)
|
|||
|
|
- 对象选择
|
|||
|
|
- 辅助工具(网格、轴心)
|
|||
|
|
|
|||
|
|
#### 游戏视图(Game View)
|
|||
|
|
- 游戏运行时的画面预览
|
|||
|
|
- 分辨率设置
|
|||
|
|
- 宽高比选择
|
|||
|
|
|
|||
|
|
#### 项目面板(Project Panel)
|
|||
|
|
- 项目文件浏览器
|
|||
|
|
- 资源组织
|
|||
|
|
- 搜索过滤
|
|||
|
|
|
|||
|
|
#### 控制台面板(Console Panel)
|
|||
|
|
- 日志输出
|
|||
|
|
- 警告和错误显示
|
|||
|
|
- 日志级别过滤
|
|||
|
|
- 清空日志
|
|||
|
|
|
|||
|
|
### 管理系统
|
|||
|
|
|
|||
|
|
#### 日志系统(LogSystem)
|
|||
|
|
- 分级日志(Info、Warning、Error)
|
|||
|
|
- 时间戳
|
|||
|
|
- 日志持久化
|
|||
|
|
|
|||
|
|
#### 项目管理(ProjectManager)
|
|||
|
|
- 项目创建/打开
|
|||
|
|
- 资源路径管理
|
|||
|
|
|
|||
|
|
#### 场景管理(SceneManager)
|
|||
|
|
- 场景加载/保存
|
|||
|
|
- 对象生命周期管理
|
|||
|
|
|
|||
|
|
#### 选择管理(SelectionManager)
|
|||
|
|
- 当前选中对象追踪
|
|||
|
|
- 多选支持
|
|||
|
|
|
|||
|
|
### 主题系统
|
|||
|
|
|
|||
|
|
- 深色主题(Dark Theme)
|
|||
|
|
- 可自定义配色方案
|
|||
|
|
|
|||
|
|
## 窗口布局
|
|||
|
|
|
|||
|
|
默认布局采用经典的 Unity 编辑器风格:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
+----------------------------------------------------------+
|
|||
|
|
| 菜单栏 |
|
|||
|
|
+----------+------------------------+----------------------+
|
|||
|
|
| | | |
|
|||
|
|
| 项目 | 场景视图 | 检查器 |
|
|||
|
|
| 面板 | | |
|
|||
|
|
| | | |
|
|||
|
|
+----------+------------------------+----------------------+
|
|||
|
|
| 层级面板 | 游戏视图 |
|
|||
|
|
| | |
|
|||
|
|
+------------------------------------+----------------------+
|
|||
|
|
| 控制台面板 |
|
|||
|
|
+----------------------------------------------------------+
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 依赖说明
|
|||
|
|
|
|||
|
|
- ImGui - 跨平台 GUI 库
|
|||
|
|
- DirectX 12 - 渲染 API
|
|||
|
|
- Windows SDK - 窗口管理
|
|||
|
|
|
|||
|
|
## 扩展开发
|
|||
|
|
|
|||
|
|
### 添加新面板
|
|||
|
|
|
|||
|
|
1. 在 `panels/` 目录下创建新的面板类
|
|||
|
|
2. 继承 `Panel` 基类
|
|||
|
|
3. 实现 `Render()` 方法
|
|||
|
|
4. 在 `Application` 中注册新面板
|
|||
|
|
|
|||
|
|
### 添加新组件
|
|||
|
|
|
|||
|
|
1. 定义组件类
|
|||
|
|
2. 在 `GameObject` 中注册组件类型
|
|||
|
|
3. 在 `InspectorPanel` 中添加属性编辑器
|