前言
PREFACE
本书介绍
2015年年底,《王者荣耀》手游横空出世,游戏上市后仅仅一个月的时间,游戏下载量就稳定在35万次左右,在随后的半年内再次攀升到70万次左右。仅2017年一年,《王者荣耀》以约300亿元人民币流水获得了全球手游收入排行榜冠军。
那么,《王者荣耀》这种现象级手机游戏是如何制作出来的呢?本书将揭开《王者荣耀》的神秘面纱,带领读者学习MOBA类手游的制作全过程。
在本书案例中,使用Unity 2018游戏引擎演示客户端的开发流程,使用Node.js演示游戏服务器端的开发流程,使用MySQL提供数据库服务,并演示如何部署商业级游戏服务到Linux服务器上。
本书篇幅有限,所以只演示游戏局内最核心功能的制作过程,以及UI的基础使用方法。在熟练掌握本书知识点与开发技巧之后,建议读者访问锐亚教育网站(http://www.insideria.cn)学习更深入的商业级开发课程。
本书还提供锐亚教育网络学习卡,在网站上输入学习卡号,就可以观看相关课程的视频教学课程。
游戏核心技术介绍
◎注册登录模块
注册登录模块是所有游戏开发的第一步,在《王者荣耀》中是使用微信和QQ账号进行快速登录的,但是对于游戏本身,无论采用哪种方式登录,都需要在游戏内部建立自身的账号体系。在用户使用快捷方式登录的同时,游戏自身会自动地为用户在USER数据库中注册相关用户信息并且进行登录操作。在“登录逻辑实现”模块的教学过程中,会给读者演示如何创建用户与实现登录过程。负载均衡服务器的作用是,给用户推荐相对空闲以及用户所在区域内访问速度较快的服务器,在后边的教学中也会给读者演示如何制作服务器负载均衡器。
输入账号和密码并选择服务器之后,就可以登录游戏了。那么,账号与密码在服务器端是如何进行验证的,数据库又是如何存储玩家战斗信息的?这些内容在后续课程中会详细讲解。
◎游戏局内道具商店系统
在进入战斗前,首先需要通过商店购买出门装备。每个玩家进入战斗场景中都得有初始点券(以后统称为CP)。玩家可以通过CP来购买装备。游戏道具在游戏中是非常重要的,那么它们是怎么制作的呢?需要使用什么技术来实现呢?
游戏道具系统的制作需要客户端与服务器端协作完成,客户端除了要使用功能强大的NGUI插件,还使用到许多与服务器进行通信、与校验有关的技术。
◎游戏登录状态
首先来了解登录模块。登录模块处于登录状态,此状态下的主要内容就是选择服务器,输入账号与密码,登录成功后可以选择开始游戏,也可以切换账号退出登录,或者重新选择战场,也就是重新选择连接的服务器。这是登录模块的功能。
◎游戏大厅状态
登录完成后就会进入游戏大厅中,切换为大厅状态。游戏大厅中包含了四大部分:主页、战斗、商城、社交。游戏大厅的内容很多,比如签到系统、英雄介绍、符文合成、战斗模式选择、英雄与符文的购买等。因为这个游戏的内容过于庞大,所以在本书以及视频中主要讲解主线,也就是进入战斗部分的内容。在此模块中,读者主要学习窗口的切换以及匹配战斗。
◎游戏英雄选择状态
等待匹配完成后,下一个状态就是英雄选择了。在此模块中,包括可选英雄的显示,如何更新选择的英雄并确定,倒计时的显示,等等。其中涉及的细节较多,战友的匹配组合是在服务器端完成的。
◎游戏状态
确定英雄之后就要进入最重要的模块了,也就是游戏状态。此状态的界面中包含了很多内容,比如技能面板的显示与每个技能按钮的功能、摇杆是如何控制英雄移动的、战斗的更新、英雄的回城,等等。游戏过程中最重要的是技能释放与伤害处理。对于英雄战斗属性的更新以及伤害值的计算都是在服务器端进行的。客户端负责显示,服务器端负责逻辑运算。游戏胜利的标志是敌方箭塔被销毁,之后游戏进入最后一个状态——游戏结束状态。
◎游戏结束状态
以主基地被销毁为标志,此时游戏进入最后一个状态——游戏结束状态。此模块中的主要内容不多,先是显示正常游戏的战绩,然后是离开战场。游戏状态就此切换,那么切换到什么状态呢?等进入此模块中就了解了。这就是游戏的最后一个模块。整个游戏就是几种状态的切换,不同状态完成不同的事件。
◎游戏用户交互系统
英雄的位移是通过虚拟摇杆来控制实现的,拖动虚拟摇杆可以控制英雄的移动方向。那么虚拟摇杆是如何控制英雄移动的呢?多玩家在游戏场景中的位移又是如何实现的呢?
英雄移动相对比较简单,当服务器端接收到客户端的移动请求后,服务器赋予英雄速度与方向,在移动过程中是需要时时检测的。比如会遇到墙体等碰撞体,那么就要动态检测英雄的移动方向是否可行。以英雄为中心点水平向四周辐射8个点,检测这8个点是否可行,可行就将新的位置点赋予英雄。当移动到某一个点后,又以英雄的新位置点再次辐射进行移动,这是英雄移动的原理。在“A*寻路算法”一节中会详细地介绍。
关于多玩家在游戏场景中的位移同步以及攻击同步等,这些问题涉及的知识点比较多,这里就不再赘述了。在后续的视频课程中,会详细地介绍如何实现多玩家的同步。
◎游戏人物状态机实现与优化
在游戏中,无论是小兵、NPC,还是英雄,都大量使用了游戏状态机。什么是游戏状态机?在游戏中如何使用它呢?
游戏人物会在不同的环境中激发不同的状态,它们都由状态机(States)组成,在不同的事件(Event)中激发不同的动作(Action),再通过函数将状态从现态迁移到次态。状态机也有多种类型,比如有限状态机(Finite State Machine)、无限状态机(Infinite State Machine)等。
◎游戏粒子特效系统
无论是普通攻击还是技能攻击,攻击时释放的特效都会为游戏的视觉效果与体验加分不少,但是如何随心所欲地制作出你所想的特效呢?
那就需要掌握Unity粒子特效系统。什么是发射(Emission)?什么是纹理动画(Texture Sheet Animation)?什么是物理发射源(Sub Emitters)?什么是拖尾(Trails)?什么是渲染(Renderer)?
◎游戏NPC的制作
NPC是游戏中唯一使用到AI技术的部分。如何制作出不同智商的NPC成为游戏开发中比较有趣而且实用的技巧。在制作NPC时,会大量使用行为树、决策树、有限状态机等技巧。在“NPC游戏怪物”部分中会详细介绍有关制作技巧。
◎游戏数学
无论是新颖的玩法,还是酷炫的特效,都离不开数学知识,特别是制作一款3D游戏,矢量、矩阵、四元数、射线、简单的物理学都会在游戏制作过程中被大量运用。
配套视频网站
本书配套的视频内容由锐亚教育与英赛德游戏研发中心联合制作,请参考本书提供的视频课程学习卡,并且按照该学习卡使用手册购买相关视频内容(请在浏览器中输入网站地址:http://www.insideria.cn)。
课程目标
□ 掌握Thanos MOBA类游戏开发框架
□ 掌握NGUI搭建UI界面技术
□ 掌握Unity中级开发工程师应具有的开发技术
□ 掌握大型网游网络通信技术
□ 掌握Node.js大型网游服务器开发技术
□ 掌握MySQL数据库在游戏开发中的应用技术
□ 掌握游戏常用算法原理
□ 掌握游戏AI制作技术
本书适合读者
□ 独立游戏制作人
□ 游戏从业者
□ 游戏爱好者
□ 重度游戏玩家
□ 大学毕业生
给大脑的建议
游戏编程需要大脑记忆大量的信息。大脑的存储空间有限,它总是在渴求新奇的东西,搜寻并期待着不寻常的事情发生,再把它们保存下来。那么,如何让你的大脑神经元爆发并释放出化学物质来增强你的记忆力呢?
举个例子,你去野生动物园时,一只老虎出现在你身后并跟你“Say Hi”!此时此刻,你的大脑中会发生什么呢?我相信你对这事会终身难忘。大脑就像个筛子,这个筛子显然会把“不重要的东西”筛掉。
一种简单的方法是告诉你的大脑:嘿,大脑,学这本书的内容很重要,这样能帮你一天内就实现一个“小目标”,帮我把这些东西记下来!OK!快去给你的大脑神经元“点火”吧,爆发你的学习热情,踏上你的学习之旅吧!
致谢
参与本书编写与校稿工作的人员除了郑宇、周志超、张清,还有王兆明、谷雪娇、翟佳、李皓颖。
虽然在本书的编写过程中,力求叙述准确、完善,但由于水平有限,书中欠妥之处在所难免,希望读者和同仁能够及时指正,共同促进本书质量的提高。
再次希望本书能为读者的学习和工作提供帮助!