Unity3D网络游戏实战(第2版)
罗培羽 著
- 出版社: 机械工业出版社
- ISBN:9787111612179
- 版次:2
- 商品编码:12508478
- 品牌:机工出版
- 包装:平装
- 丛书名: 游戏开发与设计技术丛书
- 外文名称:Multiplayer Game Development With Unity 3D (Second Edition)
- 开本:16开
- 出版时间:2019-01-01
- 用纸:胶版纸
- 页数:416
- 正文语种:中文
编辑推荐
适读人群 :游戏开发爱好者:想要自己制作一款游戏的人,作为自学参考书。游戏开发岗位求职者:想要谋求游戏公司开发岗位的人,作为自学参考书。职场新人:游戏公司程序员,作为自学参
详解Socket编程,指导搭建稳健的网络框架;解析网游中常见的卡顿、频繁掉线等问题;探求适宜的实时同步算法。
包含完整的多人对战游戏案例,揭秘登录注册、游戏大厅、战斗系统等模块的实现细节。
本书针对第1版进行改版,将“单机游戏”融入到网络部分的实例中,在讲解网络通信原理的同时,给出各个知识点的案例,并开发客户端的网络模块和服务端程序框架。
然后将一部分的坦克游戏改造成联网对战的多人游戏。
本书基于Unity3D新版本编写,书中例子为商业游戏简化版本,读者可以从中了解商业游戏的设计思路和实现方法。
读者看完本书,初步拥有开发一款完整网络游戏的能力。
内容简介
想要制作当今热门的网络游戏,特别是开发手机网络游戏,或者想要到游戏公司求职,都需要深入了解网络游戏的开发技术。 《Unity3D网络游戏实战(第2版)》分为三大部分,揭示网络游戏开发的细节。 第-部分“扎基础”(第1-5章) 介绍TCP网络游戏开发的必备知识。包括TCP异步连接、多路复用技术;处理粘包分包的方法;设置正确的网络参数、完整的发送数据、安全的关闭连接等方法。第3章介绍了一款简单网络游戏开发的全过程。 第二部分“搭框架”(第6章和第7章) 介绍了商业级客户端网络框架的实现方法。这套框架具有较高的通用性,解决了网络游戏开发中常遇到的问题,且达到极点的性能要求,可以运用在多种游戏上。书中还实现了一套C#服务端框架,使用select多路复用,做到底层与逻辑分离,具有消息分发、事件处理等模块。 第三部分“做游戏”(第8-12章) 通过一个完整的实例,讲解网络游戏的设计思路。包括游戏实体的类设计、怎样组织代码、怎样实现游戏大厅(房间系统)、怎样实现实体的同步。这一部分会使用第二部分搭好的框架,逐步做出完整的游戏。
作者简介
罗培羽,正在创作好玩游戏的程序员,目前任职于广州四三九九公司。 在四三九九公司,参与《卡布西游》《卡布仙踪》《卡布魔镜》《坦克射击》《海陆大战》等多个项目研发工作;作为独立游戏开发者,主导《仙剑5前传之心愿》《蚀梦》等项目研发,拥有丰富的实战经验。 自2009年发布第一部视频教程《教你用VB制作RPG游戏》以来,先后发布了《教你制作3DRPG游戏》《手把手教你用C#制作RPG游戏》等教程,并出版了《Unity3D网络游戏实战(第1版)》一书;作为游戏蛮牛专栏作家,撰写数十篇技术文章。 目前关注手机游戏、AI技术等领域;并以第三方视角记录普通开发者的心路历程。
精彩书评
★本书详细介绍了TCP/IP网络协议底层,网络数据的发送与接收原理。书中包含大量的示例教程,结合Unity3D引擎通过实战的项目从无到有一点点向读者介绍网络游戏是如何跑起来的,如果你对网络感兴趣,这是一本不容错过的好书。 ——Unity全国UUG意见领袖UVP价值专家宣雨松MOMO ★在网络游戏爆发的今天,学习网络编程变得越来越重要。本书充分考虑初学者的学习路线,配以大量实例和图片进行讲解,语言通俗易懂,是初学者学习网络编程难得的中文资料。 ——《Unity Shader入门精要》作者冯乐乐
目录
前言
第1章 网络游戏的开端:Echo 1
1.1 藏在幕后的服务端 1
1.2 网络连接的端点:Socket 3
1.2.1 Socket 3
1.2.2 IP地址 3
1.2.3 端口 4
1.2.4 Socket通信的流程 6
1.2.5 TCP和UDP协议 7
1.3 开始网络编程:Echo 8
1.3.1 什么是Echo程序 8
1.3.2 编写客户端程序 8
1.3.3 客户端代码知识点 10
1.3.4 完成客户端 11
1.3.5 创建服务端程序 12
1.3.6 编写服务端程序 14
1.3.7 服务端知识点 15
1.3.8 测试Echo程序 15
1.4 更多API 16
1.5 公网和局域网 17
第2章 分身有术:异步和多路复用 19
2.1 什么样的代码是异步代码 19
2.2 异步客户端 20
2.2.1 异步Connect 21
2.2.2 Show Me The Code 22
2.2.3 异步Receive 23
2.2.4 异步Send 26
2.3 异步服务端 29
2.3.1 管理客户端 29
2.3.2 异步Accept 30
2.3.3 程序结构 31
2.3.4 代码展示 31
2.4 实践:做个聊天室 35
2.4.1 服务端 35
2.4.2 客户端 35
2.4.3 测试 36
2.5 状态检测Poll 36
2.5.1 什么是Poll 36
2.5.2 Poll客户端 37
2.5.3 Poll服务端 38
2.6 多路复用Select 41
2.6.1 什么是多路复用 41
2.6.2 Select服务端 42
2.6.3 Select客户端 44
第3章 实践出真知:大乱斗游戏 45
3.1 什么是大乱斗游戏 45
3.2 搭建场景 46
3.3 角色类Human 49
3.3.1 类结构设计 49
3.3.2 BaseHuman 49
3.3.3 角色预设 51
3.3.4 CtrlHuman 54
3.3.5 SyncHuman 57
3.4 如何使用网络模块 57
3.4.1 委托 57
3.4.2 通信协议 59
3.4.3 消息队列 60
3.4.4 NetManager类 60
3.4.5 测试网络模块 64
3.5 进入游戏:Enter协议 66
3.5.1 创建角色 67
3.5.2 接收Enter协议 70
3.5.3 测试Enter协议 70
3.6 服务端如何处理消息 72
3.6.1 反射机制 72
3.6.2 消息处理函数 73
3.6.3 事件处理 74
3.6.4 玩家数据 76
3.6.5 处理Enter协议 77
3.7 玩家列表:List协议 77
3.7.1 客户端处理 78
3.7.2 服务端处理 79
3.7.3 测试 79
3.8 移动同步:Move协议 80
3.8.1 客户端处理 80
3.8.2 服务端处理 81
3.8.3 测试 81
3.9 玩家离开:Leave协议 82
3.9.1 客户端处理 82
3.9.2 服务端处理 82
3.9.3 测试 82
3.10 攻击动作:Attack协议 83
3.10.1 播放攻击动作 83
3.10.2 客户端处理 87
3.10.3 服务端处理 88
3.10.4 测试 88
3.11 攻击伤害:Hit协议 89
3.11.1 客户端处理 89
3.11.2 服务端处理 91
3.12 角色死亡:Die协议 91
3.12.1 客户端处理 91
3.12.2 测试 92
第4章 正确收发数据流 94
4.1 TCP数据流 94
4.1.1 系统缓冲区 94
4.1.2 粘包半包现象 96
4.1.3 人工重现粘包现象 97
4.2 解决粘包问题的方法 97
4.2.1 长度信息法 97
4.2.2 固定长度法 98
4.2.3 结束符号法 98
4.3 解决粘包的代码实现 99
4.3.1 发送数据 99
4.3.2 接收数据 99
4.3.3 处理数据 101
4.3.4 完整的示例 104
4.3.5 测试程序 106
4.4 大端小端问题 109
4.4.1 为什么会有大端小端之分 110
4.4.2 使用Reverse()兼容大小端编码 111
4.4.3 手动还原数值 111
4.5 完整发送数据 112
4.5.1 不完整发送示例 113
4.5.2 如何解决发送不完整问题 113
4.5.3 ByteArray和Queue 117
4.5.4 解决线程冲突 120
4.5.5 为什么要使用队列 121
4.6 高效的接收数据 122
4.6.1 不足之处 122
4.6.2 完整的ByteArray 123
4.6.3 将ByteArray应用到异步程序 129
第5章 深入了解TCP,解决暗藏问题 133
5.1 从TCP到铜线 133
5.1.1 应用层 133
5.1.2 传输层 134
5.1.3 网络层 135
5.1.4 网络接口 135
5.2 数据传输流程 136
5.2.1 TCP连接的建立 136
5.2.2 TCP的数据传输 137
5.2.3 TCP连接的终止 138
5.3 常用TCP参数 138
5.3.1 ReceiveBufferSize 138
5.3.2 SendBufferSize 139
5.3.3 NoDelay 139
5.3.4 TTL 140
5.3.5 ReuseAddress 141
5.3.6 LingerState 142
5.4 Close的恰当时机 144
5.5 异常处理 146
5.6 心跳机制 147
第6章 通用客户端网络模块 148
6.1 网络模块设计 148
6.1.1 对外接口 148
6.1.2 内部设计 149
6.2 网络事件 150
6.2.1 事件类型 151
6.2.2 监听列表 151
6.2.3 分发事件 152
6.3 连接服务端 152
6.3.1 Connect 152
6.3.2 ConnectCallback 154
6.3.3 测试程序 155
6.4 关闭连接 156
6.4.1 isClosing? 157
6.4.2 Close 157
6.4.3 测试 158
6.5 Json协议 158
6.5.1 为什么会有协议类 158
6.5.2 使用JsonUtility 159
6.5.3 协议格式 160
6.5.4 协议文件 161
6.5.5 协议体的编码解码 162
6.5.6 协议名的编码解码 163
6.6 发送数据 165
6.6.1 Send 165
6.6.2 SendCallback 166
6.6.3 测试 167
6.7 消息