生词解释
巨具:就是指高端,大器,上档次的工具
工作流:workflow的汉化
背后的故事
先前写了一篇文章,叫游戏引擎不仅是代码,更多的是完善的工具 而我们日常开发中所指的工作流(workflow)就是指 完善的工具集+使用这套工具集的开发流程,在前一篇文章中,我主要提到了Unity3D这种通过组件式解耦编辑器与项目需求,以及通过Shell(为了描述简单,我们在此姑且把Python也归类到Shell中)来免除一些重复性的劳动,通过Shell与命令行工具(许多工具都提供了command line模式,包括我们熟知的Unity3D),可以将强大的工具,利用得更为强大。
而今天,我想要说的,却不是Shell,Shell的使用在项目中是在所难免的。今天想要介绍的,是一种借助现存工具的输出来满足自己的需求,从而避免投入编辑器的开发。说到这里,可能大家第一时间想到的,就是为一些现存的编辑器开发插件。 这当然是首当其冲的策略,通过开发插件,我们就可以满足自己的需求,同时也不需要从头去开发编辑器。 但并非所有的工具,都支持插件开发。 所以,对工具输出的格式进行二次加工的方法,在许多时候,也能派上大用场。
yED Graph Editor
首先要说的是这个yWorks提供的 yED Graph Editor 它提供了一套绘制流程图的操作界面,可以十分方便地画出流程图。 试想,如果我们要为项目中开发一个描述状态机的东西,然后让策划根据自己的需求进行连线,最终转化为程序能够识别的指令。 这样在逻辑开发中,策划们就可以在程序提供的指令和条件集下,进行逻辑部分的调整,且十分直观。 (PS:yED只是一个引子,如果你要使用其它一些流程图或者UML工具,也是可以的,在游戏编程精粹上有提到使用UML构建流程图工具的方法)
很遗憾的是,yED并未提供插件扩展能力,这使得我们的希望受阻了,几乎破灭了。可是,通过对yED保存的数据分析,我们可以很容易地找到规则,因此,我们可以写一套解释这个输出的工具,从而顺利地转化为自己的需求。
其实做到上一步,已经很满足需求了,只是,基于XML的解析可能会在数据加载时占用大量的CPU时间,如果你真的是觉得无法接受的话,那python大神就可以再次出场了,我们写一个简单的脚本工具,将数据转化为更直观,易用的数据即可。
Flash CC
提到Flash,可能大家都不莫生吧。在闪客动画领域,Flash MX 2004版开始,就已经争霸世界了。 flash player90%+的用户渗透率,以至于后来页游的兴起,也以它作为主要平台发展。但FLASH并不仅仅是可以作为页游和动画的工具。如果你愿意,它可以作为你强大的2D界面编辑器,2D动画编辑器。 因为FLASH CS支持插件开发,同时gameswf开源库也为C++中解释swf成为了可能。 基于gameswf的优秀框架是很多的,如果你不愿意去踩gameswf的坑的话。
在这里,我不推荐大家使用gameswf这样的爆力破解方式对swf进行解析。取而代之的是,我们使用另一种方式,即配置输出。 FLASH CS仅作为一个编辑器工具,我们为其开发插件,使之可以提供我们的特殊编辑需求,同时能够输出我们想要的数据。
界面(GUI):
FLASH在动画和层次编辑方面是很优秀,我们可以通过对FLASH CS进行扩展,写出一套UI控件,这套UI控件,最终可以序列化到配置文件中。 而不管我们采用何种引擎,是cocos2dx也好,是unity3d也好,还是自己的引擎也好,只要我们引擎中,能够解析这套配置文件,并且能够提供一个运行时来驱动这套数据。 那我们就成功了。 在早期的游戏引擎开发中,许多公司都自己DIY了一套UI库, 并且提供了一个比较破的UI编辑器。 而实际上,通过现成的FLASH(或者不是FLASH,但目前我没有发现更好的),对其进行扩展,不仅工具能够对美术十分友好,同时免除了工具的维护。 而仅仅需要维护少量的插件代码即可。
如果想要一个参考,那这个针对cocos2dx的FLASH UI编辑器可能带给你灵感,它是完全开源的 http://blog.csdn.net/ab342854406/article/details/37669321
动画
FLASH在动画领域可以说是首屈一指,如果是2D特效,使用它的关键帧加矢量动画功能,可以用很少的资源做出非常漂亮的效果。 在这方面,dragon bones可以说是将这个功能发展得很好。 dragon bones目前已经支持多种语言和引擎的运行时。
地址在这里:http://dragonbones.effecthub.com/
Unity3D
提到Unity3D,可能许多同胞们会赞叹它的IDE是如何的NB,不仅可以快速构建原型,还能够很容易地扩展它的编辑器,添加菜单,按钮,面板都不用说了,更能很容易地改写输出……
等等……。有没有发现‘……很容易地改写输出……’这句话。 没错,正是因为这个特性,使得UNITY3D不仅可以作为一个引擎来开发你的游戏,它可能作为一个通用的编辑器,与你的游戏引擎结合,从而得到你想要的数据。
多的就不必说了,我也是偶然听群中朋友提起,他们是使用UNITY3D来当编辑器,但他们引擎是cocos2dx. 很多人笑他们奇葩。 但大笑过后,有没有长见识呢?
就这样愉快的结术吧
能够作为通用工具,并且在此之上构建出自己的工作流的工具彼彼皆是。 yED,Flash,Unity只是三个代表,一个是开源的,一个是不开源但能开发插件的,一个是十分流行且强大的,强大到你觉得用它的工具就得用它的引擎的。
总之,因为这些工具都是久经考验,且有专门组织维护,在它们的基础上构建自己的工作流,既省心,又省时,且稳定……。