编辑器的设计

(编辑器的三大问题)

  1. 编辑器是什么?
    编辑器是人机交互的界面, 数据的可视化操作,工作流。

  2. 编辑器为什么?
    通过编辑器的及时反馈,游戏开发者能够快速验证想法,高效地生产内容,直观地优化调整效果。

  3. 编辑器怎么办?
    一直以来, 实际的项目对于是否需要定制编辑器有不同的看法,
    这种看法认为,编辑器的制作本身是重度的,为游戏各个系统定制编辑器是不能接受的工作量。
    所以,问题关键是, 虽然,
    编辑器快速制作游戏
    如何快速制作编辑器


本文的探讨制作编辑器的思路。

  • 数据
    刚刚我们提到编辑器是什么,本质的只有一点,编辑配置数据。
    我们考察下常用的数据配置,

    • key_value类型:ini
    • 关系数据类型(二维表):excel(csv), db,
    • 结构化数据类型:(xml, json, lua table),
    • 特定的文件格式,(这点我们不谈,有专门化的编辑器),

    以上,无论是 key/value,二维表,其实可以用带约束的结构化数据表示,而结构化数据通常使用树状结构。

  • 功能
    我希望实现编辑器的插件化,这样一个新的编辑器需求,可以通过添加插件提供新的编辑器功能,

    • 公有功能抽象,
      • 数据关联UI,
      • 可配置的菜单项,
      • 地图物件的表示(相关的属性表示),
    • 领域功能插件化,
      • 最小化插件接口
      • 插件间依赖关系,有些插件需要另一些插件才能工作,
      • 运行热加载

    其实unity几乎就是满足以上需求的一个编辑器,unity通过component提供最小化插件接口,unity通过脚本的方式增强功能,asset store因此有这样多好用的工具。但毕竟限制在unity engine格式,并非通用。

    不同的是,我希望提供一个轻量级但稍“通用”化的编辑器。
    * 它可以针对最一般的配置文件编辑;
    * 它用于验证简单化的逻辑模型,以象素化的手段,去表示游戏世界测试;
    * 支持更多插件类型, 比如说lua, c++插件


如何去实现这样一个编辑器,
我希望能从unity得到更多启发。

  • 数据关联UI,
    通过反射得到数据类型,根据数据结构类型,生成映射的data UI,

  • 可配置的菜单项,
    提供数据项的 attribute, 比如说标记,为UI项,属性限制等。让我们来看看unity的例子
    // Javascript example
    @script AddComponentMenu ("Transform/Follow Transform") //attribute标记
    class FollowTransform extends MonoBehaviour {
    }

      // C# example:
      [AddComponentMenu("Transform/Follow Transform")] //attribute标记
      public class FollowTransform : MonoBehaviour{
      }
    
  • 2D化的地图表示
    很多游戏客户端3D场景,但服务端游戏的地图数据仍然是2D,

  • 插件最小化接口,类似于unity的component
    初始化,循环,退出,
    进入编辑状态,离开编辑状态,
    public class Component
    {
    public virtual void editorAwake()
    {
    //...
    }

          public virtual void editorSleep()
          {
              //...
          }
          
          public virtual void editorInit()
          {
              //...
          }
    
          public virtual void editorUpdate()
          {
              //...
          }
    
          public virtual void editorExit()
          {
              //...
          }
      }
    
  • 插件加载
    c#对实现编辑器提供了非常好措施,c#反射可以进行数据的动态绑定,可以通过运行时加载类,也可运行时生成新类,因此能够做到运行时加载 c#脚本,dll, 生成数据绑定,
    理论上应可以做到 支持lua脚本, c++动态库(大雾)。


9.9更新, 已经实现了一个原型,我把它叫做

编辑器的设计_第1张图片
minity.png
编辑器的设计_第2张图片
9.gif

稍等动画播放

你可能感兴趣的:(编辑器的设计)