书籍详情
《3册 Unity 3D脚本编程 使用C#语言开发跨平台游戏+Unity3D动作游戏开发实战+Unit》[49M]百度网盘|亲测有效|pdf下载
  • 3册 Unity 3D脚本编程 使用C#语言开发跨平台游戏+Unity3D动作游戏开发实战+Unit

  • 热度:6309
  • 上架时间:2024-06-30 09:38:03
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

书名:Unity 3D脚本编程 使用C#语言开发跨平台游戏

定价:79.00元

作者:陈嘉栋

出版社:电子工业出版社

ISBN:9787121297182

本书以Unity 3D的跨平台基础Mono以及其游戏脚本语言C#为基础进行讲解。全面系统地剖析了Unity 3D的跨平台原理以及游戏脚本开发的特点。第1章主要介绍了Unity 3D引擎的历史以及编辑器的基本知识;第2章主要介绍了Mono,以及Unity 3D利用Mono实现跨平台的原理,并且分析了C#语言为何更加适合Unity 3D游戏开发;第3章到第10章主要介绍了Unity 3D游戏脚本语言C#在使用Unity 3D开发过程中的知识点,包括Unity 3D脚本的类型基础、数据结构、在Unity 3D脚本中使用泛型、使用委托和事件打造自己的消息系统、利用定制特性来拓展Unity 3D的编辑器、Unity 3D协程背后的秘密――迭代器以及可空类型和序列化在Unity 3D中使用的相关知识;第11章到第14章,则主要介绍了Unity 3D的资源管理以及优化和编译的内容。

第1 章 Hello Unity 3D 1

1.1 Unity 3D 游戏引擎进化史 1

1.2 Unity 3D 编辑器初印象 5

1.2.1 Project 视图 5

1.2.2 Inspector 视图8

1.2.3 Hierarchy 视图 9

1.2.4 Game 视图 10

1.2.5 Scene 视图12

1.2.6 绘图模式 14

1.2.7 渲染模式16

1.2.8 场景视图控制 17

1.2.9 Effects 菜单和Gizmos 菜单18

1.3 Unity 3D 的组成 18

1.4 为何需要游戏脚本 20

1.5 本章总结 21

第2 章 Mono 所搭建的脚本核心基础22

2.1 Mono 是什么22

2.1.1 Mono 的组成22

2.1.2 Mono 运行时 23

2.2 Mono 如何扮演脚本的角色24

2.2.1 Mono 和脚本 24

2.2.2 Mono 运行时的嵌入26

2.3 Unity 3D 为何能跨平台?聊聊CIL38

2.3.1 Unity 3D 为何能跨平台 38

2.3.2 CIL 是什么 40

2.3.3 Unity 3D 如何使用CIL 跨平台 44

2.4 脚本的选择,C# 或 48

2.4.1 最熟悉的陌生人——UnityScript48

2.4.2 UnityScript 与 51

2.4.3 C#与UnityScript 55

2.5 本章总结57

第3 章 Unity 3D 脚本语言的类型系统58

3.1 C#的类型系统 58

3.2 值类型和引用类型 65

3.3 Unity 3D 脚本语言中的引用类型73

3.4 Unity 3D 游戏脚本中的值类型90

3.4.1 Vector2、Vector3 以及Vector4 90

3.4.2 其他常见的值类型94

3.5 装箱和拆箱95

3.6 本章总结98

第4 章 Unity 3D 中常用的数据结构99

4.1 Array 数组100

4.2 ArrayList 数组101

4.3 List<T>数组102

4.4 C#中的链表——LinkedList<T>103

4.5 队列(Queue<T>)和栈(Stack<T>)107

4.6 Hash Table(哈希表)和Dictionary<K,T>(字典)112

4.7 本章总结120

第5 章 在Unity 3D 中使用泛型121

5.1 为什么需要泛型机制121

5.2 Unity 3D 中常见的泛型 124

5.3 泛型机制的基础127

5.3.1 泛型类型和类型参数 128

5.3.2 泛型类型和继承131

5.3.3 泛型接口和泛型委托 131

5.3.4 泛型方法136

5.4 泛型中的类型约束和类型推断139

5.4.1 泛型中的类型约束139

5.4.2 类型推断144

5.5 本章总结146

第6 章 在Unity 3D 中使用委托149

6.1 向Unity 3D 中的SendMessage 和BroadcastMessage 说拜拜150

6.2 认识回调函数机制——委托151

6.3 委托是如何实现的154

6.4 委托是如何调用多个方法的 160

6.5 用事件(Event)实现消息系统164

6.6 事件是如何工作的 169

6.7 定义事件的观察者,实现观察者模式 172

6.8 委托的简化语法 177

6.8.1 不必构造委托对象177

6.8.2 匿名方法 178

6.8.3 Lambda 表达式 196

6.9 本章总结 201

第7 章 Unity 3D 中的定制特性 202

7.1 初识特性——Attribute 202

7.1.1 DllImport 特性203

7.1.2 Serializable 特性 205

7.1.3 定制特性到底是谁 207

7.2 Unity 3D 中提供的常用定制特性208

7.3 定义自己的定制特性类 213

7.4 检测定制特性 216

7.5 亲手拓展Unity 3D 的编辑器 217

7.6 本章总结227

第8 章 Unity 3D 协程背后的迭代器 228

8.1 初识Unity 3D 中的协程 228

8.1.1 使用StartCoroutine 方法开启协程 229

8.1.2 使用StopCoroutine 方法停止一个协程 233

8.2 使用协程实现延时效果234

8.3 Unity 3D 协程背后的秘密——迭代器 238

8.3.1 你好,迭代器 238

8.3.2 原来是状态机 242

8.3.3. 状态管理 248

8.4 WWW和协程 253

8.5 Unity 3D 协程代码实例 257

8.6 本章总结259

第9 章 在Unity 3D 中使用可空型 260

9.1 如果没有值260

9.2 表示空值的一些方案 261

9.2.1 使用魔值 261

9.2.2 使用标志位 261

9.2.3 借助引用类型来表示值类型的空值 265

9.3 使用可空值类型 267

9.4 可空值类型的简化语法 272

9.5 可空值类型的装箱和拆箱 278

9.6 本章总结 280

第10 章 从序列化和反序列化看Unity 3D 的存储机制 281

10.1 初识序列化和反序列化 281

10.2 控制类型的序列化和反序列化 290

10.2.1 如何使类型可以序列化 290

10.2.2 如何选择序列化的字段和控制反序列化的流程 292

10.2.3 序列化、反序列化中流的上下文介绍及应用 296

10.3 Unity 3D 中的序列化和反序列化 299

10.3.1 Unity 3D 的序列化概览 299

10.3.2 对Unity 3D 游戏脚本进行序列化的注意事项302

10.3.3 如何利用Unity 3D 提供的序列化器对自定义类型进行序列化 305

10.4 Prefab 和实例化之谜——序列化和反序列化的过程309

10.4.1 认识预制体Prefab 309

10.4.2 实例化一个游戏对象311

10.4.3 序列化和反序列化之谜314

10.5 本章总结317

第11 章 移动平台动态读取外部文件 318

11.1 假如我想在编辑器里动态读取文件318

11.2 移动平台的资源路径问题 320

11.3 移动平台读取外部文件的方法323

11.4 使用Resources 类加载资源330

11.5 使用WWW类加载资源332

11.5.1 利用WWW类的构造函数实现资源下载332

11.5.2 利用 WWW.LoadFromCacheOrDownload 方法实现资源下载333

11.5.3 利用WWWForm 类实现POST 请求335

11.6 本章总结335

第12 章 在Unity 3D 中使用AssetBundle 336

12.1 初识AssetBundle 336

12.2 使用AssetBundle 的工作流程337

12.2.1 开发阶段 337

12.2.2 运行阶段340

12.3 如何使用本地磁盘中的AssetBundle 文件344

12.4 AssetBundle 文件的平台兼容性345

12.5 AssetBundle 如何识别资源345

12.6 本章总结346

第13 章 Unity 3D 优化347

13.1 看看Unity 3D 优化需要从哪里着手 347

13.2 CPU 方面的优化348

13.2.1 对DrawCall 的优化 348

13.2.2 对物理组件的优化 354

13.2.3 处理内存,却让CPU 受伤的GC355

13.2.4 对代码质量的优化356

13.3 对GPU 的优化 357

13.3.1 减少绘制的数目358

13.3.2 优化显存带宽358

13.4 内存的优化 359

13.4.1 Unity 3D 的内部内存 359

13.4.2 Mono 的托管内存 360

13.5 本章总结 363

第14 章 Unity 3D 的脚本编译 365

14.1 Unity 3D 脚本编译流程概览365

14.2 JIT 即时编译368

14.2.1 使用编译器将游戏脚本编译为托管模块368

14.2.2 托管模块和程序集 369

14.2.3 使用JIT 编译执行程序集的代码 370

14.2.4 使用JIT 即时编译的优势 371

14.3 AOT 提前编译372

14.3.1 在Unity 3D 中使用AOT 编译372

14.3.2 iOS 平台和Full-AOT 编译 373

14.3.3 AOT 编译的优势 374

14.4 谁偷了我的热更新?Mono、JIT 还是iOS 374

14.4.1 从一个常见的报错说起375

14.4.2 美丽的JIT 377

14.4.3 模拟JIT 的过程 378

14.4.4 iOS 平台的自我保护 381

14.5 Unity 3D 项目的编译与发布 382

14.5.1 选择游戏场景和目标平台 382

14.5.2 Unity 3D 发布项目的内部过程384

14.5.3 Unity 3D 部署到Android 平台 384

14.5.4 Unity 3D 部署到iOS 平台 386

14.6 本章总结 389

书名:Unity3D网络游戏实战(2版)

定价:¥89.00

作者:罗培羽

I S B N :978-7-111-61217-9

条码书号:9787111612179

出版日期:2019/1/1

版 次:2-1

出 版 社:机械工业出版社

丛 书 名: 游戏开发与设计技术丛书 

页 数:432  

本书针对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.8 Timer  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.3 IsAccountExist  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.出战斗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

书名: Unity3D动作游戏开发实战

作者 : 周尚宣 编著

定价 : 79.00 元

出版社 : 机械工业出版社

出版时间 : 2020/06

语种 : 简体中文

种类 : 科技类书籍

开本 : 16开

页数 : 260 页

ISBN : 9787111657859

动作游戏作为一大热门的游戏品类,一直不缺少玩家受众欢迎。但其较高的工艺门槛、技术细节、复杂度等都阻碍了其开发进程。本书结合作者自身的研发经验进行撰写,从角色、战斗、关卡、物理等多个剖面去解析动作游戏在研发中遇到的总总困难,尽可能的绕过或避免研发中的已知问题,终帮助读者在对于该品类游戏的理解与开发上提供助力。

长期以来,以动作游戏为核心的书籍一直较为匮乏。因此也成为了本书撰写的契机。通过对本书的阅读,不管是爱好动作游戏的独立开发者,还是期望进一步提升自身能力的游戏从业者,相信您都能在其中有所收获。

前言

1篇 概述及前期准备

1章 概述 2

1.1 本书的侧重点及目标 2

1.2 Unity3D引擎在大环境中的发展现状 4

1.3 Steam、独立游戏及动作游戏的现状 5

1.3.1 Steam平台简介 5

1.3.2 国内独立游戏的开端 6

1.3.3 细看动作类独立游戏 6

1.4 设计目标:大而全还是小而精 7

1.4.1 资源复用 7

1.4.2 舍弃不必要的维度 8

1.4.3 选择合适的题材 8

2章 前期准备 9

2.1 通用预备知识 9

2.1.1 使用协程分解复杂逻辑 9

2.1.2 自定义的插值公式 10

2.1.3 消息模块的设计 12

2.1.4 模块间的管理与协调 13

2.2 基于编辑器环境的基础知识 14

2.2.1 编辑器工具的编写 15

2.2.2 关联游戏配置数据 19

2.2.3 常量生成器 22

2.3 3D游戏所需要的数学知识 24

2.3.1 向量加减 24

2.3.2 点乘 25

2.3.3 乘 26

2.3.4 投影 27

2.3.5 元数 28

2.4 其他准备 29

2.4.1 关注项目中的GC问题 29

2.4.2 控制台工具的编写 31

2.4.3 项目目录结构建议 32

2.4.4 项目的程序流程结构建议 33

2篇 动作游戏核心模块

3章 物理系统详解 36

3.1 物理系统基本内容梳理 36

3.1.1 系统参数设置 36

3.1.2 Fied Update更新频率 37

3.1.3 Rigidbody参数简介 38

3.1.4 物理材质设置 38

3.2 常见问题 39

3.2.1 物理步的理解误区 39

3.2.2 重叠与挤出问题 40

3.2.3 地面检测优化处理 40

3.2.4 Dash与瞬移的优化 41

3.2.5 踩头问题及解决方法 42

3.2.6 动画根运动的物理问题 45

3.3 为动作游戏定制碰撞系统 46

3.3.1 设计目标 46

3.3.2 OBB碰撞检测简介 47

3.3.3 Bo与Bo相交测试 47

3.3.4 Bo与Sphere相交测试 50

3.3.5 Sphere与Sphere相交测试 52

3.3.6 不同形状的边界点获取 52

3.3.7 碰撞对象管理器 56

4章 主角系统设计 58

4.1 基础要素 58

4.1.1 同类游戏对比 58

4.1.2 逻辑编写前的准备工作 59

4.1.3 移动逻辑 59

4.1.4 跳跃逻辑 65

4.1.5 攻击逻辑 67

4.1.6 受击逻辑 69

4.1.7 应对脚本类爆炸的问题 71

4.2 常规功能 72

4.2.1 角色有限状态机 72

4.2.2 设计挂接点接口 73

4.2.3 技能系统 74

4.2.4 连续技功能 75

4.3 场景互动部分 78

4.3.1 角色冻结 78

4.3.2 场景互动组件 79

5章 关卡部分详解 82

5.1 前期考量 82

5.1.1 从Graybo说起 82

5.1.2 规划层级结构 83

5.1.3 模型的导出与调试 84

5.2 开发阶段深入解析 85

5.2.1 SpawnPoint的使用 85

5.2.2 扩展SpawnPoint 87

5.2.3 对象池的编写 92

5.2.4 关卡模块的序列化 94

5.2.5 战斗壁障的实现 99

5.3 光照与烘焙 102

5.3.1 不同GI类型的选择 102

5.3.2 预计算光照的使用 103

5.3.3 光照探针的使用 104

5.3.4 反探针简要介绍 104

5.3.5 借助LPPV优化烘焙 105

6章 战斗部分深入解析 107

6.1 角色模块 107

6.1.1 Motor组件的设计 107

6.1.2 动画事件的处理 110

6.1.3 Animator常见问题整理 112

6.2 设计一个可扩展的战斗系统 114

6.2.1 基础战斗框架编写 115

6.2.2 添加伤害传递逻辑 117

6.2.3 配置伤害碰撞 120

6.2.4 僵直度组件的添加 121

6.2.5 浮空组件的添加 123

6.3 敌人AI的设计 125

6.3.1 AI设计综述 125

6.3.2 Behavior Designer插件简介 127

6.3.3 使用协程来开发AI程序 128

6.3.4 可控制的随机行为 131

6.3.5 设计共享数据段 132

6.3.6 场景信息的获取 133

7章 其他模块 135

7.1 相机 135

7.1.1 常见的相机模式分类 135

7.1.2 常规三人称相机实现 136

7.1.3 滑轨相机的实现 140

7.2 Cutscene过场动画 145

7.2.1 不同类型的Cutscene简介 146

7.2.2 使用Timeline 146

7.2.3 使用脚本过场动画 148

7.3 输入、IK与音频管理 149

7.3.1 InControl插件的使用 149

7.3.2 Final-IK插件的使用 151

7.3.3 音频管理 153

8章 画面特效与后处理 160

8.1 着色器Shader 160

8.1.1 3D游戏中的常见Shader 160

8.1.2 死亡径向溶解效果 161

8.1.3 受击边缘泛光效果 164

8.1.4 基于屏幕门的抖动透明 166

8.2 CommandBuffer的使用 169

8.2.1 CommandBuffer简介 169

8.2.2 制作主角特显效果 171

8.3 后处理 175

8.3.1 PPS后处理工具 175

8.3.2 编写自己的后处理脚本 177

8.4 计算着色器Compute Shader 179

8.4.1 什么是Compute Shader 179

8.4.2 语法及使用简介 179

8.4.3 使用案例 181

3篇 项目案例实战

9章 案例剖析 190

9.1 《忍者龙剑传∑2》案例剖析 190

9.1.1 断肢效果的再实现 190

9.1.2 流血喷溅程序的再实现 193

9.1.3 角色残影效果的再实现 202

9.2 《君临都市》案例剖析 206

9.2.1 通用动作方案设计 206

9.2.2 组合攻击的再实现 207

9.3 《战神3》案例剖析 211

9.3.1 吸魂效果的再实现 211

9.3.2 链刃伸缩效果的再实现 216

9.3.3 赫利俄斯照的再实现 220

10章 横版动作游戏Demo设计 227

10.1 规划与调配 227

10.1.1 简要规划 227

10.1.2 资源准备 228

10.1.3 项目配置 228

10.2 基础框架的整合 231

10.2.1 战斗模块的整合 231

10.2.2 动画事件的整合 232

10.3 玩家逻辑的整合 233

10.3.1 输入逻辑封装 233

10.3.2 玩家逻辑的编写 234

10.4 敌人逻辑的编写 241

10.4.1 基础逻辑的编写 241

10.4.2 游走逻辑的编写 244

10.4.3 受击逻辑的编写 246

10.5 构建游戏 247

10.5.1 预制体的组装 247

10.5.2 出生点逻辑的编写 248

10.5.3 回顾与总结 249

^_^:06727d3ee95e1e80000080602c697748