黑科技:用Unity编辑器+Cocos引擎开发3D MMORPG

2015.9.28 技术干货 by cocos

(以下内容依据Cocos秋季峰会演讲速记稿整理)

主持人王哲:

前面几个演讲人展示了不同的技术解决方案。

第一种是《三国之刃》用Flash完成所有动画、UI制作,然后用JSFL开发一个Flash扩展来做导出,最后到Cocos引擎里面解析播放。这种搭配方案非常流行,《刀塔传奇》、《火柴人联盟》也是使用这种方式。很多CP都有类似的方案,原理大同小异。

第二种是《像三国》,先在Maya里面烘焙好,然后在Cocos Builder里面让美术根据各种透视规律拼出三维的视觉效果来。

下面一个演讲环节的是真正的黑科技,我先不剧透,有请南京炉石CEO朱伟给我们分享一下怎么用Cocos开发一个完整的3D的MMORPG。

演讲者朱伟:

我是南京炉石CEO朱伟,下面由我来跟大家一起分享一下勇于Cocos开发一款3D MMORPG整个的过程和经历。说到3D MMORPG的第一印象可能就是:Cocos能玩这个吗?下面我用真机给大家演示一下。

(编者注:此人在全场大屏幕上聚精会神、旁若无人地玩这个游戏至少5分钟,从主城进推图,打穿一个副本到boss战斗结束。不过大家看得津津有味。小编邻座的听众边看边感慨说:”看来我们对Cocos的理解还是太浅了”)

这是我们这段时间里用Cocos 3.8开发出的3D MMORPG试玩的版本。还在研发中,这个版本中间还有各种各样的BUG,但是总体上而言,这里面开发3D MMORPG游戏所用到的基本要素,在整个游戏里应该说都体现出来了。

下面具体跟大家分享一下我们在开发过程中所用到的功能模块和流程。

这个是Cocos引擎在3D功能开发上的历程,我们应该说在最早的加入3D功能版本开始就尝试着用Cocos开发一些3D游戏;到了3.5之后,Cocos加入了3D粒子功能;后面又陆续加了一些功能,比如3.7的导航位置支持,到了3.8里的光照这些功能。到了3.8之后我们感觉实际上Cocos的开发一款重度的3D MMORPG的要素都具备了。唯一感觉比较欠缺的是没有工具。

这个是我们游戏分解出来的3D的功能模块清单。第一块是模型与动作,这里面涉及到一些主角的模型和一些动作,特别是分解动作的因素。第二块是整个游戏的特效。这个特效分成四种,一是粒子特效,还有一种是3D的拖尾效果用来做刀光,第三种是模型的UV动画,最后是2D的面片动画。第三块场景。包括场景组合、地形、光照和天气效果等。最后是常用到的基本的功能,比如说寻路用的网格导航功能和天空盒的功能等等。

首先跟大家讲一下模型动作这一块的基本的制作过程。模型动作应该是比较简单的,首先就是说通过3DMax软件建模,注意手游上面角色面数。建完了之后就导入出去FBX,动作和模型是分离出来,便于管理。接着输出C3B文件,放入引擎。我们自己在Ccoos Simulator里面自己改了一些代码,加载c3b文件,使其可以做预览的工具。这里面有很简单的功能,就是把模型调进来,播放一下基本的动作。最大的好处是我们的美术做出来之后实际上希望在第一时间在引擎里看到效果,这个工具完成了美术最基本的要求。

接着是3D的粒子和编辑。现在Cocos用的是第三方的3D粒子编辑器Particle Universe。著名游戏《火炬之光》里面所有的3D特效都是用这款软件制作出来的。同样我们通过这个软件制作出来的自己游戏里的3D粒子效果,同时自己也基于cocos引擎做了很简单的粒子的效果预览工具,实际就是放大、缩小、旋转这些功能提供给美术。

我们把模型、动作,特效都做出来之后,怎么把它们拼接起来呢?我们自己做了比较简单的工具,通过这个工具我们可以把Particle Universe做好的3D粒子放进来,把动作和模型也放进来,可以旋转它,可以调整三者之间的位置,可以播放和预览一下。这个功能最后做出来的效果还是比较满意的。虽然简单,但是非常的实用。

黑科技来了:场景的制作。这一块我们花了很多时间在研究Cocos引擎上怎么做场景。我们最早也写了一些场景编辑器,感觉效果不是很好。后来我们考虑到一个这种的方案,就是通过3DMAX制作单个场景所要的要素,然后通过Unity为组合场景,然后导出Cocos支持的格式。这个就要美术去学习简单的Unity基本的操作,这里面也有一个基本的设计过程,首先是把基本的要素导进来,通过Unity来设计场景。

做完了之后,觉得这个场景OK了,下面一步就是输出到Cocos引擎上来。第一步首先是要把光照贴图做出来,Cocos引擎在地形和建筑之间放上贴图的话,需要用两张,而Unity是合在一起,所以我们要把地形的光照贴图和模型的光照贴图分离出来。

右边最上面是Unity导出来的全景的光照贴图。下面这一个是地形本身的光照贴图。第二步就是要把建筑的光照贴图重新烘焙一遍。

在重新烘焙所有建筑光照贴图的时候,务必注意要把原来制作的地形全部删掉,否则的话Unity默认烘焙是全景的。

同样我们需要把我们的光照贴图转换成Cocos引擎支持的支持。光照贴图得到了。下一步就是:场景怎么办?场景在Unity有自己的格式,但是没关系,通过写个插件把它导出成JSON格式,然后再到Cocos引擎里加载。做完了之后,虽然实现了效果,但是JSON文件不能动它,一动的话,就错误了。这种方式还不是很理想,后来想到另外一个方案,因为Unity可以通过 Collada (DAE) Exporter可以导出成DAE格式,再通过Blender导出FBX的格式。

解决了场景之后,我们同样也做了简单的预览工具,可以预览一下我们导出场景的基本状态。

接着就是我们要把地形导出来,Unity有一个可以把地形导出Terrain高度图和地形图的功能,这个拿过来用就可以了。

最后我们得到了地形图、高度图、地形的贴图加上场景的贴图等,最后通过代码就可以组合起来,这个代码Cocos引擎有案例,可以按照原来的代码格式拼接起来就可以了。但是拼接的过程中有一个关键点,就是大小的问题,因为本身Unity有它的单位,而Cocos引擎有自己的单位,所以我们的做法很简单,第一就是说在Unity一定要计划好比例,在Cocos引擎按照同样的办法去做就可以了。这方面不用做更多的工具的放大。通过代码的组合,实际上就组合成了我们刚才看到的通过手机演示游戏里庞大的场景。后面还有一些其他的功能,这些功能Cocos官方里都有,我就不一一细说了。

完成后的在手机里运行起来主城的效果:

战斗技能效果

讲到现在,可能大家心里面有一个疑问,用了这么多Unity为什么不直接用它呢?

我们团队接触Cocos引擎有两年多,而且用Cocos开发了很多的产品。一方面跟Cocos的本身有一定的感情。第二,整个团队的磨合也相当不错,所以贸然去学习Unity的风险很大。当时我们就想,既然行业里面很多人用Flash做动画,然后用Cocos引擎渲染,那么为什么我们不用Unity做场景,然后用Cocos引擎渲染呢?Unity只作为编辑器在美术团队使用,技术人员不需要重新去学习,这样既有了编辑器的方便,又有享受开源的好处。所以基于这些原因,我们最终还是通过Unity编辑器 + Cocos引擎3D功能这样组合的方式,得到了一个比较满意的结果。

当然还有一些其他的因素,如像今天大家在谈论的手机页游。王哲他们早上已经演示了3D游戏在腾讯浏览器里面运行。我觉得3D在手机页游上最终会有很好的表现。我们这个游戏是用Lua写的,什么时候Cocos的Lua Runtime能进到浏览器里面,我们游戏就能跑在里面。

我的分享就到这里,谢谢大家!