资源名称:Unity 3D网络游戏实战 PDF
内容简介:
深入讲解Unity3D网络游戏开发的原理和实现细节,全面剖析游戏网络框架设计。 ·实战性强,以多人坦克对战游戏案例贯穿全书,详述网络游戏的开发过程,帮助读者掌握商业游戏的设计思路和实现方法。
作者简介:
罗培羽,广州四三九九信息科技有限公司项目负责人、主程序,参与《卡布魔镜》《卡布西游》《卡布仙踪》等多款游戏的开发工作。对游戏程序开发有着深入了解,对游戏项目的组织和管理有着一定的实战经验。目前关注休闲手机游戏、虚拟现实和现实增强、独立游戏等领域。
曾组织团队开发3D仙剑同人游戏《仙剑5前传之心愿》,该项目为目前仅有的一款成功的3D仙剑同人,引起仙侠游戏圈的普遍关注。发布后获得游侠网单机RPG类下载排行第四名,仙剑官方也给予高度评价。
自2009年开始,发布《教你用vb制作rpg游戏》、《教你制作3DRPG游戏》、《掌握X3D》、《不会电脑也汇编》等大量教程。2004年出版专著《手把手教你用c#制作rpg游戏》,该书为《十二五全国高校数字游戏设计精品教材》系列之一。
资源目录:
前言
第1章 掌握Unity3D基本元素 / 1
1.1 最最简单的游戏 / 2
1.1.1 Unity3D的界面构成 / 2
1.1.2 在场景中创建立方体 / 3
1.1.3 编写第一个程序 / 4
1.1.4 测试游戏 / 6
1.1.5 总结 / 6
1.2 导入资源 / 6
1.2.1 从本地导入素材 / 7
1.2.2 从本地导入包文件 / 7
1.2.3 从AssetStore导入 / 8
1.3 山体系统 / 10
1.4 灯光 / 12
1.5 材质 / 14
1.5.1 什么是材质 / 14
1.5.2 如何创建材质 / 15
1.5.3 Mesh Renderer组件 / 16
1.5.4 着色器 / 16
1.6 预设 / 19
1.6.1 制作预设 / 19
1.6.2 预设的实例化 / 19
1.6.3 使用预设的例子 / 20
1.7 声音 / 22
1.7.1 音源 / 22
1.7.2 接收器 / 23
1.7.3 简单播放器 / 23
1.8 GUI / 24
1.8.1 GUI绘图基础 / 24
1.8.2 编写HelloWorld程序 / 25
1.8.3 绘制登录框 / 25
1.9 场景 / 26
1.9.1 创建场景 / 27
1.9.2 场景切换 / 27
1.10 导出游戏 / 28
第2章 坦克控制单元 / 31
2.1 导入坦克模型 / 31
2.1.1 导入模型 / 31
2.1.2 调整尺寸 / 32
2.1.3 材质和贴图 / 33
2.2 行走控制 / 34
2.2.1 基础知识 / 35
2.2.2 上下左右移动 / 37
2.2.3 转向和前后移动 / 38
2.3 相机跟随 / 40
2.3.1 数学原理 / 41
2.3.2 跟随算法 / 42
2.3.3 设置跟随目标 / 46
2.3.4 横向旋转相机 / 47
2.3.5 纵向旋转相机 / 50
2.3.6 滚轮调节距离 / 51
2.4 旋转炮塔 / 52
2.4.1 坦克的层次结构 / 52
2.4.2 炮塔 / 56
2.4.3 炮管 / 58
2.5 车辆行驶 / 61
2.5.1 Unity3D的物理系统 / 62
2.5.2 车轮碰撞器 / 65
2.5.3 控制车辆 / 69
2.5.4 制动(刹车) / 73
2.6 轮子和履带 / 74
2.6.1 轮子转动 / 74
2.6.2 履带滚动 / 77
2.7 音效 / 79
第3章 火炮与敌人 / 82
3.1 发射炮弹 / 82
3.1.1 制作炮弹 / 82
3.1.2 制作爆炸效果 / 83
3.1.3 炮弹轨迹 / 84
3.1.4 坦克开炮 / 86
3.2 摧毁敌人 / 88
3.2.1 坦克的控制类型 / 88
3.2.2 坦克的生命值 / 89
3.2.3 焚烧特效 / 89
3.2.4 坦克被击中后的处理 / 90
3.2.5 炮弹的攻击处理 / 92
3.3 准心 / 94
3.3.1 概念和原理 / 94
3.3.2 计算目标射击位置 / 96
3.3.3 计算实际射击位置 / 101
3.3.4 绘制准心 / 103
3.4 绘制生命条 / 104
3.4.1 生命条素材 / 105
3.4.2 绘制生命条 / 105
3.5 击杀提示 / 107
3.5.1 谁发射了炮弹 / 107
3.5.2 谁被击中 / 107
3.5.3 显示击杀提示 / 108
3.6 炮弹的音效 / 110
3.6.1 发射音效 / 110
3.6.2 爆炸音效 / 111
第4章 人工智能 / 113
4.1 基于有限状态机的人工智能 / 113
4.1.1 有限状态机 / 113
4.1.2 分层有限状态机 / 115
4.2 程序结构 / 116
4.2.1 AI类的结构 / 116
4.2.2 在Tank中调用 / 118
4.3 搜寻目标 / 119
4.3.1 搜寻规则 / 119
4.3.2 坦克标签 / 119
4.3.3 主动搜寻算法 / 120
4.3.4 被动搜寻算法 / 122
4.3.5 调试 / 123
4.4 向敌人开炮 / 124
4.4.1 电脑控制的方式 / 124
4.4.2 炮塔炮管的目标角度 / 125
4.4.3 调试程序 / 125
4.4.4 开炮 / 126
4.5 走向目的地 / 128
4.5.1 路点 / 128
4.5.2 路径 / 128
4.5.3 根据场景标志物生成路径 / 130
4.5.4 给AI指定路径 / 131
4.5.5 操控坦克 / 132
4.5.6 调试程序 / 136
4.6 使用NavMesh计算路径 / 137
4.6.1 NavMesh的原理 / 137
4.6.2 生成导航图 / 137
4.6.3 生成路径 / 140
4.7 行为决策 / 143
4.7.1 巡逻状态 / 144
4.7.2 进攻状态 / 145
4.7.3 调试 / 146
4.8 战场系统 / 147
4.8.1 单例模式 / 147
4.8.2 BattleTank / 148
4.8.3 战场逻辑 / 148
4.8.4 敌我区分 / 150
4.8.5 出生点 / 151
4.8.6 坦克预设 / 152
4.8.7 开启一场两军对峙的战斗 / 152
4.8.8 战场结算 / 154
4.8.9 开始战斗 / 155
第5章 代码分离的界面系统 / 157
5.1 Unity UI系统 / 157
5.1.1 创建UI部件 / 158
5.1.2 Canvas画布 / 159
5.1.3 EventSystem / 161
5.1.4 RectTransform / 162
5.1.5 其他UGUI组件 / 164
5.1.6 事件触发 / 165
5.1.7 简单的面板调用 / 165
5.2 制作界面素材 / 167
5.2.1 标题面板和信息面板 / 167
5.2.2 制作预设 / 168
5.3 面板基类PanelBase / 168
5.3.1 代码与资源分离的优势 / 168
5.3.2 面板系统的设计 / 169
5.3.3 面板基类的设计要点 / 169
5.3.4 面板基类的实现 / 170
5.4 面板管理器PanelMgr / 172
5.4.1 层级管理 / 173
5.4.2 打开面板OpenPanel / 174
5.4.3 关闭面板ClosePanel / 176
5.5 面板逻辑 / 176
5.5.1 标题面板TitlePanel / 176
5.5.2 信息面板InfoPanel / 178
5.6 调用界面系统 / 179
5.6.1 界面系统的资源 / 179
5.6.2 界面系统的调用 / 179
5.7 胜负面板 / 181
5.7.1 面板素材 / 181
5.7.2 面板逻辑 / 181
5.7.3 面板调用 / 183
5.8 设置面板 / 184
5.8.1 面板素材 / 184
5.8.2 面板逻辑 / 185
5.8.3 面板调用 / 186
第6章 网络基础 / 188
6.1 七层网络模型 / 189
6.1.1 应用层 / 190
6.1.2 传输层 / 190
6.1.3 网络层 / 190
6.1.4 数据链路层 / 191
6.1.5 物理层 / 191
6.2 IP与端口 / 192
6.2.1 IP地址 / 192
6.2.2 端口 / 192
6.2.3 C#中的相关类型 / 193
6.3 TCP协议 / 193
6.3.1 TCP连接的建立 / 193
6.3.2 TCP的数据传输 / 195
6.3.3 TCP连接的终止 / 195
6.4 Socket套接字 / 196
6.4.1 Socket连接的流程 / 196
6.4.2 Socket类 / 196
6.5 同步Socket程序 / 198
6.5.1 新建控制台程序 / 198
6.5.2 编写服务端程序 / 199
6.5.3 客户端界面 / 202
6.5.4 客户端程序 / 203
6.6 异步Socket程序 / 205
6.6.1 BeginAccept / 205
6.6.2 BeginReceive / 205
6.6.3 Conn(state) / 206
6.6.4 服务端程序(主体结构) / 208
6.6.5 服务端程序(Accept回调) / 210
6.6.6 服务端程序(接收回调) / 211
6.6.7 开启服务端 / 212
6.6.8 客户端界面 / 212
6.6.9 客户端程序 / 213
6.6.10 调试程序 / 215
6.7 MySQL / 216
6.7.1 配置MySQL环境 / 216
6.7.2 建立MySQL数据库 / 218
6.7.3 MySQL基础知识 / 218
6.7.4 MySQL留言板服务端程序 / 220
6.7.5 调试程序 / 222
6.8 类的序列化 / 223
6.9 定时器 / 225
6.10 线程互斥 / 226
6.11 通信协议和消息列表 / 228
6.11.1 通信协议 / 228
6.11.2 服务端程序 / 229
6.11.3 消息列表 / 229
6.11.4 客户端场景 / 230
6.11.5 客户端程序 / 231
6.11.6 调试 / 236
第7章 服务端框架 / 238
7.1 服务端架构 / 238
7.1.1 总体架构 / 238
7.1.2 游戏流程 / 239
7.1.3 连接的数据结构 / 240
7.1.4 数据库结构 / 241
7.1.5 项目结构 / 241
7.2 数据管理类DataMgr / 243
7.2.1 数据表结构 / 243
7.2.2 角色数据 / 244
7.2.3 Player的初步版本 / 244
7.2.4 连接数据库 / 245
7.2.5 防止sql注入 / 246
7.2.6 Register注册 / 247
7.2.7 CreatePlayer创建角色 / 249
7.2.8 登录校验 / 250
7.2.9 获取角色数据 / 251
7.2.10 保存角色数据 / 252
7.2.11 调试 / 253
7.3 临时数据 / 255
7.4 网络管理类ServNet / 256
7.4.1 粘包分包现象 / 256
7.4.2 粘包分包的处理方法 / 256
7.4.3 Conn连接类 / 257
7.4.4 ServNet网络处理类 / 260
7.4.5 ReceiveCb的粘包分包处理 / 261
7.4.6 发送消息 / 264
7.4.7 启动服务端 / 265
7.4.8 调试 / 265
7.5 心跳 / 267
7.5.1 心跳机制 / 267
7.5.2 时间戳 / 268
7.5.3 使用定时器 / 269
7.5.4 心跳协议 / 270
7.5.5 调试心跳协议 / 270
7.6 协议 / 271
7.6.1 协议基类 / 272
7.6.2 字符串协议 / 273
7.6.3 字节流协议 / 274
7.6.4 字节流辅助方法 / 276
7.6.5 使用协议 / 278
7.6.6 调试 / 280
7.7 中间层Player类 / 282
7.7.1 登录流程 / 282
7.7.2 下线 / 282
7.7.3 Player类的实现 / 283
7.8 消息分发 / 285
7.8.1 消息处理的类 / 285
7.8.2 消息处理类的实现 / 286
7.8.3 反射 / 287
7.9 注册登录 / 289
7.9.1 协议 / 289
7.9.2 注册功能 / 290
7.9.3 登录功能 / 291
7.9.4 登出功能 / 292
7.9.5 获取分数功能 / 293
7.9.6 增加分数功能 / 293
7.9.7 输出服务端信息 / 294
7.9.8 Main中的调用 / 294
7.9.9 测试用客户端 / 295
7.9.10 调试 / 297
第8章 客户端网络模块 / 300
8.1 网络模块设计 / 300
8.1.1 整体架构 / 300
8.1.2 监听表 / 301
8.1.3 类结构 / 301
8.2 委托 / 302
8.2.1 使用委托 / 302
8.2.2 示例 / 302
8.2.3 操作符 / 303
8.3 MsgDistribution消息分发 / 304
8.3.1 MsgDistribution的成员 / 304
8.3.2 DispatchMsgEvent / 305
8.3.3 AddListener / 306
8.4 Connection连接 / 307
8.4.1 Connection的成员 / 307
8.4.2 连接服务端 / 309
8.4.3 关闭连接 / 309
8.4.4 异步回调 / 310
8.4.5 消息处理 / 311
8.4.6 发送数据 / 311
8.4.7 心跳机制 / 312
8.5 NetMgr网络管理 / 313
8.6 登录注册功能 / 314
8.6.1 界面资源 / 315
8.6.2 登录面板功能 / 316
8.6.3 注册面板功能 / 319
8.7 位置同步的服务端程序 / 320
8.7.1 协议 / 321
8.7.2 场景 / 321
8.7.3 协议处理 / 324
8.7.4 事件处理 / 324
8.8 位置同步的客户端程序 / 325
8.8.1 客户端资源 / 325
8.8.2 客户端程序 / 326
8.9 调试框架 / 331
第9章 房间系统 / 334
9.1 游戏界面 / 335
9.1.1 登录面板 / 335
9.1.2 注册面板 / 336
9.1.3 提示面板 / 337
9.1.4 UGUI的滑动区域 / 338
9.1.5 房间列表面板 / 340
9.1.6 房间面板 / 342
9.1.7 创建预设 / 343
9.2 协议设计 / 344
9.3 提示框的功能实现 / 346
9.4 登录注册的功能实现 / 348
9.4.1 登录面板的功能 / 348
9.4.2 GameMgr / 349
9.4.3 注册面板的功能 / 350
9.4.4 调试 / 351
9.5 房间列表面板的功能 / 352
9.5.1 获取部件 / 353
9.5.2 开启监听 / 354
9.5.3 刷新成绩栏 / 355
9.5.4 刷新房间列表 / 355
9.5.5 刷新按钮 / 357
9.5.6 加入房间 / 357
9.5.7 新建房间 / 358
9.5.8 登出 / 359
9.5.9 测试面板 / 360
9.6 房间面板的功能 / 360
9.6.1 获取部件 / 361
9.6.2 监听 / 362
9.6.3 刷新列表 / 362
9.6.4 退出按钮 / 364
9.6.5 开始战斗 / 365
9.6.6 测试面板 / 366
第10章 房间系统服务端 / 368
10.1 玩家数据 / 368
10.2 房间类 / 370
10.2.1 数据结构 / 370
10.2.2 添加玩家 / 371
10.2.3 删除玩家 / 372
10.2.4 更换房主 / 373
10.2.5 广播消息 / 373
10.2.6 输出房间信息 / 374
10.3 房间管理器 / 374
10.3.1 数据结构 / 374
10.3.2 创建房间 / 375
10.3.3 离开房间 / 376
10.3.4 输出房间列表 / 376
10.4 玩家消息处理 / 377
10.4.1 查询成绩GetAchieve / 377
10.4.2 获取房间列表GetRoomList / 377
10.4.3 创建房间CreateRoom / 378
10.4.4 加入房间EnterRoom / 379
10.4.5 获取房间信息GetRoomInfo / 380
10.4.6 离开房间LeaveRoom / 380
10.5 玩家事件处理 / 381
10.6 调试 / 382
第11章 战场系统 / 386
11.1 协议设计 / 386
11.2 开始战斗 / 388
11.2.1 客户端战场数据 / 389
11.2.2 获取阵营 / 390
11.2.3 清理场景 / 390
11.2.4 开始战斗 / 391
11.2.5 产生坦克 / 391
11.2.6 服务端战场数据 / 394
11.2.7 服务端条件检测 / 395
11.2.8 服务端开启战斗 / 395
11.2.9 服务端消息处理 / 396
11.2.10 调试程序 / 397
11.3 三种同步位置方案 / 398
11.3.1 瞬移式位置同步 / 399
11.3.2 移动式位置同步 / 400
11.3.3 预测式位置同步 / 401
11.4 位置同步的服务端处理 / 402
11.5 位置同步的客户端处理 / 404
11.5.1 发送同步信息 / 404
11.5.2 网络同步类型 / 405
11.5.3 预测目标位置 / 405
11.5.4 向目标位置移动 / 408
11.5.5 监听服务端协议 / 408
11.5.6 调试 / 409
11.6 同步炮塔炮管 / 410
11.7 轮子和履带 / 411
第12章 炮火同步 / 413
12.1 炮弹同步 / 413
12.1.1 协议设计 / 413
12.1.2 服务端处理 / 414
12.1.3 客户端发送同步信息 / 415
12.1.4 客户端接收同步信息 / 416
12.2 伤害同步 / 418
12.2.1 协议设计 / 418
12.2.2 服务端处理 / 418
12.2.3 客户端发送伤害信息 / 420
12.2.4 客户端接收伤害信息 / 420
12.3 胜负判断 / 423
12.3.1 协议设计 / 423
12.3.2 服务端胜负判断 / 423
12.3.3 服务端处理战斗结果 / 424
12.3.4 客户端接收战斗结果 / 425
12.4 中途退出 / 427
12.5 完整的游戏 / 428
资源截图: