编辑器的设计

(编辑器的三大问题)

  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更新, 已经实现了一个原型,我把它叫做<minity>

minity.png
9.gif

稍等动画播放

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 离开一段时间回家看到阳台的植物已死去一半那片绿油油的薄荷不再生机勃勃那两盆长长绿萝黄得刺眼、焉得没神那盆小龙眼已经...
    向行阅读 271评论 4 3
  • 集市上熙熙攘攘,除了商贩,还有一些附近村庄的庄稼人带来自家地里种的瓜果蔬菜,希望补贴一些家用。 正在买菜的我被旁边...
    稼轩李德智阅读 581评论 2 8
  • 2017.9.1 晴 今天是开学的第二天,歆蕊早晨没等我叫她,自己就起床穿衣服了,洗刷完后,很听话的把早餐吃...
    lh慧儿阅读 113评论 0 0