撰写了文章 更新于 2017-12-15 18:01:16
【弹幕程序科普计划】 第二篇 【弹幕游戏制作工具概述(下)】
【弹幕游戏制作工具概述(下)】
上次我们简单介绍了一些通过调用DirectX来制作游戏的方法,无论原生DX还是托管DX,性能都在同一层面,易用性方面稍有差异。
下面来看一下各种游戏引擎的情况:
1.东方弹幕风
日本大多东方同人STG都使用了这个引擎。作为现在最成熟的同人弹幕引擎之一,东方弹幕风已经封装好了大部分东方原作的功能,包括敌机、子弹、符卡、各种特效、菜单、甚至是最简易的自机、Replay功能,可以通过编写脚本来制作游戏,支持bgm区间循环。不过现在还没有国人使用弹幕风制作出完整作品。一方面由于弹幕风帮助文档翻译不完全,另一方面弹幕风的效率一直为人诟病。几乎所有弹幕风制作的同人STG在高难度下都无法全程稳定在60fps,这一点也比较遗憾。我这里实际测试情况,同屏弹量超过4000以后帧率会明显下降(见下图)。有两点要说明一下,一方面这里测的仅仅是弹量,发生消弹时同屏物体会翻倍,所以游戏里同屏实际能容纳的弹量肯定在2000以下;另一方面,测试中并没有关界面、自机及判定逻辑,所以测试结果不能和上次SlimDX的结果直接比较。
代表作品:《东方梦终剧》、《东方求霖人》、《东方魔宝城》等(少说几十作)
优点:标准的东方弹幕游戏模板,可以实现大部分原作的效果
缺点:效率较低,帮助文档翻译不全
2.LuaSTG
luastg是国人制作的弹幕游戏引擎,使用C++及DirectX底层,用lua语言编写脚本,包含一定程度的可视化编程界面,还包含有HGE引擎的粒子效果。由于是C++和DirectX底层,其显示效率比弹幕风要高不少,加上一定程度的可视化界面,其易用性也高于弹幕风。具体性能情况,我这里测到情况是同屏6000子弹(见下图),测试中没有关背景、界面和判定,和弹幕风测试情况类似,但是硬生生高出了50%弹量。
功能方面,luastg中一样封装了敌机、子弹、Boss、符卡、关卡、背景、菜单、简易自机、Replay功能等主要元素,甚至曲线激光,支持bgm区间循环。但是luastg并没有完全覆盖东方原作的所有效果,比如缺少RenderTexture离屏渲染方法,类似正邪的屏幕翻转效果将难以实现。当碰到类似没有的效果,想仅通过脚本方法实现可能会遇到困难。
代表作品:《东方幻梦笺》
优点:标准的东方弹幕游戏模板,可以实现大部分原作的效果;一定程度的可视化编程界面;可以使用HGE引擎的粒子特效
缺点:碰到没有的效果时可能难以解决;
以上感谢E.S.C大大提供的关于弹幕风和luastg的情报。
3.HGE
一款经典的2D游戏引擎,自带粒子系统和粒子特效制作工具。虽然是2D引擎,但也可以制作3D效果,显示效率也不错。HGE使用的是C++编程,它主要还是一个DirectX的封装库,外带了一些工具,比如粒子工具,而其封装库本身和XNA的意思可能有点类似,不过封装得更到位一些。不过据说HGE是基于DirectX8的引擎,而我们先前所说的C++调用DX以及各种托管DX都主要指DirectX9,相比之下HGE会稍弱一些。具体测试使用了HGE引擎自带的示例程序,测试结果同屏显示物体能达到7500以上。
由于HGE不是专用的弹幕引擎,不包含自机、敌机、子弹、Boss、Replay等功能,其最大的作用还是提供画面描画、音频播放、输入采集这些方法,使用户不用去直接接触DirectX,避免一些麻烦。
代表作品:《东方花逐夜》、《战斗天邪鬼》
优点:用户不用去直接接触DirectX;包含粒子系统
缺点:据说不支持DirectX的一些高级功能,比如Shader
4.Unity3D
现在非常流行的游戏引擎,功能强大,用他制作2D的STG都有点杀鸡用牛刀。不过Unity强大的地方更多还是在3D方面,关于2D游戏的功能,这里简单先讲一下和制作STG比较密切的功能。Unity3D提供了非常现成的音频播放方法和输入采集方法,可以直接获取键盘信息。在最关键的画面显示方面,当使用Unity提供的Sprite进行2D画面描画时,我这里测到同屏显示物体数可以达到9000,虽然比不过直接使用原生DX或者托管DX的情况,但也非常可观了。
Unity3D支持DirectX11,不过由于引擎已经完全封装好,用户不需要去接触任何DirectX方面相关的东西,当然也不用去操心XP系统只能支持DirectX9之类的问题。
编程方面Unity3D中可以对物体挂载脚本,支持C#脚本和Java脚本,这使得编程比传统方法更加形象,但是也使得其和传统编程的感觉有一些差异。此外它也不是弹幕专用引擎,还是需要自己来实现弹幕游戏的各种功能。
此外,Unity3D还是跨平台开发工具,可以将游戏发布到Android、IOS、WebGL等多种环境。
代表作品:《幻想武勇传》
优点:功能强大,性能比较出色;用户不需要自己接触各种底层问题;支持跨平台发布
缺点:相对专用的弹幕引擎而言,需要自己实现的东西还是很多
关于Unity在3D方面的功能,我就稍微提一下。虽说STG基本是2D游戏,但是使用3D背景也是一种潮流。且不说《Astebreed》,那种太酷炫了,举个比较早的例子,比如《式神之城Ⅲ》,像这种虽然也是2D弹幕游戏,但是背景大量使用3D场景,3D运镜。如果万一你在这方面有想法的话,请果断使用Unity3D或UE4这样的大型引擎。要说自己用DirectX编3D功能有多麻烦,如果我这里举出深度缓存的设置技巧或者Shader之类的问题估计一大片人会听不懂,这里就讲个比较直观的问题。既然镜头需要进行运动控制,就不可避免的需要关键帧功能及补间曲线,光这种功能自己去做都会花费大量时间。虽说我在《弹幕音乐绘》中也大量运用了3D镜头,但那也是通过兼容MMD的镜头脚本来实现的。总之不推荐广大弹幕游戏创作者在3D方面耗费大量时间,如果有需要,优先使用3D引擎。
这里也稍微提一下GameMaker引擎。早几年也有尝试使用GM来制作STG的例子,但是出于GM性能所限,并没有一部比较完整的作品。而今出现了GameMaker Studio,提升了引擎性能,保留了引擎的易用性,甚至还增加了夸平台功能。这也为使用GM进行STG创作带来了一些新的可能性。这里并没有对它进行性能测试,不能给出结论性的意见,而且除了以上提到的各种工具,还有很多很多可以制作游戏的方法,比如Cocos2d-x什么的,WebGL什么的,甚至UE4什么的,这里不可能面面俱到。如果你有什么熟悉的工具要判断是否能用它来制作STG,最直接的方法就是进行一个性能测试,如果同屏显示物体数量在6000以上,基本都是没问题的。
以下还必须提一下CrazyStorm,简称CS。在国内,可能大家最熟悉的弹幕制作工具就是CS了,可惜的是它并不是游戏引擎,不能制作完整关卡,仅能制作弹幕效果。但是尽管如此,CS全可视化界面操作,不需要写任何代码,并且包含一种事件系统,足以实现大多数复杂的弹幕。我推荐初学弹幕制作的朋友都去玩一下CS这个工具,以便增加对弹幕原理的认识。此外,虽然CS本身不是弹幕引擎,但是它可以将弹幕保存为脚本文件,如果能在其他弹幕游戏引擎中兼容CS的脚本,调用CS的文件,也势必可以节省大量的工作。
顺带,CS本身是基于XNA3.1制作的,其显示效率也非常出色。
与CS类似的还有日本的BulletML,不过BulletML主要是弹幕脚本,并没有可视化制作界面。比较典型的应用BulletML脚本的游戏就是双子系列STG(参见永久社团采访)。
综上所述,可用于制作STG的工具很多,各有利弊。效率方面,直接调用DirectX的效率最高,Unity3D其次,HGE、luastg会再差一些,弹幕风性能最差。易用性方面,luastg、弹幕风这样的弹幕专用引擎最好,Unity3D、HGE这样的通用引擎其次,直接调用DirectX最麻烦。功能方面,Unity3D这样的大型引擎最强大,直接调用DirectX也很不错,反而是luastg、弹幕风这样的专用引擎,封装越好,功能也越局限。如果着眼于引擎潜力,可以选Unity3D这样的大型引擎,如果着重考虑易用性的话,可以使用luastg这样的弹幕专用引擎,如果苛求效率并且想学习DirectX原理,也可以用原生DX或者各种托管DX自己从零做起。
除了使用弹幕专用引擎外,无论通过什么方法,都必须自己完成弹幕游戏的各种功能,诸如判定逻辑、显示次序、Rep存储等等,即使是Unity3D也没有现成的音乐区间循环功能。因此,编写弹幕游戏程序是个系统工程,需要脚踏实地一步一步完成。对于想自己创作STG的爱好者,我不建议一上来就挑战完整6面关卡的制作,可以先从一个单关甚至一组符卡开始,然后慢慢完善。如果你打算做全6关的STG,并且不使用专用弹幕引擎的话,请准备好以年为单位的时间投入。从现有经验看,从初识DirectX到做完全6关游戏至少需要2年以上时间,如果使用Unity之类的引擎也许能将时间缩短半年,直接使用弹幕专用引擎大约可以再节省1年时间。换句话说,如果想在一年内做出完整作品,请使用弹幕专用引擎。当然以上时间基本都是按照业余制作的情况来算的,现在大部分同人弹幕游戏制作者也都是使用业余时间进行制作,要么白天要上班工作,要么学生要上课考试。如果能够全日制开发,以上时间当然会缩短。另外,以上时间并不考虑音乐、美术等素材制作的时间,全按使用免费素材情况考虑。总之,如果你已经踏上了弹幕游戏制作的旅程,我只想说,请坚持到最后。
在之后的文章我会对逐个介绍弹幕游戏程序编写中会遇到的典型问题,让大家对弹幕游戏有一个更深入的认识。为避开引擎差异影响,我会主要从原理角度,讲一些各引擎通用的知识。如果你打算使用专用弹幕引擎进行游戏创作,以后的文章可能对你帮助不大,但也可以仅从了解引擎原理的角度来看。
由于前两篇都在讲编程相关的工具,可能有相当一部分人之前毫无接触,会觉得不知所云。下次将介绍一个比较直观的问题——弹幕游戏中的物体种类及叠放次序,敬请期待。
注:上文中所有的弹量测试数据仅供参考。由于同屏物体数量和CPU主频关系密切,我这里主频不高,可能大家会测出更高的数字。以下附HGE和Unity3D的弹量测试程序,有兴趣的朋友可以自己试一下。这两个程序都未进行恒定帧率控制,请自行观察物体数量与帧率的变换关系。
HGE:
Unity3D:
汪汪仙贝 1年前
发布
Macyrate 1年前
发布