| 作者 |
| 周尚宣 王静逸 刘岵 |
| 丛书名 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782007071039 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------Unity3D动作游戏开发实战--------------------------- 动作游戏作为一大热门的游戏品类,一直不缺少玩家受众欢迎。但其较高的工艺门槛、技术细节、复杂度等都阻碍了其开发进程。本书结合作者自身的研发经验进行撰写,从角色、战斗、关卡、物理等多个剖面去解析动作游戏在研发中遇到的总总困难,尽可能的绕过或避免研发中的已知问题,最终帮助读者在对于该品类游戏的理解与开发上提供助力。 长期以来,以动作游戏为核心的书籍一直较为匮乏。因此也成为了本书撰写的契机。通过对本书的阅读,不管是爱好动作游戏的独立开发者,还是期望进一步提升自身能力的游戏从业者,相信您都能在其中有所收获。 ---------------------------Unity与C++网络游戏开发实战:基于VR、AI与分布式架构--------------------------- 本书以Unity图形开发和C++网络开发为主线,系统地介绍了网络仿真系统和网络游戏开发的相关知识。本书从客户端开发和服务器端开发两个方面着手,讲解了一个完整的仿真模拟系统的开发,既有详细的基础知识,也有常见的流行技术,更有完整的项目实战案例,而且还介绍了AR、人工智能和分布式架构等前沿知识在开发中的应用。本书共21章,分为4篇。第1、2篇为客户端开发,主要介绍了Unity基础与实战开发;第3、4篇为服务器端开发,主要介绍了C++网络开发基础与实战 本书内容全面,讲解通俗易懂,适合网络游戏开发、军事虚拟仿真和智能网络仿真系统开发等领域的开发人员和技术爱好者阅读,也适合系统架构人员阅读。另外,本书还适合作为相关院校和培训机构的培训教材使用。 |
| 目录 |
---------------------------Unity3D动作游戏开发实战--------------------------- 前言 第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 Fixed 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 Box与Box相交测试 47 3.3.4 Box与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 从Graybox说起 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 ---------------------------Unity与C++网络游戏开发实战:基于VR、AI与分布式架构--------------------------- 序言 前言 第1篇 Unity基础(客户端) 第1章 Unity介绍与相关环境的搭建和调试 2 1.1 Unity引擎介绍 2 1.1.1 Unity3D引擎部分 2 1.1.2 Unity3D编辑器部分 3 1.2 Unity引擎发展 5 1.3 Unity引擎应用场景和使用范围介绍 5 1.4 Unity软件安装 7 1.5 Unity Windows环境的安装和搭建 9 1.6 Unity Android环境的安装和搭建 11 1.7 Unity授权 15 1.8 Unity服务 16 第2章 编写Hello World与仿真系统体验 18 2.1 创建第一个空的工程 18 2.2 创建第一个脚本程序 20 2.3 编写第一个Hello Word程序 21 2.4 编译输出第一个程序 22 2.5 运行Hello World 23 2.6 打开仿真程序Demo 23 2.7 这是一个很好玩的仿真系统 25 2.8 进入训练场准备体验训练操作 25 2.9 控制人物行走 26 2.10 开动第一辆汽车 27 2.11 完成第一个仿真任务 27 2.12 本章小结与分析 28 第3章 Unity游戏开发语言 29 3.1 C#语言介绍 29 3.2 C#常用数据结构介绍 31 3.2.1 ArrayList链表结构 31 3.2.2 泛型List 31 3.2.3 Stack栈 32 3.2.4 队列Queue 33 3.2.5 字典Dictionary 34 3.3 C#的接口与继承 35 3.3.1 实现继承和接口继承 35 3.3.2 多重继承 35 3.3.3 结构的继承 35 3.4 C#的委托 37 3.5 C#多线程使用介绍 38 3.6 C#的反射机制 39 3.7 Unity中使用泛型 42 3.8 Unity中使用协程 42 3.9 Unity的序列化和网络协议库介绍 45 3.10 Unity中使用CLR进行Native交互 46 3.11 Unity中使用热更新语言Lua 47 3.12 本章小结与分析 50 第4章 在Unity中使用图形学知识 51 4.1 3D数学基本知识在游戏中的应用 51 4.2 三维坐标系 52 4.3 顶点坐标变换 53 4.3.1 向量是什么 53 4.3.2 矩阵是什么 54 4.3.3 如何操作向量 55 4.3.4 如何处理点或者向量与矩阵的乘法 55 4.3.5 点和向量通过矩阵的变换 56 4.4 光照与材质 58 4.4.1 什么是Shader的基本光照模型 59 4.4.2 什么是光照模型 59 4.4.3 什么是材质 61 4.5 Unity引擎中的渲染管线流程 67 4.6 Unity中实现模型的缩放和旋转等程序处理 70 4.7 Unity中计算射线相关的程序处理 74 4.8 Unity中制作一个简单的渲染特效 77 4.9 本章小结与分析 84 第5章 Unity编辑器的使用 86 5.1 创建一个空的工程 86 5.2 编辑器界面布局介绍 88 5.3 编辑器的常用功能介绍 89 5.4 编辑器模型编辑——旋转控制第一个模型 95 5.5 编辑器动作骨骼编辑——让人物动起来 96 5.6 编辑器光照和相机的编辑——让人物更真实 98 5.7 编辑器粒子特效编辑——让环境更绚丽 101 5.8 编辑器场景编辑——创建简单的战场 104 5.9 编辑器地形和光照贴图烘焙——让战场真实起来 105 5.10 编辑器遮挡剔除——提高战场的运行效率 107 5.11 编辑器资源管理——让工程更容易管理 109 5.12 编辑器控制台和调试——输出调试信息 110 5.13 编辑器资源商店和常用插件 111 5.14 编辑器材质编辑——让车辆变化一下样式 114 5.15 编辑器物理系统介绍——让人和车辆发生碰撞 116 5.16 本章小结与分析 118 第2篇 Unity实战(客户端) 第6章 虚拟仿真训练系统的架构和模块 122 6.1 什么是虚拟仿真训练 122 6.1.1 战斗模拟仿真训练 122 6.1.2 车辆仿真和工业操作 123 6.2 物理架构介绍——虚拟仿真训练系统 123 6.3 使用态势端发布授权任务 126 6.4 将分队长学员配置加入授权任务 127 6.5 启动仿真任务——完成一次美妙的任务体验 128 6.6 本章小结与分析 130 第7章 人物资源编辑与程序开发 132 7.1 模型资源的导入和整理编辑 132 7.2 人物动作资源的编辑和管理 134 7.3 数据资源的导入和整理 137 7.4 人物的控制和脚本程序开发 141 7.5 人物的行为状态机开发 147 7.6 人物特效的控制和状态交互 150 7.7 人物的物理状态和碰撞瞄准的程序交互 151 7.8 人物的属性和程序接口开发 154 7.9 在场景中运行人物资源和调试程序 158 7.10 本章小结与分析 159 第8章 场景资源编辑与程序开发 161 8.1 场景资源的导入和整理管理 161 8.2 场景数据资源的导入和场景程序管理 162 8.3 地形的编辑和程序相关功能开发 169 8.4 添加碰撞体树木和非碰撞体植被 172 8.5 创建光源和阴影渲染 174 8.6 添加场景静态物体和动态物体 176 8.7 添加场景水的插件并使用代码集成 182 8.8 添加天气系统插件并集成代码系统 187 8.9 添加场景道路插件并制作道路 192 8.10 添加天空盒和雾态效果 194 8.11 场景预览和渲染效率优化 196 8.12 场景系统加载切换和系统程序开发 198 8.13 本章小结与分析 202 第9章 资源组件和交互物品开发 203 9.1 资源组件的导入和整理管理 203 9.2 资源物品的数据导入和整理管理 205 9.3 AssetBundle的资源组成和功能API 207 9.4 开发自己的AssetBundle打包工具插件 208 9.5 加载和管理AssetBundle资源 212 9.6 车辆动力系统的插件使用和系统集成开发 216 9.7 关于飞行器直升机的开发和使用 223 9.8 地雷组件的开发和功能交互 225 9.9 物品管理器系统开发 230 9.10 本章小结与分析 235 第10章 NGUI组件开发和操作交互开发 236 10.1 NGUI插件介绍和导入工程 236 10.2 NGUI图集的使用和制作 237 10.3 NGUI图集的优化和DrawCall的优化策略 239 10.4 NGUI的底层实现原理和分析 240 10.5 UILable的使用 242 10.6 UISprite的使用 243 10.7 UIPanel的使用 244 10.8 UIScrollView的使用 245 10.9 UIButton的使用 247 10.10 UIRoot和UICamera的自适应 250 10.11 打造UI面向对象的动态加载和管理 251 10.12 登录UI功能开发 257 10.13 大厅任务信息系统UI功能开发 261 10.14 战场场景中主视角UI系统功能开发 268 10.15 VR开发——VR可以使用的VRGUI 276 10.16 本章小结与分析 277 第3篇 C++网络开发基础(服务器) 第11章 C++语言基础 280 11.1 C++简介 280 11.2 C++基本语法 281 11.3 C++数据结构 283 11.4 C++变量类型 289 11.5 C++修饰符类型 290 11.6 C++存储类 291 11.7 C++运算符和运算方式 294 11.8 C++函数 297 11.9 C++数组和高级功能 300 11.10 C++指针和高级功能 301 11.11 C++引用和常用方式 303 11.12 C++类和对象 305 11.13 C++继承和多态 307 11.14 C++接口和抽象 309 11.15 C++文件和流的处理 311 11.16 C++ STL库介绍 314 11.17 本章小结与分析 319 第12章 C++网络编程基础 321 12.1 Socket套接字 321 12.2 套接字寻址方式 326 12.3 Winsocket网络程序开发流程 328 12.4 在Visual Studio中创建网络工程 330 12.5 Winsocket编程准备 331 12.6 基于TCP的Socket编程 332 12.7 基于UDP的Socket编程 336 12.8 本章小结与分析 343 第13章 多线程和异步套接字 345 13.1 C++多线程开发 345 13.2 C++多线程互斥对象和同步 347 13.3 C++进程间通信 350 13.4 C++设置异步I/O的模式和方法 356 13.5 本章小结与分析 358 第14章 MySQL数据库的使用 359 14.1 MySQL数据库介绍和使用范围 359 14.2 安装MySQL数据库 360 14.3 MySQL可视化管理工具的使用 362 14.4 使用C++连接MySQL数据库 364 14.5 SQL语句和语法 369 14.6 MySQL备份导出数据和导入转移数据 371 14.7 本章小结与分析 374 第15章 网络协议Protobuf的使用 376 15.1 什么是Protobuf 376 15.2 Protobuf的功能是什么 378 15.3 Protobuf序列化的原理是什么 385 15.4 如何编写Protobuf的.proto文件 387 15.5 如何编译和生成Protobuf的编译程序 389 15.6 使用Protobuf协议制作一段网络小程序 392 15.7 本章小结与分析 399 第4篇 C++网络开发实战(服务器) 第16章 设计架构简单的互动服务器体系 402 16.1 Visio:一个绘制架构图的软件 402 16.2 如何使用图和连接线来表示架构 404 16.3 需要哪些服务来构建整个服务体系 406 16.4 登录服务器(LoginServer) 407 16.5 网关服务器(GateServer) 410 16.6 中心服务器(CenterServer) 413 16.7 战场服务器(BattleServer) 414 16.8 本章小结与分析 418 第17章 开发登录服务器LoginServer 420 17.1 登录服务器的作用 420 17.2 使用Protobuf生成登录授权文件和协议 421 17.3 创建LoginServer网络会话层底层模块 429 17.4 创建LoginServer服务逻辑模块 436 17.5 导入LoginServer的Protobuf协议 440 17.6 客户端Protobuf协议的导入和使用 443 17.7 从客户端登录到授权的逻辑处理过程 445 17.8 启动LoginServer,完成第一次授权登录 449 17.9 Redis缓存存储和信息处理 450 17.10 本章小结与分析 452 第18章 开发网关服务器GateServer 453 18.1 网关服务器及其作用 453 18.2 创建GateServer的框架主程序 454 18.3 创建网关转发和验证所需要的Protobuf协议脚本 461 18.4 生成服务器所需要的C++协议程序 464 18.5 生成客户端所需要的C#协议程序 466 18.6 完成网关服务器的逻辑功能开发 468 18.7 完成客户端从网关授权进入大厅的逻辑 478 18.8 本章小结与分析 481 第19章 开发中心服务器CenterServer 482 19.1 中心服务器及其作用 482 19.2 创建CenterServer框架主程序 484 19.3 创建中心服务器的Protobuf协议脚本 488 19.4 生成服务器所需要的C++协议程序 495 19.5 生成客户端所需要的C#协议程序 497 19.6 生成服务器data数据和协议代码 500 19.7 完成中心服务器的逻辑功能开发 504 19.8 启动客户端完成任务配置并开始仿真任务 513 19.9 本章小结与分析 520 第20章 开发战场服务器BattleServer 522 20.1 战场服务器及其作用 522 20.2 创建BattleServer框架主程序 524 20.3 创建战场服务器Protobuf协议脚本 527 20.4 生成服务器所需要的C++协议程序 537 20.5 生成客户端所需要的C#协议程序 539 20.6 生成服务器data数据和协议代码 550 20.7 创建战场服务器的聊天模块 553 20.8 创建战场逻辑模块 556 20.9 创建战场仿真人员同步模块 558 20.10 创建战场仿真车辆和飞行器模块 564 20.11 创建战场动态资源管理和监控模块 568 20.12 创建战场AI仿真敌人和飞行器AI状态机 571 20.13 调试战场服务器和客户端,启动仿真任务 576 20.14 本章小结与分析 579 第21章 一些仿真框架和人工智能的介绍 581 21.1 VR-LINK与HLA框架:高层体系模型框架的使用 581 21.2 游戏中常用的人工智能算法和深度学习引申 584 后记——全书总结与个人发展建议 588 |