前言

当我们思考人工智能(AI)时,脑海中会涌入很多话题。从简单的诸如跟随或避开玩家的行为,到经典的“象棋对战”AI,再到机器学习抑或程序化内容生成中最前沿的技术。

谈论Unity意味着谈论游戏开发的大众化。得益于Unity的易用性、快节奏的技术演进、日益繁荣的开发者社区,以及新的云服务技术的出现,Unity已经成为游戏行业中最重要的软件之一。

基于这些考虑,写作本书的主要目的一是让读者在技术层面上深入理解Unity,遵循最佳实践和惯例,二是提供帮助读者领悟AI概念和技巧的理论知识,以便读者能够在这两方面获益,从而获得自身发展和专业提升。

本书将介绍构建强大的AI所需的工具,既可以创建更聪明的敌人,改进大boss,也可以构建自定义的AI引擎。本书旨在成为使用Unity开发AI游戏的一站式参考。

欢迎踏上本次令人激动的旅程,了解各种对专业人员或者非专业人员来说非常有意义的内容——编程、游戏开发、AI,以及与其他开发者分享知识。想到你们将会阅读我的作品,我就无比地激动和喜悦,同时也非常感谢Packt团队给予我这个难得的机会。希望本书不仅能帮助你们在Unity和AI技术方面提升一个新的台阶,还能够将吸引玩家的新功能加入游戏中。

目标读者

本书的目标读者是已经具有一定的Unity基础知识,渴望获取更多的工具来解决AI和游戏玩法相关问题的人。

本书内容

第1章探究几个有趣的移动算法,这些算法基于Craig Reynolds与Ian Millington开发的转向行为(steering behavior)原则,是绝大多数高级游戏和其他一些依赖于移动的算法(比如寻路算法家族)的基础。

第2章涵盖了用于导航复杂场景的寻路算法。该章包含一些使用不同的图结构来表示游戏世界的方法,以及几个用于寻路的算法,每种算法针对的场景有所不同。

第3章解释不同的决策制定技术,这些技术能够灵活地适应不同类型的游戏,并且足够健壮地让我们构建模块化的决策制定系统。

第4章揭示Unity 5.6中引入的NavMesh API的内部原理,解释如何掌握NavMesh的强大之处,以及实时优化。

第5章涉及几篇不同的教程,把不同的agent协调成一个整体,比如基于图表(如路径点和势力图)制定战术策略的编队技巧。

第6章探究了几种在agent上模拟感官刺激的不同方式。我们将学习如何使用已知的工具来创建这些模拟器:碰撞器和图。

第7章涵盖了用于开发棋类游戏的一个算法家族,以及创建AI的基于回合的游戏技术。

第8章探索机器学习领域,该章是我们学习并将机器学习技术应用到游戏中的极好开端。

第9章探究使用程序化内容生成来实现游戏可重玩性的几种不同技术。该章是生成不同类型的内容的指南。

第10章介绍一些新技术,以及使用前几章中学过的算法创建不完全符合特定类别的新行为。

如何充分利用本书

每一位具有编程背景的读者都能够从本书中获益良多。没有太多编程背景但有计算机科学坚实基础的人也能够从这些用Unity实现的示例中受益。

在开始之前,需要了解编程、数据结构,以及C#的基础知识。我们假设你能使用Unity创建脚本组件,并且已经开发过一些原型。

如果你已经从Unity的网站https://unity3d.com/learn/tutorials/s/scripting了解过入门级和中级的游戏脚本,我们相信你将会从本书中受益匪浅。

书中代码用Unity、Visual Studio社区版和Visual Studio Code编写,后面两种的性能更好,并且在Windows和Mac操作系统上表现一致,而Unity一般只用于Windows开发环境。

下载示例代码及彩色图像

本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。

本书的代码包还托管在GitHub网站上,网址为https://github.com/PacktPublishing/Unity-2018-Artificial-Intelligence-Cookbook-Second-Edition,以便更新代码后你也能从GitHub仓库中获取最新代码。

排版约定

本书中有一些排版约定。

代码体:表示正文中的代码、数据库的表名、文件夹名、文件名、文件扩展名、路径名、短网址、用户输入、Twitter链接。例如,“Agent是主要组件,它利用行为创建智能移动。”

下面是一段代码:

当我们想要提醒你注意代码中的某一部分时,相关的代码会加粗:

加粗:表示新的术语、重要的词语,或者屏幕上看到的词语。例如,菜单或对话框中出现的词语会加粗。例如,“我们还需要把Agent脚本组件附加到上面。”

表示警告或重要提示。

表示提示和小技巧。

结构安排

在本书中,你会发现几个频繁出现的标题(准备工作、操作步骤、运行原理、延伸阅读、其他参考)。

为了让读者完成每种方法时有一个明确的指示,我们像下面这样安排内容。

准备工作

介绍该节的学习目标,并描述如何安装需要的软件或者软件的初步配置。

操作步骤

完成该方法时所需要的步骤。

运行原理

通常包含对上一节中的成果的具体解释。

延伸阅读

包含一些关于该方法的额外信息,以便让读者了解该方法的延伸知识。

其他参考

包含一些关于该方法的其他有用信息的链接。