写在海姆达尔完成时

原文地址
2018年7月6日,海姆达尔在App Store和TapTap同步上线,又经过了一个星期的优化和BUG修复,现在包体基本稳定,可以说整个游戏的开发终于告一段落。这里是游戏的App Store链接TapTap链接

回顾三年时光,感受颇多,收拾一番心情,决定从程序的角度给这个项目做一个总结,于是有了这篇文章。

为什么做了三年?

我想这是很多人想问的第一个问题。其实答案很简单:因为我们犯了很多错误。立项初期,我们只是想做一个讲故事的游戏,对游戏的想法也很简单。随着开发的深入,我们加入了跑酷、解谜、收集等游戏要素,游戏的复杂度不断提升,最终到达了一个一度让我们无法驾驭的程度。在那段时间里项目的推进速度变得非常慢,慢到甚至一个月都无法完成一个关卡的制作。与此同时,团队的规模却已经从开始的4人扩张到了9人。当我们意识到项目正向着不可控制的方向越走越远的时候,我们痛下决心,裁掉了项目组大部分人,留下了5个人,并将游戏的规模砍到了我们能够控制的程度,而此时已经是2016年底,可以说从那时起项目组才进入正轨,并在后来的大约一年半的时间里完成游戏所有内容的开发。

为什么使用cocos2d-x

这个问题也是不止一次的被人问起。在我看来,不管选择什么引擎,只要能让我快速的实现需要的功能,完成项目开发即可。正如上面所说,项目在立项初期,并没有想做成现在大家看到的这个样子,当时整个游戏的功能需求很简单,cocos引擎足够应付,再加上引擎体量较小、开源便于修改,所以也没怎么多想,便确定用cocos进行开发。

开发过程中踩了哪些坑?

总的来说还是踩了不少坑,这里就简单的提几个我印象比较深刻的吧。

工具链的缺失

这应该是我遇到的头号大坑。众所周知在creator出现前cocos的工具链是惨不忍睹的,而游戏的跑酷和剧情两大核心模块都需要策划能够直接编写关卡内容,给策划提供所见即所得的编辑工具是整个项目开发的首要任务。我参考了github上的几个仓库:Jennal/cocos2dx-3.2-qtimeteora/cocos2d-x-3.x-Qt,使用QT,将cocos的窗口嵌入到QT的GLWidget中,当然我最终的实现比他们更复杂,并定制了很多功能,编辑器支持剧情场景构建和实时运行、Lua实时调试、打印,支持跑酷的场景构造、运行调试,我还重写了鼠标和键盘事件,支持搜索、多选、拖拽、复制粘贴等功能。

随着项目内容的开发,编辑器的开发也在同步进行,直到游戏上线。可以说跑酷和剧情编辑器的实现是程序工作中最为重要的一块。有了编辑器,策划可以完全脱离程序,自行创建游戏内容,并实时的运行调试,完成关卡制作。

Lua嵌入

项目开始使用的是c++版本,进行了一段时间后,策划提出游戏的剧情关卡需要程序提供脚本接口,让他们去编写整个剧情关卡的全部内容。策划有过《仙剑五》的开发经验,并给我看了他们当时写的脚本,基本上就是程序提供接口,他们编写关卡内容,包括NPC逻辑、摄像机运镜、任务等。当时我有两个选择,一是重新使用cocos-lua版,二是在c++版本上自己接入Lua环境。我选择了后者,主要有这么几个原因:首先提出这个需求时程序已经做完了基本的框架设计,用Lua再来一遍有点浪费时间。其次当时正值cocos-lua和quick版合并,lua版本的接口和文档可以说是一塌糊涂,难以上手。最后在看过仙剑的脚本,并在和策划沟通后确认了他们只需要面向过程的接口,并不需要做lua-binding。综合这几点,最后我参考了cocos-lua版的源文件,自己接入了Lua,提供接口给策划使用。

物理引擎

游戏的跑酷部分使用了物理引擎。最开始的时候是打算用cocos3.x自带的physic系统实现,看完源码后放弃了这个想法,cocos内部封装的是chipmunk,当时chipmunk没有解决bullet穿透问题,而且cocos的physic系统是直接挂在Scene下实现的,满足不了项目需求。我干脆自己封装了Box2D实现,隐藏了物理和像素的转换,提供了更简单的接口,完全满足了跑酷部分的开发。

继承还是组合

项目一开始规模很小,再加上cocos本身是以继承方式实现的引擎,项目代码里充斥着各种继承多态。然而自己挖的坑,始终是要填的。新功能越来越难添加,开发陷入瓶颈,我不得不花了一周时间,彻底重写了底层实现,利用cocos已有的那个薄弱的Component组件,将gameplay部分的所有功能转为组件化实现,至此整个游戏框架才算最终成型,我能够非常容易地给跑酷和剧情添加各种新的功能,并同步到编辑器,而且完全不会影响到已有模块的实现。

剧情部分共有80多个组件

后处理效果

单机游戏必不可少的要做各种后处理特效,然而cocos的渲染管道比较简单,而且RenderTexture不支持嵌套。我首先简单修改了下RenderTexture源码,使其能支持嵌套使用,然后实现了一个PostRender节点,在场景中添加该节点后,可以在节点上添加删除各种后处理组件,动态地实现节点上所有内容的后处理效果,比如常见的高斯模糊、动态模糊、全局饱和度亮度调整、蒙版等。

AudioEngine闪退

这个是游戏即将上架时遇到的最致命问题,cocos新的音效模块在部分ios设备上会引发闪退,github上的讨论在这里,这个issue在17年12月建立,我遇到这个问题的时候是18年5月底,当时我的内心是崩溃的,唯一的想法就是“完了,游戏没法上线了!”。尝试了几天仍然没有解决问题,最后靠着公司大老板的私人关系,紧急联系了王哲大大,加急解决了这个问题。在这里也十分感谢引擎组的朋友这么快就解决了问题,让我们游戏能够顺利上架。

程序的内容就先说这么多吧,有想到其他想要聊的我再重新编辑补充吧,下面聊一聊一些其他的东西。

关于美术风格

我并不是美术,关于美术风格这块我只能简单的说一说。全手绘的想法是在项目一开始就确定的,当时是想走美漫的风格,大概类似于《晶体管》那种类型,也以此为基础招了擅长该风格的主美。刚开始的时候美术制作出的素材质量是很高的,非常的风格化,可惜的是美术和策划的配合在之后出现了严重的问题,结果是策划总觉得美术产出的素材不是他们想要的,美术却又觉得策划对他们限制了太多,影响了他们的创作,美术风格越走越偏,最后已经不再是美漫风,而是一种难以言表的掺杂着各种风格元素的混杂风。最终主美也觉得难以继续而离开了团队。在最终的五人团队形成后,我们也不再坚持什么美漫风,而是完全根据团队成员个人的特点,选择他们更加擅长的风格。现在游戏上架了,我个人觉得整个游戏的美术风格可以说更偏向于日漫风。

关于苹果推荐

一个不得不面对的现实是,个人或是独立开发者想要拿到首页的各种推荐:大图、编辑推荐、新游和预约几乎是不可能的。实际上App Store的首页各种推荐位已经被国内外各家游戏巨头牢牢占据。我们游戏也是靠着心动网络的强大公关能力拿到了App Store首页推荐和TapTap推荐,想要出人头地的各位独立开发者,请果断地去抱大腿吧。

结语

一个单机手游项目做了三年,还上线了,放眼国内现在的手游大环境,应该算是个奇迹了吧。在这里想感谢的人很多,首先要感谢项目组的同事,三年的时光让我们早已经超越了同事的感情,大家充满了韧劲,不离不弃,一起完成了属于我们自己的游戏。其次要感谢黄一孟黄老板,说真的,项目组经历了好几次非常困难的时期,甚至可以说是生死存亡的时期,黄老板完全可以拍个板项目组就解散了,我们心里也很清楚,项目中后期整个管理层大概也只有黄老板仍在支持我们。如果没有他的坚持,项目组真的活不到游戏上架那天。我还要感谢公司测试和推广的同事,研发只是游戏做完的第一步,测试和推广也是游戏开发重要的一环,没有你们的工作也不会有项目的最终上架。最后我要感谢所有购买我们游戏的玩家,游戏上架后我们在TapTap上看到了很多很多玩家打通游戏并留下了评论,有赞美的、有吐槽的,每一个评论都让我们受益良多。你们的评论让我们觉得三年的努力是值得的,开发中的一切痛苦在这一刻都烟消云散,正因为有了你们,我们才能坚持在游戏开发的道路上越走越远。

15赞

支持楼主,给你暖贴。我个人是很喜欢avg游戏的。:yum:已经入手了,我也在开发avg游戏。

精雕细琢,从这款产品能感觉到

觉得你们那个场景编辑器很帅,能开源么

每个坚持这么久做完的项目都不容易, 15年的时候, 我们做了两年的项目也面临解散, 但最后大家坚持下来,做到了项目上线.

点赞,值得学习!:+1:

坚持总是不容易的,这值得学习:+1:

现在cocos有creator了,完全能满足场景编辑需求。我这编辑器开源的主要意义也就是cocos窗口如何嵌入到QTGLWidget,以及修改cocos的cmake文件。其他的编辑功能都是很基础的QT组件使用。场景物体的选中等交互我后来干脆抄的creator的逻辑。可惜的是最新的cocos3.17版本的cmake大改,我这编辑器的引擎版本大改只能停留在3.15了。

感谢支持~觉得游戏不错的话记得5星好评哦~

你们这做三年,团队规模多大?大概多少成本?

膜拜技术大神,期望下一款游戏,用cocoscreator 给大家带来惊喜

已购买,顶下作者坚持了3年

希望作者能把遇到的坑总结一下让我们也了解下

支持有理想的团队

给坚持和理想点赞!

这也是cocos工具链缺失的一个重要原因, 做好的工具, 只能在当前版本用.以前我们3.1的时候做了很多工具, 后来都用不了了.

反正目前是亏本的。。

赞,顶

游戏上架其实路才开始。。。没好的渠道一点用都没有。。

似乎在iphone 7plus 图片字体不太清楚