Skip to content

Commit

Permalink
[docs] 编辑器架构 完工
Browse files Browse the repository at this point in the history
  • Loading branch information
Italink committed Jun 29, 2023
1 parent 4f71c40 commit bbad8dd
Showing 1 changed file with 26 additions and 23 deletions.
49 changes: 26 additions & 23 deletions Docs/02-EngineTechnology/1.编辑器架构.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,7 @@ comments: true

# 编辑器架构

笔者近几年开发中的绝大部分代码积累,都花在了引擎编辑器上,在此处罗列一些心得,给大家一些参考。

笔者接触过一些自研引擎和软件,只要涉及到自研引擎 **编辑器相关** 的 话题,那下面基本就是骂声一片~~~

究其原因,无外乎:

- 界面简陋
- 用户体验差

而大部分开发者的想法是:

- “并不是不能做好,只是要做好得花很多时间,会很麻烦,没必要浪费时间,将就能用就行了。”

当然,这种想法对一些小工具来说无可厚非,但是对于一些高频使用的工具,如果依旧是这样的态度对待,那对使用人员来说,简直就是一场痛苦的折磨。。。

笔者在Qt上有数十万行代码的积累,但在Unreal Engine上只使用了数万行的代码,却出做出了更多更完备的功能,并且在Unreal Engine中,界面风格和用户体验的需求是非常容易满足的,这很大程度得益于 Unreal Engine 的 “基础建设” 。

文章从以下几个维度去分析怎么去做好编辑器:
笔者近几年开发中的绝大部分代码积累,大多花在了引擎编辑器上,在此处罗列一些心得,给大家一些参考,文章会从以下几个维度去分析怎么去做好编辑器的设计:

- 设计美感
- 用户体验
Expand Down Expand Up @@ -54,7 +37,7 @@ comments: true

UI设计师大多专注于于UI效果,因此让他们去制作一个适用于代码架构的组件化设计往往是比较困难的,所以关于这方面的内容,需要开发者去思考,讨论,引导,并学会说 "不"。

关于UI设计上的一些概念和风格,可以参考
关于UI设计上的一些概念和风格,这里有更详细的参考

- [All Time Design - UI Style Guide](https://alltimedesign.com/ui-style-guide/)

Expand Down Expand Up @@ -165,9 +148,9 @@ GEditor->EndTransaction(); //结束事务

由于UObject的GC可以让对象延迟回收,这也使得我们无需考虑操作对象生命周期的问题,关于它的实现原理,详见:

- [UE4 编辑器(UObject)的Undo撤回系统Transactional](https://blog.csdn.net/qq_29523119/article/details/96778797)
- [CSDN - UE4 编辑器(UObject)的Undo撤回系统Transactional](https://blog.csdn.net/qq_29523119/article/details/96778797)

关于状态保存,相信大家都遇到过程序突然崩溃或者电脑突然关机的情况,这个时候如果没有及时的保存工作数据,几小时的精力就得打水漂了,而这个时候,如果程序提供保存或备份的辅助手段,关键时刻能帮上大忙~
关于状态保存,相信大家都遇到过程序突然崩溃或者电脑突然关机的情况,这个时候如果没有及时的保存工作数据,几小时的工作成果就得打水漂了,而这个时候,如果程序提供保存或备份的辅助手段,在意外来临时,就能救自己一命~

而这种手段一般是指自动保存,除了让用户手动点击去保存工作数据,我们还可以在特定时机去自动保存或备份工作数据,就比如:

Expand All @@ -187,7 +170,22 @@ Meta思维在现代工业软件开发过程中可以提供极大的便捷度,

假如将写代码比作盖房子,我们考虑的是如何盖好房子,那在Meta层面,我们考虑的是如何构建一台自动盖房子的机器,Meta思维让我们从一个工程问题转换成了另一个,虽然难度有所上升,但只要方法得当,它能带来无可比拟的收益。

在游戏引擎中,基于Meta思维的架构比比皆是,而在这其中最有用最强大的无疑是 —— **基于反射的编辑器架构**
笔者接触过一些自研引擎和软件,只要涉及到 **自研引擎编辑器** 相关的话题,那下面基本就是骂声一片~~~

究其原因,无外乎:

- 界面简陋
- 用户体验差

而大部分开发者的想法是:

- “并不是不能做好,只是要做好得花很多时间,会很麻烦,没必要浪费时间,将就能用就行了。”

当然,这种想法对一些小工具来说无可厚非,但是对于一些高频使用的工具,如果依旧是这样的态度对待,那对使用人员来说,就是一场痛苦的折磨...

笔者在Qt上有数十万行代码的积累,但在Unreal Engine上只使用了数万行的代码,却出做出了更多更完备的功能,并且在Unreal Engine中,界面风格和用户体验的需求是非常容易满足的,这很大程度得益于 Unreal Engine 的 “**基础建设**” 。

在游戏引擎中,基于Meta理念的架构比比皆是,而在这其中最有用最强大的无疑是 —— **基于反射的编辑器架构**

相信大家都见过一些参数调节面板,比如:

Expand Down Expand Up @@ -256,10 +254,15 @@ public:
};
```

为了能够处理属性的树状层次结构,还会派生`IPropertyHandle`去处理层次关系组织的多态:
为了能够管理属性,还会派生`IPropertyHandle`,它主要用作:

- 使用多态处理层次关系的组织。
- 作为属性设置和获取的唯一入口,加入撤销重做,变动通知,编辑器同步等相关功能。

``` c++
class IPropertyHandle{
void SetValue(Variant var);
Variant GetValue();
virtual Widget* GenerateNameWidget(); //生成属性的名称控件
virtual Widget* GenerateValueWidget(); //生成属性的值控件
virtual void GenerateChildrenRow(DetailsBuilder* builder); //生成属性的子行
Expand Down

0 comments on commit bbad8dd

Please sign in to comment.