书籍简介:
2015年年底,《王者荣耀》手游横空出世,游戏上市后仅仅一个月的时间,游戏每月下载量就稳定在35万次左右,在随后的半年内攀升到70万次左右。仅2017年一年,《王者荣耀》以约300亿元人民币流水获得了全球手游收入排行榜冠军。
《王者荣耀》这种现象级手机游戏是如何制作出来的呢?本书将揭开《王者荣耀》的神秘面纱,带领读者学习MOBA类手游的制作全过程。
在本书案例中,使用Unity游戏引擎演示客户端的开发流程,使用Node.js演示游戏服务器端的开发流程,使用MySQL提供数据库服务,并演示如何部署商业级游戏服务到Linux服务器上。
本书篇幅有限,所以只演示游戏局内核心功能的制作过程,以及UI的基础使用方法。在熟练掌握本书知识点与开发技巧之后,建议读者访问锐亚教育网站(http://www.insideria.cn)学习更深入的商业级开发课程。
本书适合从事游戏制作的从业人员和相关专业的学生阅读。
作者简介:
郑宇
锐亚教育创始人
10余年IT从业以及教学经验
研究领域从技术机图像学到计算机人机交互,游戏设计与制作等众多领域。
工作经历:
Adobe 中国flash技术布道师
联众游戏公司休闲游戏制作人
锐亚科技创始人
出版日期:
2020年06月
章节目录:
第1章 快速开始 1
1.1 Unity软件的下载与安装 2
1.1.1 Unity软件的下载 2
1.1.2 Unity软件的安装 2
1.2 Thanos游戏开发框架的下载与安装 3
1.2.1 Thanos 游戏开发框架的下载 3
1.2.2 Thanos 游戏开发框架的安装 4
1.3 NGUI组件的下载与安装 4
1.4 本书配套资源的下载 5
第2章 游戏UI界面搭建 7
2.1 NGUI插件详解 8
2.1.1 UI Root的概念 8
2.1.2 UI Lable的概念 9
2.1.3 UI Sprite的概念 9
2.1.4 UI Panel的概念 10
2.1.5 UI Button的概念 11
2.1.6 UI Grid的概念 12
2.1.7 UI Scroll View的概念 12
2.2 游戏UI界面搭建 13
2.2.1 游戏登录界面UI搭建 13
2.2.2 游戏战队匹配UI界面 19
第3章 游戏局外主要逻辑开发实现 23
3.1 游戏登录模块的开发 24
3.1.1 事件定义 25
3.1.2 事件注册 25
3.1.3 事件广播 26
3.1.4 使用范例 26
3.2 游戏网络通信开发 28
3.2.1 设置服务器信息 28
3.2.2 网络信息处理 29
3.2.3 消息序列化与反序列化 29
3.3 登录逻辑实现 34
3.3.1 基础知识 34
3.3.2 完善登录逻辑 38
3.4 匹配逻辑实现 45
3.4.1 Time类基础知识 45
3.4.2 完善匹配逻辑 47
3.5 英雄选择逻辑实现 50
3.5.1 基础知识 50
3.5.2 完善英雄选择 54
第4章 战斗场景逻辑开发 63
4.1 场景元素生成 64
4.1.1 地形生成 64
4.1.2 英雄生成 70
4.2 玩家控制 74
4.2.1 虚拟摇杆的使用 74
4.2.2 英雄移动状态 76
4.2.3 英雄自由状态 80
4.2.4 技能控制 82
4.2.5 血条处理 89
4.2.6 死亡处理 94
第5章 Thanos游戏框架消息机制 99
5.1 游戏框架介绍 100
5.2 委托与事件 101
5.2.1 委托的概念 101
5.2.2 事件的概念 102
5.3 消息机制 104
5.3.1 添加监听器(AddListener) 104
5.3.2 派发事件(BroadCast) 106
5.3.3 移除监听器(RemoveListener) 106
5.3.4 事件类型定义(EGameEvent) 107
5.3.5 事件处理器 108
5.3.6 使用范例 109
第6章 网络基础与协议简介 111
6.1 网络基础 112
6.1.1 网络模型 112
6.1.2 TCP/IP 模型 115
6.1.3 Socket套接字 115
6.1.4 TCP通信 118
6.2 网络层框架 120
6.2.1 网络管理器 120
6.2.2 网络初始化 120
6.3 通信协议 126
6.3.1 通信协议概念 126
6.3.2 消息处理中心 127
6.3.3 消息发送 130
6.4 序列化悍将——Protocol Buffer 132
6.4.1 ProtoBuf的概念 132
6.4.2 ProtoBuf-net的下载与使用 132
6.4.3 数据转换 133
6.4.4 序列化结构数据 134
第7章 Node.js开发环境搭建与通用游戏服务器介绍 137
7.1 Node.js服务器开发环境搭建 138
7.1.1 Node.js介绍? 138
7.1.2 软件安装与资源下载 140
7.1.3 Node.js环境搭建 141
7.2 通用游戏服务器介绍 144
7.2.1 游戏服务器的定义 144
7.2.2 游戏服务器的作用 145
7.2.3 游戏服务器的架构 145
第8章 5分钟编写功能强大的游戏服务器 151
8.1 自动化生成服务器 152
8.1.1 创建serverframework.ts文件 152
8.1.2 编写生成器 152
8.1.3 远程安装Thanos游戏开发框架模块 156
8.1.4 匹配工具目录路径 157
8.1.5 指定程序入口函数 157
8.1.6 生成框架文件 158
8.1.7 测试服务器 158
8.2 穿透服务与网络壁垒 159
8.2.1 TCP服务 159
8.2.2 Socket套接字 162
8.2.3 TCP服务网络模型 162
8.3 解析服务器框架功能 165
8.3.1 server模块 165
8.3.2 client模块 168
8.3.3 MySQL模块 170
8.3.4 logger模块 173
8.3.5 const模块 176
8.3.6 utils模块 177
8.3.7 action模块 178
第9章 Thanos 服务器框架说明 179
9.1 核心概念 180
9.1.1 Thanos服务框架 180
9.1.2 实时数据通信 180
9.1.3 消息处理机制 180
9.2 TypeScript常用语法 180
9.2.1 Export与Import 181
9.2.2 Map 181
9.2.3 async与await 183
9.3 服务器端功能实现 186
第10章 实现服务器的连接 189
10.1 发送消息 190
10.2 事件触发器 190
第11章 MySQL数据库在游戏中的应用 193
11.1 体验MySQL数据库 194
11.1.1 MySQL数据库发展史 194
11.1.2 MySQL的下载 194
11.1.3 MySQL的安装 195
11.2 SQL结构化查询语言基础用法 198
11.3 MySQL游戏数据库设计 200
11.3.1 创建数据库 201
11.3.2 框架对数据库的支持 202
第12章 Node.js环境中XML配置文件的处理 205
12.1 XML语言简介与MOBA游戏配置模板 206
12.2 读取单个XML文件 207
12.3 批量结构化XML文件工具的使用 208
12.3.1 不结构化数据的弊端 208
12.3.2 自动化的优势 208
12.3.3 自动化生成TS结构化数据文件 208
12.4 结构化数据的调用方法 215
12.4.1 加载配置数据 215
12.4.2 获取静态数据 216
第13章 Protocol Buffer协议在游戏场景中的应用 217
13.1 Protocol Buffer原理介绍 218
13.1.1 ProtoBuf消息定义 218
13.1.2 协议格式制定 218
13.2 《王者荣耀》通信协议概览 221
13.2.1 Protocol Buffer 协议源文件 221
13.2.2 客户端编译 222
13.2.3 客户端编译数据 222
13.2.4 序列化结构数据 223
13.3 使用Thanos服务器框架调试消息 223
13.4 服务器端编译 225
13.5 批量处理协议的命令行文件编写 229
13.6 生成PB文件完整批处理脚本 232
13.7 实例讲解 234
13.7.1 模拟客户端 234
13.7.2 服务器消息接收 236
第14章 账户验证模块 237
14.1 登录模块 238
14.1.1 接收请求 238
14.1.2 应答请求 238
14.2 登录成功验证 239
14.3 账号合法性验证 240
第15章 游戏匹配机制 243
15.1 随机数的产生 245
15.2 二分算法 245
15.3 数据容错处理 246
第16章 游戏节奏的控制与AI算法 249
16.1 制作JavaScript定时器 251
16.1.1 JavaScript定时器工作原理 251
16.1.2 设计定时器 256
16.1.3 在游戏中应用定时器 256
16.2 A寻路算法 25716.2.1 A算法基本原理 258
16.2.2 A*寻路算法代码实现 265
16.3 AI行为树 273
16.3.1 行为树简介 273
16.3.2 行为树基本原理 273
16.3.3 行为节点 274
16.3.4 控制节点 274
16.3.5 选择节点 276
16.3.6 实例演示 276
16.4 技能模块 279
16.4.1 技能处理 279
16.4.2 技能程序框架 280
封面图: