【预告】重制版节点编辑器

前言

今年初发了一个节点编辑器分享,然而终究只是个炫酷的小玩具,完全无法初步投入使用。只是,就这样的小垃圾竟然有八百个人看,实在没想到。感觉我做得尚不够好,浪费了这八百人的时间,于是打算重置节点编辑器。

但完全地原创既不可能也没有必要,所以我将参考Blender的节点编辑器进行设计。当然,不会涉及到特别底层的东西,那不是我一人现在能完成的。

改造

现在我认为,至少对我而言,做一个好用、好扩展的节点编辑器,需要对以前编辑器进行三种改造:

命令化、序列化、泛用化。

命令化

把每一次操作都抽象成一条命令,如此便能支持撤销/重做的功能,同时将繁琐的处理原子化为一条条命令。在以前的编辑器里,做一个小操作就得牵扯很多。数据和表现没有好好分离开来,每个操作都纠缠在一起,每个函数里的参数越加越多。例如创建和粘贴在某一步里会用到同一个函数,然后又走向不同分支,如此这个函数就会越加庞大臃肿。

混乱的示例
纠缠在一起的功能链示例

我做游戏的时候,深感到命令化的缺点在于时序没那么清晰,不知道哪个命令在什么时候处理。但对于工具来说问题不大。

序列化

这里的序列化,是要减少数据对ScriptableObject的依赖,它混乱的生命周期和序列化像迷宫和乌云一样困扰着整个项目。所有节点、图、端口、连接线等数据结构,将重新设计,支持独立使用Json或者其他通用格式进行存储。这样编辑器就能更好地掌握住数据本身。

序列化也支持更好地命令化。例如要恢复已经删除的节点,以及更优化的复制粘贴,不可避免地要存储一些数据。

泛用化

之前我是以Buff编辑器的思路来做的,于是为了“Buff执行”而做了许多妥协。而现在,我需要做一个更加泛用的编辑器,也就是重新设计数据流和编辑器结构。

比较显而易见的是图的执行逻辑这种涉及到核心的内容。Buff执行与对话演出可能是两种完全不同的思维逻辑。但“更多选择”往往意味着更多的配置项和学习成本,如何平衡是个重要问题。

© 版权声明
THE END
喜欢就点个赞吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容