《Unity3D网络游戏实战》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:罗培羽著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2019
  • ISBN:9787111612179
  • 页数:416 页
图书介绍:本书针对第1版进行改版,将“单机游戏”融入到网络部分的实例中,在讲解网络通信原理的同时,给出各个知识点的案例,并开发客户端的网络模块和服务端程序框架。然后将一部分的坦克游戏改造成联网对战的多人游戏。本书基于Unity3D最新版本编写,书中例子为商业游戏简化版本,读者可以从中了解商业游戏的设计思路和实现方法。

第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消息事件 168

6.8接收数据 170

6.8.1新的成员 171

6.8.2 ConnectCallback 171

6.8.3 ReceiveCallback 172

6.8.4 OnReceiveData 172

6.8.5 Update 174

6.8.6测试 175

6.9心跳机制 176

6.9.1 PING和PONG协议 176

6.9.2成员变量 177

6.9.3发送PING协议 178

6.9.4监听PONG协议 178

6.9.5测试 179

6.10 Protobuf协议 179

6.10.1什么是Protobuf 179

6.10.2编写proto文件 180

6.10.3生成协议类 181

6.10.4导入protobuf-net.dll 183

6.10.5编码解码 183

第7章 通用服务端框架 186

7.1服务端架构 187

7.1.1总体架构 187

7.1.2模块划分 187

7.1.3游戏流程 188

7.2 Json编码解码 189

7.2.1添加协议文件 189

7.2.2引用System.web.Extensions 190

7.2.3修改MsgBase类 191

7.2.4测试 192

7.3网络模块 193

7.3.1整体结构 193

7.3.2 ClientState 194

7.3.3开启监听和多路复用 194

7.3.4处理监听消息 196

7.3.5处理客户端消息 197

7.3.6关闭连接 198

7.3.7处理协议 199

7.3.8Timer 200

7.3.9发送协议 201

7.3.10测试 202

7.4心跳机制 204

7.4.1 lastPingTime 204

7.4.2时间戳 204

7.4.3回应MsgPing协议 205

7.4.4超时处理 205

7.4.5测试程序 206

7.5玩家的数据结构 206

7.5.1完整的ClientState 206

7.5.2 PlayerData 208

7.5.3 Player 208

7.5.4 PlayerManager 209

7.6配置MySQL数据库 211

7.6.1安装并启动MySQL数据库 211

7.6.2安装Navicat for MySQL 213

7.6.3配置数据表 214

7.6.4 安装connector 215

7.6.5 MySQL基础知识 216

7.7数据库模块 217

7.7.1连接数据库 218

7.7.2防止SQL注入 220

7.7.3IsAccountExist 220

7.7.4 Register 221

7.7.5 CreatePlayer 223

7.7.6 CheckPassword 224

7.7.7 GetPlayerData 225

7.7.8 UpdatePlayerData 226

7.8登录注册功能 226

7.8.1注册登录协议 227

7.8.2记事本协议 228

7.8.3注册功能 229

7.8.4登录功能 229

7.8.5退出功能 231

7.8.6 获取文本功能 231

7.8.7 保存文本功能 231

7.8.8客户端界面 232

7.8.9 客户端监听 233

7.8.10客户端注册功能 235

7.8.11客户端登录功能 235

7.8.12客户端记事本功能 236

7.8.13测试 236

第8章 完整大项目《坦克大战》 239

8.1《坦克大战》游戏功能 239

8.1.1登录注册 239

8.1.2房间系统 240

8.1.3战斗系统 241

8.2坦克模型 242

8.2.1导入模型 242

8.2.2模型结构 243

8.3资源管理器 245

8.3.1设计构想 245

8.3.2代码实现 245

8.3.3测试 246

8.4坦克类 246

8.4.1设计构想 246

8.4.2代码实现 246

8.4.3测试 247

8.5行走控制 248

8.5.1速度参数 249

8.5.2移动控制 249

8.5.3测试 250

8.5.4走在地形上 251

8.6坦克爬坡 253

8.6.1 Unity的物理系统 253

8.6.2添加物理组件 253

8.6.3测试 254

8.7相机跟随 255

8.7.1功能需求 255

8.7.2数学原理 255

8.7.3编写代码 257

8.7.4测试 258

8.8旋转炮塔 260

8.8.1炮塔元素 260

8.8.2旋转控制 261

8.8.3测试 262

8.9发射炮弹 262

8.9.1制作炮弹预设 262

8.9.2制作爆炸效果 263

8.9.3炮弹组件 264

8.9.4坦克开炮 266

8.9.5测试 268

8.10摧毁敌人 269

8.10.1坦克的生命值 269

8.10.2焚烧特效 270

8.10.3坦克被击中处理 271

8.10.4炮弹的攻击处理 272

8.10.5测试 272

第9章UI界面模块 274

9.1界面模块的设计 274

9.1.1简单的界面调用 274

9.1.2通用界面模块 275

9.2场景结构 277

9.3面板基类BasePanel 278

9.3.1设计要点 278

9.3.2代码实现 278

9.3.3知识点 279

9.4界面管理器PanelManager 281

9.4.1层级管理 281

9.4.2打开面板 282

9.4.3关闭面板 284

9.5登录面板LoginPanel 284

9.5.1导入资源 284

9.5.2 UI组件 286

9.5.3制作面板预设 286

9.5.4登录面板类 289

9.5.5打开面板 289

9.5.6引用UI组件 290

9.5.7网络监听 291

9.5.8登录和注册按钮 293

9.5.9 收到登录协议 293

9.6注册面板RegisterPanel 294

9.6.1制作面板预设 294

9.6.2注册面板类 296

9.6.3按钮事件 298

9.6.4收到注册协议 299

9.7提示面板TipPanel 300

9.7.1制作面板预设 300

9.7.2提示面板类 301

9.7.3测试面板 302

9.8游戏入口GameMain 303

9.8.1设计要点 303

9.8.2代码实现 304

9.8.3缓存用户名 305

9.9功能测试 306

9.9.1登录 306

9.9.2注册 307

9.9.3下线 309

第10章 游戏大厅和房间 310

10.1列表面板预设 311

10.1.1整体结构 311

10.1.2个人信息栏 312

10.1.3操作栏 312

10.1.4房间列表栏 313

10.1.5 Scroll View 315

10.1.6列表项Room 316

10.2房间面板预设 318

10.2.1整体结构 318

10.2.2 列表栏 319

10.2.3列表项 player 320

10.2.4控制栏 322

10.3协议设计 322

10.3.1查询战绩MsgGetAchieve协议 323

10.3.2查询 房间列表MsgGetRoom-List协议 323

10.3.3创建房间 MsgCreateRoom协议 324

10.3.4进入房间 MsgEnterRoom协议 324

10.3.5查询房间信息 MsgGetRoom-Info协议 324

10.3.6退出房间 MsgLeaveRoom协议 325

10.3.7开始战斗MsgStartBattle协议 325

10.4列表面板逻辑 326

10.4.1面板类 326

10.4.2获取部件 326

10.4.3网络监听 328

10.4.4刷新战绩 329

10.4.5刷新房间列表 329

10.4.6 加入房间 330

10.4.7创建房间 331

10.4.8刷新按钮 332

10.5房间面板逻辑 332

10.5.1面板类 332

10.5.2获取部件 333

10.5.3网络监听 334

10.5.4刷新玩家列表 334

10.5.5退出房间 336

10.5.6开始战斗 336

10.6打开列表面板 337

10.7服务端玩家数据 337

10.7.1存储数据 338

10.7.2临时数据 338

10.8服务端房间类 339

10.8.1管理器和房间类的关系 339

10.8.2房间类的设计要点 340

10.8.3添加玩家 341

10.8.4选择阵营 343

10.8.5删除玩家 343

10.8.6选择新房主 345

10.8.7广播消息 345

10.8.8生成房间信息 345

10.9服务端房间管理器 347

10.9.1数据结构 347

10.9.2获取房间 347

10.9.3添加房间 348

10.9.4删除房间 348

10.9.5生成列表信息 348

10.10服务端消息处理 349

10.10.1查询战绩MsgGet-Achieve 350

10.10.2查询房间列表MsgGetRoom-List 350

10.10.3创建房间MsgCreate-Room 351

10.10.4进入房间MsgEnterRoom 351

10.10.5查询房间信息 MsgGet-RoomInfo 352

10.10.6离开房间 MsgLeave-Room 352

10.11玩家事件处理 353

10.12测试 354

第11章 战斗和胜负判定 358

11.1协议设计 358

11.1.1进入战斗MsgEnterBattle 359

11.1.2战斗结果MsgBattleResult 359

11.1.3退出战斗MsgLeaveBattle 360

11.2坦克 360

11.2.1不同阵营的坦克预设 360

11.2.2战斗模块 361

11.2.3同步坦克SyncTank 362

11.2.4坦克的属性 362

11.3战斗管理器 363

11.3.1设计要点 363

11.3.2管理器类 363

11.3.3坦克管理 364

11.3.4重置战场 365

11.3.5开始战斗 366

11.3.6产生坦克 367

11.3.7战斗结束 369

11.3.8玩家离开 369

11.4战斗结果面板 369

11.4.1面板预设 369

11.4.2面板逻辑 371

11.5服务端开启战斗 373

11.5.1能否开始战斗 373

11.5.2定义出生点 373

11.5.3坦克信息 376

11.5.4开启战斗 377

11.5.5消息处理 377

11.6服务端胜负判断 378

11.6.1是否死亡 379

11.6.2胜负决断函数 379

11.6.3定时器 380

11.6.4 Room::Update 380

11.7服务端断线处理 381

11.8测试 382

11.8.1进入战场 382

11.8.2离开战场 384

第12章 同步战斗信息 386

12.1同步理论 387

12.1.1同步的过程 387

12.1.2同步的难题 387

12.2状态同步 389

12.2.1直接状态同步 389

12.2.2跟随算法 390

12.2.3预测算法 390

12.3帧同步 391

12.3.1指令同步 391

12.3.2从Update说起 392

12.3.3什么是同步帧 393

12.3.4指令 394

12.3.5指令的执行 394

12.4协议设计 395

12.4.1位置同步MsgSyncTank 396

12.4.2开火MsgFire 396

12.4.3击中MsgHit 397

12.5发送同步信息 397

12.5.1发送位置信息 397

12.5.2发送开火信息 398

12.5.3发送击中信息 399

12.6处理同步信息 400

12.6.1协议监听 400

12.6.2 OnMsgSyncTank 401

12.6.3 OnMsgFire 401

12.6.4 OnMsgHit 402

12.7同步坦克SyncTank 402

12.7.1预测算法的成员变量 402

12.7.2移动到预测位置 403

12.7.3 初始化 404

12.7.4更新预测位置 405

12.7.5炮弹同步 406

12.8服务端消息处理 406

12.8.1位置同步MsgSyncTank 407

12.8.2 开火MsgFire 408

12.8.3 击中MsgHit 409

12.8.4调试 410

12.9完善细节 412

12.9.1滚动的轮子和履带 412

12.9.2灵活操作 413

12.9.3准心 413

12.9.4 自动瞄准 414

12.9.5界面和场景优化 414

12.9.6 战斗面 板 415

12.9.7击杀提示 416

12.10结语 416