(编辑器的三大问题)
-
编辑器是什么?
编辑器是人机交互的界面, 数据的可视化操作,工作流。 -
编辑器为什么?
通过编辑器的及时反馈,游戏开发者能够快速验证想法,高效地生产内容,直观地优化调整效果。 -
编辑器怎么办?
一直以来, 实际的项目对于是否需要定制编辑器有不同的看法,
这种看法认为,编辑器的制作本身是重度的,为游戏各个系统定制编辑器是不能接受的工作量。
所以,问题关键是, 虽然,
编辑器快速制作游戏
如何快速制作编辑器
本文的探讨制作编辑器的思路。
-
数据
刚刚我们提到编辑器是什么,本质的只有一点,编辑配置数据。
我们考察下常用的数据配置,- 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>


稍等动画播放
网友评论