作者 |
豪尔赫·帕拉西奥斯 周尚宣 |
丛书名 |
游戏开发与设计技术丛书 |
出版社 |
机械工业出版社 |
ISBN |
9782101129105 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------Unity人工智能实战(原书第2版)--------------------------- 本书将介绍构建强大的AI的工具,既可以创建更聪明的敌人,改进大 boss,也可以构建自定义的AI引擎。本书旨在成为使用Unity开发人工智能技术的一站式参考。首先,你将快速浏览在游戏环境中使用agent、编程移动以及导航的基本构建模块。接下来,你将通过实例学习如何使用简单的自定义技术改进agent的决策制定和协调机制。然后,你将学习如何模拟agent的视觉和听觉,用于自然和拟人的AI行为,再用图结构改进agent。本书还涵盖了新的导航网格技术,这项技术在Unity 2018中引入,改良了AI和路径查找工具。你还可以用决策制定技术加强AI,运用于简单的诸如井字棋和跳棋的棋类游戏,以及安排agent之间的协作,使它们像整体一样工作。 ---------------------------Unity3D动作游戏开发实战--------------------------- 动作游戏作为一大热门的游戏品类,一直不缺少玩家受众欢迎。但其较高的工艺门槛、技术细节、复杂度等都阻碍了其开发进程。本书结合作者自身的研发经验进行撰写,从角色、战斗、关卡、物理等多个剖面去解析动作游戏在研发中遇到的总总困难,尽可能的绕过或避免研发中的已知问题,最终帮助读者在对于该品类游戏的理解与开发上提供助力。 长期以来,以动作游戏为核心的书籍一直较为匮乏。因此也成为了本书撰写的契机。通过对本书的阅读,不管是爱好动作游戏的独立开发者,还是期望进一步提升自身能力的游戏从业者,相信您都能在其中有所收获。 |
目录 |
---------------------------Unity人工智能实战(原书第2版)--------------------------- 译者序 前 言 第1章 行为——智能移动 1 1.1 简介 1 1.2 创建行为模板 2 1.3 追赶和逃跑 4 1.4 为物理引擎调整agent 6 1.5 到达和离开 8 1.6 朝向物体 10 1.7 徘徊 12 1.8 按路径移动 14 1.9 避开agent 18 1.10 避开墙体 20 1.11 通过权重混合多个行为 21 1.12 通过优先级混合多个行为 22 1.13 射击抛射体 24 1.14 预测抛射体的着地点 26 1.15 锁定抛射体 27 1.16 创建跳跃系统 28 第2章 导航 32 2.1 简介 32 2.2 用网格表示世界 33 2.3 用可视点法表示世界 41 2.4 用自制的导航网格表示世界 44 2.5 用深度优先搜索在迷宫中找到出路 47 2.6 用广度优先搜索在网格中找到最短路径 49 2.7 用迪杰斯特拉算法找到最短路径 50 2.8 用A*找到最优路径 53 2.9 改进A*算法的内存占用:IDA* 56 2.10 在多个帧中规划导航:时间片搜索 58 2.11 使路径变得平滑 60 第3章 决策制定 62 3.1 简介 62 3.2 通过决策树做选择 62 3.3 实现有限状态机 65 3.4 改进有限状态机:分层的有限状态机 67 3.5 实现行为树 69 3.6 使用模糊逻辑 71 3.7 用面向目标的行为制定决策 74 3.8 实现黑板架构 76 3.9 尝试Unity的动画状态机 78 第4章 新的NavMesh API 84 4.1 简介 84 4.2 初始化NavMesh开发组件 84 4.3 创建和管理NavMesh,用于多种类型的agent 86 4.4 在运行时创建和更新NavMesh数据 89 4.5 控制NavMesh实例的生命周期 90 4.6 连接多个NavMesh实例 92 4.7 创建动态的带有障碍物的NavMesh 93 4.8 用NavMesh API实现某些行为 94 第5章 协作和战术 97 5.1 简介 97 5.2 管理队形 98 5.3 扩展A*算法用于协作:A* mbush 102 5.4 用高度分析路径点 105 5.5 用覆盖性和可见性分析路径点 106 5.6 自动化创建路径点 107 5.7 将路径点作为示例用于决策制定 110 5.8 实现势力图 111 5.9 用淹没图改进势力图 114 5.10 用卷积滤波器改进势力图 118 5.11 构建战斗循环 120 第6章 agent感知 128 6.1 简介 128 6.2 基于碰撞系统的视觉函数 128 6.3 基于碰撞系统的听觉函数 130 6.4 基于碰撞系统的嗅觉函数 133 6.5 基于图的视觉函数 136 6.6 基于图的听觉函数 138 6.7 基于图的嗅觉函数 140 6.8 在潜行游戏中创建感知 141 第7章 棋类游戏和应用的搜索AI 148 7.1 简介 148 7.2 使用博弈树类 148 7.3 实现Minimax算法 150 7.4 实现Negamax算法 152 7.5 实现AB Negamax算法 154 7.6 实现Negascout算法 156 7.7 实现井字游戏对手 158 7.8 实现跳棋游戏对手 161 7.9 用UCB1实现石头剪刀布AI 171 7.10 实现无悔匹配算法 175 第8章 机器学习 178 8.1 简介 178 8.2 使用N元语法预测器预测行动 178 8.3 改进预测器:分层的N元语法 181 8.4 学习使用朴素贝叶斯分类器 182 8.5 实现强化学习 184 8.6 实现人工神经网络 188 第9章 程序化内容生成 192 9.1 简介 192 9.2 用深度优先搜索创建迷宫 192 9.3 为地下城和群岛实现可构造算法 195 9.4 生成风景 199 9.5 使用N元语法生成内容 201 9.6 用进化算法生成敌人 204 第10章 其他 209 10.1 简介 209 10.2 创建和管理可编写脚本的对象 209 10.3 更好地处理随机数 211 10.4 构建空气曲棍球游戏对手 213 10.5 实现竞速游戏架构 218 10.6 使用橡皮筋系统管理竞速难度 220 ---------------------------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 |