Box2D篇:碰撞关系可视化编辑器
前言
我们在游戏中难免会有碰撞检测然后进行处理这一需求,那么,错综复杂的碰撞关系无疑就成了一大设计难点,规模和数量少点还好说,直接写在代码即可,规模一大,就需要借助excel的帮助下,但是也免不了使用true/false作为标识,在修改,拓展的时候麻烦,在读取数据的时候会造成不必要的空间浪费。(我明明没可能和这个东西碰撞,为什么还要单独给他一个bool字段呢?)。所以我就想着,能不能做个东西,稍微缓解一下这个问题,于是就有了今天这篇文章。
相关知识点
- Node_Editor_Framework,开源地址:https://github.com/Seneral/Node_Editor_Framework
- Odin相关特性
- Bson序列化反序列化数据
正文
先放一张编辑器图片
这就是使用了Node_Editor_Framework
的编辑器,我们可以看到,在里面对不同的碰撞体进行了分组(分类)操作,然后根据需求进行连线即可。 至于数据的处理,我提供了很多一键傻瓜式按钮,只需要点一下就行。
创建数据
首先是Create Group,此操作将会创建一个Group,所有在此Group中的结点都会被打上相应的标签,方便分类。 然后是英雄数据碰撞结点,创建一个英雄相关的数据结点 然后就是已经提供好的预制件,包含了游戏中最常用的碰撞标识 这样的数据创建方式,将会把空间消耗节省到最低,需要哪个创建哪个
编辑数据
首先是数据结点本身的数据编辑,这个数据也就是将被序列化反序列化的数据,老规矩,单独做了一个数据类型来承载数据
然后是碰撞关系的编辑,很简单,只需要在配置好相应结点数据的前提下将想要产生碰撞关系的两个结点进行连线即可,这些碰撞关系数据也会被序列化反序列化
删除数据
删除碰撞关系也是必要的需求,本来我想着直接点击曲线进行删除,但在项目复杂到一定程度后,碰撞关系也会复杂到一定程度,也就意味着这些贝塞尔曲线将会乱如麻。 所以我又想出一个方法,在每个结点中,提供删除方法,例如:
这样就可以避免在错综复杂的曲线中感到被水淹没,不知所措。
保存数据
提供了三个按钮
点击即可。。。
生成代码
只做完这些是不够的,为了方便,我还做了一个代码生成工具
大体流程是,读取二进制数据文件,依据Group来对switch进行小分类,再对具体的碰撞ID进行switch case 有效减少逻辑出错的几率,并且避免了大量不必要的case,显著。。。好吧,略微提升了一点性能,但是这一点性能将会在激烈的团战中被放大,下面是一个自动生成的类(仅做示例用)
然后就可以根据情况增加逻辑代码了
总结与感悟
目前为止,我做利用Node_Editor_Framework了三个可视化编辑器,本着以完全脱离Excel的主旨进行工具开发的我开始察觉到另一个问题——关联数据的直观性
,这个特性的不友好算是编辑器拓展中的一大短板。 具体表现为:在可视化编辑器中,对于不在当前界面的数据的查找比较麻烦,例如:现在我正在编辑碰撞关系,里面需要用到所引用的碰撞体ID,这个ID具体数据在另一个编辑器中,就需要打开另一个编辑器,那么,如果还需要一个技能ID呢,就要再打开技能编辑器。。。 解决办法呢?我们就需要回到最原始的方法——Excel。 没错,就是Excel,Excel中的当前sheet数据非常直观,但是对于树状或者图状的数据关系编辑又显得力不从心(策划大佬可无视) 所以,我想着自己为每个可视化编辑器配置一定的导出规则,将可能与其他编辑器相关联的数据导出为xlsx,这样就可以弥补上可视化编辑器这一短板。 嗯,已列入开发计划。