在行业早期的时候,一款游戏基本上都是从零开始创建的。有些代码是从以前的项目中拖出来的,有些代码被重新编写和重用,但大多数都是新的。少数公司使用相同的基本代码来编写多款游戏,前提是游戏的风格和类型相似。例如,LucasArts(2012年被迪士尼收购,2013年倒闭)的 SCUMM 引擎就是一个逐渐发展的游戏引擎,用于支持许多点击式冒险游戏,比如《古墓丽影》系列、《印第安纳琼斯》系列。

后来随着时代的发展,游戏引擎变得无处不在,逐渐地成为构建多个游戏的一致技术平台。底层的例程,如与操作系统对话、加载纹理、模型文件格式等等;在所有的游戏中都是共享的,有一组工具可用于广泛的游戏,如2D图形、3D图形、网络,最后提供接口来添加特定于游戏的代码。最初这些引擎属于个别公司专用,但随着时间的推移,只有非常大的公司能够负担得起保持更新他们的引擎,对于大多数开发人员来说,使用授权商业引擎变得很常见

AI 的发展方式也发生了变化。最初,AI 是为每一款游戏编写的,有时也为每个角色编写。现在有一种日益增长的趋势,就是将一般的AI例程构建到游戏引擎中,以商业附加组件的形式获得许可,或者由开发者自己创建并重复使用。这允许关卡编辑、游戏设计师或技术美工设计单个角色,引擎结构是固定的,每个角色的 AI 以适当的方式组合组件。本书描述的算法通过图形前端向非专业人员公开,例如,拖动框和线允许任何人创建有限状态机或行为树。

因此,构建一个游戏 AI 引擎需要构建能够轻松重用、组合和以有趣的方式应用的工具。为了支持这一点,我们需要一种能够在多种类型中发挥作用的 AI 结构。

一、AI 引擎的结构

根据我的经验,一般的 AI 系统需要一些基本的设施,它们符合下图所示的AI模型

首先,我们必须有两类基础设施:管理 AI 行为的一般机制,比如决定何时运行哪些行为,以及用于将信息导入 AI 的游戏世界接口系统。每个 AI 算法都需要遵循这个机制。

其次,我们必须有一种手段,将 AI 想要做的事情变成屏幕上的行动。它由一个运动和一个动画控制器的标准接口组成,这些接口可以将 “使用一技能” 或 “偷偷地走到位置x,y” 等请求转化为动作。

第三,连接两者的桥梁需要是一个标准的行为结构。几乎可以肯定的是,你需要为每一个新游戏编写一两个AI算法。让所有 AI 都遵循相同结构能极大地方便开发:新的代码可以在游戏运行时开发,并且新的 AI 随时可以替换掉旧 AI 行为。

所有这些都需要事先考虑清楚,在你开发 AI 编码之前,需要先计划好结构,然后各种技术才能更好地嵌入进去。

游戏引擎可以直接为你做一些工作,但不是全部。每个引擎都有自己的机制来确保您的代码能够运行,通常是从中派生的基类的形式,但是你可能需要提供更细粒度的控制:不是每个角色都需要 AI 在每一帧中运行,他们也提供了标准的调度机制,通常是一帧不超过 10 个角色的移动;它们可能会提供一些基本的工具,让你知道哪个角色能看到什么,比如内置的视线检查或者视锥检查,但是对于任何更复杂的东西,它们都需要定制的实现。除非您打算使用非常简单的技术,否则您将需要创建一些基础设施,可能还需要在编辑器中创建一些工具来支持它。

我不会在整本书中都强调结构的问题,后面文章基本都是介绍一些可以独立工作的技术,而且所有的算法都是相当独立的。对于一个 demo,或者一个简单的游戏,仅仅使用该技术就足够了,但是一个好的 AI 结构有助于促进复用,并减少调试和开发时间。

二、 工具的问题

完整的 AI 引擎会有一个可以应用于不同角色的 AI 算法工具池,特定角色的 AI 定义将由数据(可能包括一些脚本语言的脚本)组成。数据指定如何将角色组合在一起:将使用哪些技术,以及如何对这些技术进行参数化和组合

数据可以手动创建,但这跟每次都手写 AI 差不多麻烦。灵活的工具确保策划或程序能够以一种简单的方式创建内容,同时允许内容无需人工帮助即可插入到游戏中。这些通常是在游戏引擎编辑器中创建的自定义模式:用于设置角色决策规则的工具,或用于标记战术位置或需要避免的地方的关卡覆盖。

某些工具比较通用,基本上都是以同样的方式行事。寻路就是一个很好的例子:它们往往非常简单,它们很容易参数化,比如通过角色的物理能力,而且它们不会随着角色的不同而改变

而需要很多条件的行为就比较困难了,在这些条件下,角色需要评估特殊情况。有许多方法都是这样操作的,那些基于树的(决策树、行为树)更容易在视觉上表示;另一方面,基于规则的系统需要定义复杂的相关规则。即使有工具支持它们,它们通常也看起来像程序代码,因为编程语言本来就是表达它们最自然的方式。

三、总结

AI 引擎的最终结构可能类似于下图,

主要分成三个模块:

  1. 数据在一个工具(建模或关卡编辑器)中创建,然后将其打包在游戏中使用;
  2. 当一个关卡被加载时,游戏 AI 行为会根据关卡数据创建并注册到 AI 引擎中;
  3. 在游戏过程中,主游戏代码调用 AI 引擎的 update,从世界接口获取信息,并最终将 AI 引擎的输出应用游戏数据中。

所使用的特殊技术在很大程度上取决于所开发的游戏类型。在后面的文章中,我们将看到许多不同类型的技术,当你开发你的游戏AI时,你需要采取合适的或者混合式的方法来获得你想要的表现。

【游戏 AI】7 - AI 引擎相关推荐

  1. Bombermaaan-最好的开源炸弹人游戏(支持AI人机对战,SFC复刻版)

    关键词:炸弹人源代码,炸弹人AI算法 目录 一.游戏截图 二.基本信息 三.游戏设计介绍 四.道具说明 五.下载 一.游戏截图       二.基本信息 语言:C++ 平台:Windows / Lin ...

  2. 游戏中的AI及实用算法逻辑

    这篇文章就不加具体的项目代码了,毕竟"敲代码是只是在一栋大楼设计好后具体的搬砖工作",程序猿贵在对这张图纸的设计好坏.再者这个话题我这车开的还不够稳,讲多了就翻车了.所以就跟大家分 ...

  3. 游戏“外挂”?—— AI生成游戏最强攻略

    作为一名快乐的肥宅,玩游戏是居家必备,无论是王者荣耀.吃鸡.原神这些大热游戏,还是跳一跳.合成大西瓜.2048.这些风靡一时得小游戏,咱都有涉及.但是为了成为一个"头号玩家",我总 ...

  4. 腾讯提出共享 AI,抢先布局游戏与多媒体 AI,首秀同声传译

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯AI实验室 导语:感谢阅读腾讯AI Lab微信号第12篇文章.在昨日举办的腾讯2017全球合作伙伴大会上,腾讯AI Lab披露了AI ...

  5. 15份PPT,透视网易云音乐/严选/新闻/游戏背后的AI实践(合集下载)

    在最近一次[网易TALK-网易AI大会]内部技术分享会上,网易数帆.云音乐.严选.传媒.有道.Lofter.智企.伏羲等多个业务的人工智能大咖,共同分享AI算法和系统在网易各个业务领域的落地实践和思考 ...

  6. 【游戏精粹】AI个性化决策系统

    目录 创建影响力地图 策略评估技术 有关态度的一切:为意见.声望和NPC个性构建单元 个人观点 一.创建影响力地图 前言             本节和下一节将介绍这样的一些技术:让AI主体能够从战术 ...

  7. 从随机性内容看游戏中的AI应用

    事实上,如果把"AI"狭义地定义为"基于机器学习"而非"基于规则脚本"的AI,我们不难发现:虽然学术界的AI,如玩星际的AlphaStar. ...

  8. 【Python小游戏】用AI玩Python小游戏FlappyBird【源码】

    提示:如果本文对您有帮助,欢迎点赞支持! 文章目录 目录 前言 一.Flappy Bird是什么? 二.本项目简介 1.实现效果 2.游戏逻辑的相关链接 (1)游戏逻辑部分 (2)AI训练逻辑部分 说 ...

  9. 最佳案例 | 游戏知几 AI 助手的云原生容器化之路

    作者 张路,运营开发专家工程师,现负责游戏知几 AI 助手后台架构设计和优化工作. 游戏知几 随着业务不断的拓展,游戏知几AI智能问答机器人业务已经覆盖了自研游戏.二方.海外的多款游戏.游戏知几研发团 ...

  10. 即时战略游戏将领指挥AI方案设想(转帖)

    <<C&C>>的巨大成功标志着即时战略游戏的正式崛起,而到了今年,即时战略游戏无疑已占据了游戏的主导位置,然而,<<C&C>>及< ...

最新文章

  1. vonic 安装的坑
  2. Py之chatterbot-corpus:python包之chatterbot-corpus包简介、安装、使用方法之详细攻略
  3. 蒙特卡洛树搜索的主要流程有哪些_海运拼箱操作流程主要有哪些
  4. 使用RMAN验证备份的有效性
  5. 抽象工厂类--一个简单的例子
  6. 天气预报今天几点下雨_今天,秦皇岛多家景区临时闭园!最新天气预报发布
  7. json数组传递到后台controller
  8. const int *p说明不能修改_随时随地学习C语言之6—const修饰的变量真的不能修改吗?...
  9. html背景视频模糊效果,怎么给竖屏视频添加模糊背景效果?
  10. LinkButton回发报错__doPostBack('……','') 缺少对象
  11. c语言必背100代码,C语言代码大全(c语言必背项目代码)
  12. iOS版本兼容以及部分iOS 11适配
  13. python 爬漫画 小白学习过程
  14. 甘教课标版小学生计算机课,测评:《第6课 制作简单的表格教案》小学信息技术甘教课标版五年级上册教案4696(2)...
  15. java游戏 天剑传承,《天剑传承》之无双迷宫攻略
  16. 利用新浪微博来控制电脑
  17. ExtJs xtype的使用
  18. 广东有哪些计算机自主招生的大专学校,2019年广东高职单招(高职自主招生)院校名单...
  19. 女朋友转行 Java 失败,被辞退了。。。
  20. 好男人就是好色的男人

热门文章

  1. bugku 简单套娃
  2. PR视频剪辑基础01
  3. n元一维向量向左旋转i个位置
  4. C++11 变量类型获取typeid
  5. swoole微服务/EasySwoole微服务实践 一:网关和服务基础搭建
  6. 微信小程序const app=getApp()的作用,实现page页面获取全局数据
  7. cluster-trace-v2018 阿里集群数据集中文简介
  8. 1090 危险品装箱 (25 分) mapp
  9. 【题解】NOI Online 2022 数学游戏题解
  10. qDebug输出QString