具体描述
本书旨在帮助你把各种人工智能技术应用到你的游戏中。我们将会讨论决策技术,比如有限状态机和行为树;也将探讨运动、避开障碍和群组行为;还将演示如何跟随一条路径,如何使用A*寻路算法来创建一条路径,以及如何使用导航网格到达目的地。作为额外收获,你将详细了解随机性和概率,并把这些概念应用到最后一个综合项目中。
本书内容
第1章讨论什么是人工智能,如何将其应用到游戏中,以及游戏中使用的各种实现人工智能的技术。
第2章讨论人工智能中需要用到的一种简化决策管理的方法。我们使用有限状态机来确定人工智能在特定状态下的行为,以及这种状态下人工智能如何转换为其他状态。
第3章讨论概率论的基础知识,以及如何改变特定输出的概率。然后学习如何给游戏增加随机性,让游戏中的人工智能更难以预测。
第4章介绍怎样让游戏角色在某些情况下能够感知他们周围的世界。当他们具有视觉和听觉时,游戏角色会知道敌人就在附近,他们还会知道何时发起攻击。
第5章讨论多个对象组队同时行进的情况。该章将探讨两种实现群组行为的方式,以及这两种方式是怎样使这些对象同时行进的。
第6章学习人工智能角色如何跟随一条给定的路径到达目的地。我们将了解人工智能角色如何在不知道路径的情况下找到目标,以及如何使其移向目标的同时避开障碍。
第7章讨论一个流行的算法,即寻找从指定位置到目标位置的最优路径。有了A*算法,我们可以扫描地形并找到到达目标的最优路径。
第8章讨论如何利用Unity的能力使寻路更易于实现。通过创建一个导航网格(需要使用Unity Pro版),我们能够更好地表示周围的场景,然后就能使用图块和A*算法。
第9章讲解从有限状态机扩展而来的行为树,即使在最为复杂的游戏中我们也可以使用它。我们将使用免费插件Behave来帮助在Unity中创建并管理行为树。
第10章把我们在本书中所学的各种原理整合在最后一个项目中。在这里你能够应用所学的人工智能原理,设计出一个令人难忘的车辆战斗游戏。
本书要求配置
学习本书,要求读者安装Unity 3.5或更高版本。第8章讨论导航网格,顾名思义涉及创建一个导航网格,这需要你安装Unity Pro版本;第9章讨论行为树,要求下载Behave——一个免费的行为树插件,这需要你拥有一个Unity Store账号。不过这些需求都是可选的,因为本书配备的资源中已经为你准备好了导航网格和Behave插件,可登录华章网站下载,网址为www.hzbook.com。
本书的读者对象
本书面向任何想要学习将人工智能应用到游戏中的读者,并侧重于之前有Unity使用经验的读者。我们会用C#语言编写代码,所以我们希望你熟悉C#。
下载示例代码和书中的彩色插图
你可以在华章网站的本书页面中下载示例代码文件和书中的彩色插图。
作者简介
目录信息
第1章 人工智能导论 1
1.1 人工智能 1
1.2 游戏中的人工智能 2
1.3 人工智能技术 3
1.3.1 有限状态机 3
1.3.2 人工智能中的随机性和概率 5
1.3.3 感应器系统 6
1.3.4 群组、蜂拥和羊群效应 7
1.3.5 路径跟随和引导 8
1.3.6 A*寻路算法 9
1.3.7 导航网格 16
1.3.8 行为树 18
1.3.9 运动 20
1.3.10 Dijkstra算法 23
1.4 本章小结 23
第2章 有限状态机 24
2.1 玩家的坦克 24
2.1.1 PlayerTankController类 25
2.1.2 初始化 26
2.2 子弹类 29
2.3 设置航点 31
2.4 抽象有限状态机类 32
2.5 敌方坦克的人工智能 34
2.5.1 巡逻状态 36
2.5.2 追逐状态 38
2.5.3 攻击状态 38
2.5.4 死亡状态 40
2.6 使用有限状态机框架 42
2.6.1 AdvanceFSM类 42
2.6.2 FSMState类 43
2.6.3 状态类 44
2.6.4 NPCTankController 类 46
2.7 本章小结 48
第3章 随机性和概率 49
3.1 随机性 50
3.2 概率的定义 52
3.2.1 独立与关联事件 53
3.2.2 条件概率 53
3.3 人物个性 56
3.4 有限状态机和概率 57
3.5 动态人工智能 59
3.6 示例老虎机 60
3.6.1 随机老虎机 60
3.6.2 加权概率 63
3.7 本章小结 68
第4章 感应器的实现 70
4.1 基本的感觉系统 71
4.2 场景设置 72
4.3 玩家的坦克与切面 73
4.3.1 玩家的坦克 74
4.3.2 切面 75
4.4 人工智能角色 76
4.4.1 感观 77
4.4.2 视觉 78
4.4.3 触觉 80
4.5 测试 82
4.6 本章小结 83
第5章 群组行为 84
5.1 岛屿示例中的群组行为 84
5.1.1 个体的行为 85
5.1.2 控制器 90
5.2 替代实现 92
5.3 本章小结 99
第6章 路径跟随和引导行为 100
6.1 跟随一条路径 100
6.1.1 路径脚本 102
6.1.2 路径跟随 103
6.2 避开障碍物 106
6.2.1 添加定制图层 107
6.2.2 避开障碍 108
6.3 本章小结 113
第7章 A*寻路算法 114
7.1 回顾A*寻路算法 114
7.2 实现 116
7.2.1 Node 116
7.2.2 PriorityQueue 117
7.2.3 GridManager 118
7.2.4 AStar 123
7.2.5 TestCode类 126
7.3 场景设置 128
7.4 测试 131
7.5 本章小结 132
第8章 导航网格 133
8.1 简介 134
8.2 设置地图 134
8.2.1 Navigation Static 135
8.2.2 烘焙导航网格 135
8.2.3 导航网格代理 136
8.3 有斜坡的场景 139
8.4 NavMeshLayers 141
8.5 分离网格链接 144
8.5.1 生成分离网格链接 145
8.5.2 手动生成分离网格链接 146
8.6 本章小结 148
第9章 行为树 149
9.1 Behave插件 149
9.2 工作流 151
9.3 行为节点 153
9.4 与脚本的接口 155
9.5 装饰节点 158
9.6 Behave调试器 160
9.7 顺序节点 160
9.8 探索Behave的结果 162
9.9 选择节点 163
9.10 优先级选择节点 166
9.11 并行节点 168
9.12 引用 169
9.13 机器人与外星人项目 170
9.14 本章小结 173
第10章 融会贯通 174
10.1 场景设置 175
10.2 车辆 177
10.2.1 玩家控制的车辆 178
10.2.2 人工智能车辆控制器 180
10.2.3 有限状态机 182
10.3 武器 187
10.3.1 枪 187
10.3.2 子弹 189
10.3.3 发射器 191
10.3.4 导弹 193
10.4 本章小结 195
· · · · · · (收起)
读后感
用户评价
这本书为我打开了通往游戏AI世界的大门,它提供的知识和技巧,让我能够从一个“使用者”的角色,转变为一个“创造者”。我不再仅仅满足于使用Unity提供的现成AI组件,而是能够根据自己的游戏设计需求,去创造出独一无二的智能行为。 书中关于“AI编辑器”的讲解,也让我印象深刻。作者展示了如何利用Unity的Editor脚本来创建可视化工具,从而更方便地设计和管理AI行为。例如,我们可以创建一个可视化的行为树编辑器,通过拖拽节点来构建复杂的AI逻辑,这比直接编写代码要高效得多。这种对开发效率的关注,也体现了作者作为一名资深开发者对实践的深刻理解。
这本书的语言风格非常平实易懂,没有过多的专业术语堆砌,即使是对于刚接触Unity或者AI领域的读者,也能够轻松理解。作者的写作方式非常注重逻辑性和条理性,每一章的内容都紧密围绕着AI的主题展开,并且会不断地引用前面章节的概念,形成一个完整的知识体系。 我特别喜欢书中对于“状态机”的讲解。作者通过一个非常形象的例子,将NPC的状态比作一个人在一天中的不同状态,比如“休息”、“工作”、“吃饭”等。每一个状态都对应着一套特定的行为逻辑,并且可以在不同状态之间进行平滑的切换。这种对状态机设计的深入讲解,让我能够清晰地理解如何构建一个具有层次感和可扩展性的AI系统。我将书中关于状态机的知识应用到我的项目中,成功地重构了我之前混乱的AI逻辑,使得代码更加清晰易懂,维护起来也更加方便。
总而言之,《Unity 3D人工智能编程》是一本非常值得推荐的书籍。无论你是Unity新手,还是有一定开发经验的开发者,都能从中获益匪浅。它不仅教会了我如何实现各种AI技术,更重要的是,它引导我思考如何设计出更智能、更有趣、更富有人情味的AI角色。这本书不仅拓宽了我的技术视野,也激发了我对游戏开发的无限热情。我相信,这本书中的知识和技巧,将会在我的游戏开发生涯中发挥长远的作用。
这本书最让我受益匪浅的一点,是它对于AI“调试”和“性能优化”的重视。很多时候,我们花费大量时间去设计一个复杂的AI系统,但最终却发现它的运行效率非常低,甚至拖慢了整个游戏的帧率。作者在书中详细讲解了如何利用Unity的Profiler工具来分析AI的性能瓶颈,并提供了一些常用的优化技巧。 例如,他会建议我们避免在每一帧都进行复杂的计算,而是将其分解到多个帧中进行,或者利用协程来处理耗时操作。此外,书中还提到了如何通过“LOD”(Level of Detail)原则来优化AI的计算量,即当NPC距离玩家较远时,可以降低其AI的复杂程度,从而节省性能。这些实践性的建议,对于任何一个想要开发高效AI的开发者来说,都至关重要。我之前也遇到过AI性能问题,但总是摸不着头脑,这本书的指导让我能够更有针对性地去解决问题。
一直以来,我对游戏开发中的AI部分都充满着好奇,也曾尝试过一些基础的算法,但总感觉难以触及核心,很多时候只是停留在表面的效果,比如简单的寻路或者有限状态机。直到我看到了《Unity 3D人工智能编程》,我才真正感觉到,原来AI在游戏中的应用可以如此深入且富有逻辑。这本书的优点在于,它并没有一开始就抛出复杂的数学公式或者晦涩的理论,而是从Unity引擎本身的功能出发,循序渐进地讲解如何构建一个具备智能行为的NPC。 我尤其喜欢书中关于行为树的部分,作者用非常生动形象的比喻,将一个复杂的决策系统分解成一个个易于理解的节点。比如,他将NPC的决策过程比作一个“大脑”,而行为树就是这个大脑的“思考流程”。通过组合不同的节点,比如“感知”、“行动”、“判断”等,我们可以构建出非常灵活且具有层次感的AI。书中详细讲解了如何实现一个简单的巡逻AI,NPC会根据预设的路径点进行移动,同时还会对周围的环境进行感知,比如发现敌人时会进行攻击,或者在玩家靠近时会采取躲避的策略。这种从具体应用场景出发的讲解方式,让我这种初学者也能很快上手,并且能够立刻看到自己编写的代码所带来的效果。
这本书的结构安排非常合理,从基础的Unity AI组件讲解,到行为树、状态机等核心概念,再到更复杂的路径规划和决策系统,层层递进。即使是对于Unity AI领域完全陌生的开发者,也能按照书中的章节顺序,逐步掌握相关的知识和技能。作者在讲解过程中,也穿插了大量的代码示例,并且这些代码都经过了精心的优化和测试,可以直接在Unity项目中运行。 我印象最深刻的是书中关于“群体AI”的讲解。如何让一群NPC协同作战,形成一个有机的整体,而不是各自为战。作者通过讲解“信息共享”、“协同决策”等概念,展示了如何构建一个简单但有效的群体AI系统。例如,在一个小队的AI设计中,当一个NPC发现敌人时,它可以向其他NPC发出警报,让它们能够更快地集结并采取协同攻击或者防御策略。这种群体行为的实现,极大地提升了游戏世界中NPC的真实感和生动性,也为游戏的设计带来了更多的可能性。
在学习过程中,我遇到的最大挑战之一是如何平衡AI的智能程度和游戏的趣味性。一个过于聪明的AI可能会让玩家感到沮丧,而一个过于愚笨的AI则会降低游戏的挑战性和可玩性。这本书在这方面也给出了不少实用的建议。作者在讲解不同的AI算法时,都会穿插讨论如何通过调整参数来控制AI的“难度”。 例如,在讲解目标选择策略时,书中提到可以为NPC设置多个目标,并赋予不同的优先级。玩家可以通过干扰NPC的感知或者执行某些特定动作来改变NPC的目标选择。此外,书中还介绍了一些“启发式”的AI设计思路,比如让NPC在特定情况下会“犯错”,或者故意表现出一些“弱点”,从而给玩家留下战胜AI的机会。这种“设计性”的AI,能够在保证一定挑战性的同时,也增加了游戏的策略性和可玩性,让玩家在享受胜利的喜悦时,也能感受到AI的“可被战胜性”。
这本书最大的亮点之一,在于它对于Unity内置AI系统的深入剖析。很多开发者可能只是知道有NavMesh Agent,但对于其背后的工作原理以及如何进行精细化调优,却知之甚少。作者在这本书中,花了相当大的篇幅来讲解NavMesh的生成、寻路算法(比如A*算法的变种)、以及如何处理动态障碍物和多代理寻路问题。我之前遇到的一个棘手问题,就是多个NPC在狭窄空间内寻路时容易出现“拥堵”现象,导致效率低下。通过书中对NavMesh Agent的参数调整和一些高级技巧的讲解,我找到了有效的解决方案。 此外,书中还介绍了一些更进阶的AI技术,比如基于规则的AI、模糊逻辑以及一些简单的机器学习概念在游戏AI中的应用。虽然这些部分涉及的理论可能相对深一些,但作者依然保持了清晰的逻辑和大量的代码示例,让我能够一边阅读一边实践。特别是在模糊逻辑的部分,我学到了如何用“模糊集”和“模糊规则”来模拟人类的经验性判断,比如“靠近”、“危险”、“低血量”等概念,从而让NPC的决策更加人性化,而不是仅仅依靠僵硬的if-else语句。这种方法的引入,让AI的反应更加自然,也更具挑战性。
《Unity 3D人工智能编程》不仅仅是一本技术手册,更是一本关于如何“赋予”生命的角色。作者在书中对于NPC“个性化”和“情感化”的探讨,让我对游戏AI的未来充满了期待。他分享了如何通过设定NPC的“喜好”、“厌恶”以及“目标”,来塑造出具有独特行为模式的角色。 书中还提到了“叙事性AI”的概念,即AI不仅仅是为了完成游戏目标,更是为了服务于游戏的叙事和剧情。例如,一个NPC可能会因为对玩家的好感度不同,而在对话和行为上表现出差异。我尝试过书中关于“好感度系统”的实现,通过玩家在游戏中的不同选择,来影响NPC对玩家的态度,这让游戏的故事线变得更加丰富和动态。这种将AI与游戏叙事深度结合的做法,极大地提升了游戏的沉浸感和玩家的参与度。
我一直认为,优秀的AI不仅仅是让NPC能够“做事”,更重要的是让它们能够“思考”和“适应”。《Unity 3D人工智能编程》在这方面给予了我很大的启发。书中对于“感知”系统和“决策”系统之间关系的阐述,让我对如何设计一个更智能的AI有了全新的认识。作者强调了“观察者模式”和“事件驱动”在AI系统中的应用,这使得NPC能够有效地接收来自游戏世界的各种信息,并根据这些信息做出相应的反应。 我特别印象深刻的是关于NPC“记忆”和“学习”的部分。虽然书中没有涉及复杂的神经网络训练,但它提供了一种非常实用的方式,让NPC能够记住玩家的行为模式,并在未来的互动中做出更具策略性的反应。例如,书中讲解了如何让一个守卫NPC记住玩家曾经藏匿过的地方,并在下次巡逻时更加留意这些区域。这种“学习”能力,即使是简单的实现,也能极大地增强玩家与NPC互动时的沉浸感。我尝试将这些技巧应用到我自己的项目中,发现NPC的行为变得更加难以预测,也更具挑战性,这让游戏体验得到了显著的提升。
实用,但手法比较传统,可操控的范围小
书读的很浅惭愧
书读的很浅惭愧
搞事
搞事