新書推薦:
《
黄金、石油和牛油果:16件商品中的拉丁美洲发展历程
》
售價:HK$
86.9
《
母亲的选择:看不见的移民保姆与女性工作
》
售價:HK$
74.8
《
城邦政治与灵魂政治——柏拉图《理想国》中的政治哲学研究
》
售價:HK$
129.8
《
3分钟漫画墨菲定律:十万个为什么科普百科思维方式心理学 胜天半子人定胜天做事与成事的权衡博弈之道
》
售價:HK$
54.8
《
1911:危亡警告与救亡呼吁
》
售價:HK$
76.8
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:HK$
75.9
《
笼中王国 : 18世纪法国的珍禽异兽与社会文化
》
售價:HK$
74.8
《
思考的框架3:风靡华尔街的思维训练法
》
售價:HK$
64.9
|
內容簡介: |
本书针对第1版进行改版,将“单机游戏”融入到网络部分的实例中,在讲解网络通信原理的同时,给出各个知识点的案例,并开发客户端的网络模块和服务端程序框架。然后将一部分的坦克游戏改造成联网对战的多人游戏。本书基于Unity3D最新版本编写,书中例子为商业游戏简化版本,读者可以从中了解商业游戏的设计思路和实现方法。读者看完本书,初步拥有开发一款完整网络游戏的能力。
|
目錄:
|
前言
第1章 网络游戏的开端:Echo1
1.1 藏在幕后的服务端1
1.2 网络连接的端点:Socket3
1.2.1 Socket3
1.2.2 IP地址3
1.2.3 端口4
1.2.4 Socket通信的流程6
1.2.5 TCP和UDP协议7
1.3 开始网络编程:Echo8
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 更多API16
1.5 公网和局域网17
第2章 分身有术:异步和多路复用19
2.1 什么样的代码是异步代码19
2.2 异步客户端20
2.2.1 异步Connect21
2.2.2 Show Me The Code22
2.2.3 异步Receive23
2.2.4 异步Send26
2.3 异步服务端29
2.3.1 管理客户端29
2.3.2 异步Accept30
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 状态检测Poll36
2.5.1 什么是Poll36
2.5.2 Poll客户端37
2.5.3 Poll服务端38
2.6 多路复用Select41
2.6.1 什么是多路复用41
2.6.2 Select服务端42
2.6.3 Select客户端44
第3章 实践出真知:大乱斗游戏45
3.1 什么是大乱斗游戏45
3.2 搭建场景46
3.3 角色类Human49
3.3.1 类结构设计49
3.3.2 BaseHuman49
3.3.3 角色预设51
3.3.4 CtrlHuman54
3.3.5 SyncHuman57
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和Queue117
4.5.4 解决线程冲突120
4.5.5 为什么要使用队列121
4.6 高效的接收数据122
4.6.1 不足之处122
4.6.2 完整的ByteArray123
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 ReceiveBufferSize138
5.3.2 SendBufferSize139
5.3.3 NoDelay139
5.3.4 TTL140
5.3.5 ReuseAddress141
5.3.6 LingerState142
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 Connect152
6.3.2 ConnectCallback154
6.3.3 测试程序155
6.4 关闭连接156
6.4.1 isClosing?157
6.4.2 Close157
6.4.3 测试158
6.5 Json协议158
6.5.1 为什么会有协议类158
6.5.2 使用JsonUtility159
6.5.3 协议格式160
6.5.4 协议文件161
6.5.5 协议体的编码解码162
6.5.6 协议名的编码解码163
6.6 发送数据165
6.6.1 Send165
6.6.2 SendCallback166
6.6.3 测试167
6.7 消息
|
內容試閱:
|
为什么要写这本书
玩到好玩的游戏时,我总希望有朝一日能做出优秀的游戏作品;对生活有感悟时,也总会期待在游戏中表达感想。自Unity引擎流行开来,个人和小团队也能制作精良的游戏,实现梦想不再遥远。
使用Unity引擎,游戏开发者再也不用过度关心底层复杂系统的实现,只需关心具体的游戏逻辑。一般来说,游戏引擎都能够很好地处理渲染、物理等通用的底层模块,但对于那些不完全通用的功能,比如本书介绍的网络模块,引擎往往没能提供通用的解决方案。这就要求开发者对网络底层有足够深刻的理解,才能做出优质的网络游戏。
如今,游戏联网是一大趋势。几大热门的手机游戏厂商只开发网络游戏,老牌单机游戏也纷纷添加联网功能。作为有志于从事游戏行业、渴望做出顶级产品的我们,更需要深入探讨网络游戏的开发技术。然而市面上的Unity教程,大多是介绍引擎的使用方法和简单的单机游戏的开发过程,就算涉及网络,也只是简单带过。市面上也有不少介绍网络底层的资料,但大部分没有和游戏开发结合起来,更不可能提供完整的游戏示例。想要制作当今热门的网络游戏,特别是开发手机网络游戏,或者想要到网游公司求职,很难找到实用的教程。
本书以制作一款完整的多人坦克对战游戏为例,详细介绍网络游戏的开发过程。书中还介绍一套通用的服务端框架和客户端网络模块—它是商业游戏的简化版本。相信通过本书,读者能够掌握Unity网络游戏开发的大部分知识,能够深入了解TCP底层机制,能够亲自搭建一套可重复使用的客户端框架,也能够从框架设计中了解商业游戏的设计思路。本书分为三个部分,分别是“扎基础”“搭框架”和“做游戏”,本书结合实例,循序渐进,深入地讲解网络游戏开发所需的知识。
2013年8月,在筹备第一本著作《手把手教你用C#制作RPG游戏》的同时,我也在规划这本介绍网络游戏技术的书籍。2016年11月,《Unity3D网络游戏实战》正式出版。此后一年多的时间里,陆续有热心读者与我交流,探讨网络游戏的开发知识,我也一直在学习和积累。2018年1月,在收集了足够多的反馈,也相信自己的技术水平又上一个层次之后,我便着手本书第2版的写作。第2版的结构与第1版有颇多差异,对网络底层有更详细的介绍,而对场景搭建和单机游戏部分做了必要的精简,代码质量也有了很大提高,可以说全书几乎重写。
这本书凝结了我多年的工作经验,也凝结着我对国产游戏的美好愿景。愿与诸位一同努力,造就举世瞩目的游戏。
读者对象
这里将根据用户需求划分出一些可能使用本书的用户。
游戏开发爱好者:想要自己制作一款游戏的人。书中理论与实践结合,很适合作为自学的参考书。
求职者:想要谋求游戏公司开发岗位的人。书中对网络底层和商业游戏常遇到的问题都有介绍,覆盖常见的面试内容。
职场新人:刚入行的程序员。书中所介绍的网络知识和问题,是每个游戏从业人员都会遇到且必须去解决的。本书很适合作为提升技术水平的资料。
游戏公司:作为新人培训材料,本书能够帮助新人快速提高自身技术水平,同时书中有完整的实践项目,可使新人更快融入实际工作。
学校:可作为大学或游戏培训机构的教科书。本书结构安排合理,循序渐进,理论实践相结合,适合教学。
如何阅读本书
本书给予读者一个明确的学习目标,即制作一款完整的多人对战游戏,然后一步一步去实现它。全书涉及TCP网络底层知识、常见网络问题解决方法、客户端网络框架、客户端界面系统、网络游戏房间系统、坦克游戏战斗系统等多项内容。在涉及相关知识点时,书中会有详细的讲解。本书分为三个部分,阅读时要注意它们之间的递进关系。
第一部分“扎基础”主要介绍TCP网络游戏开发的必备知识,包括TCP异步连接、多路复用的处理,以及怎样处理粘包分包、怎样发送完整的网络数据、怎样设置正确的网络参数。第3章介绍了一款简单网络游戏开发的全过程,在后续章节中会逐步完善这个游戏。
第二部分“搭框架”主要介绍商业级客户端网络框架的实现方法。这套框架具有较高的通用性,解决了网络游戏开发中常遇到的问题,且达到极致的性能要求,可以运用在多款游戏上。书中还介绍了一套单进程服务端框架的实现,服务端框架使用select多路复用,做到底层与逻辑分离,设有消息分发、事件处理等模块。
第三部分“做游戏”通过一个完整的实例讲解网络游戏的设计思路,包括游戏实体的类设计、怎样组织代码、怎样实现游戏大厅(房间系统)、怎样实现角色的同步。这一部分会使用第二部分搭好的框架,一步步地做出完整的游戏项目。
由于本书重点在网络部分,因此不会过多着墨于Unity的基础操作和C#语言的基本语法。同时作为实例教程,本书偏重于例子涉及的知识点。读者如果想要深入地了解某些内容,或者了解实现某种功能的更多方法,建议在阅读本书的过程中多多查询相关资料,以做到举一反三。
本书提供的所有示例的源码和素材,读者可以在Github或网盘下载。我也会在Github上发表勘误、补充篇等内容,欢迎关注。由于网盘的不稳定性,作者不能保证多年后网盘地址还有效。若读者发现网盘地址失效,可以发送邮件到我的邮箱,我将会把最新的下载地址发给你
|
|