前言
今年初发了一个节点编辑器分享,然而终究只是个炫酷的小玩具,完全无法初步投入使用。只是,就这样的小垃圾竟然有八百个人看,实在没想到。感觉我做得尚不够好,浪费了这八百人的时间,于是打算重置节点编辑器。
但完全地原创既不可能也没有必要,所以我将参考Blender的节点编辑器进行设计。当然,不会涉及到特别底层的东西,那不是我一人现在能完成的。
改造
现在我认为,至少对我而言,做一个好用、好扩展的节点编辑器,需要对以前编辑器进行三种改造:
命令化、序列化、泛用化。
命令化
把每一次操作都抽象成一条命令,如此便能支持撤销/重做的功能,同时将繁琐的处理原子化为一条条命令。在以前的编辑器里,做一个小操作就得牵扯很多。数据和表现没有好好分离开来,每个操作都纠缠在一起,每个函数里的参数越加越多。例如创建和粘贴在某一步里会用到同一个函数,然后又走向不同分支,如此这个函数就会越加庞大臃肿。

我做游戏的时候,深感到命令化的缺点在于时序没那么清晰,不知道哪个命令在什么时候处理。但对于工具来说问题不大。
序列化
这里的序列化,是要减少数据对ScriptableObject的依赖,它混乱的生命周期和序列化像迷宫和乌云一样困扰着整个项目。所有节点、图、端口、连接线等数据结构,将重新设计,支持独立使用Json或者其他通用格式进行存储。这样编辑器就能更好地掌握住数据本身。
序列化也支持更好地命令化。例如要恢复已经删除的节点,以及更优化的复制粘贴,不可避免地要存储一些数据。
泛用化
之前我是以Buff编辑器的思路来做的,于是为了“Buff执行”而做了许多妥协。而现在,我需要做一个更加泛用的编辑器,也就是重新设计数据流和编辑器结构。
比较显而易见的是图的执行逻辑这种涉及到核心的内容。Buff执行与对话演出可能是两种完全不同的思维逻辑。但“更多选择”往往意味着更多的配置项和学习成本,如何平衡是个重要问题。
文章版权归作者所有







暂无评论内容