我的编程空间,编程开发者的网络收藏夹
学习永远不晚

顶级游戏的AI系统设计教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

顶级游戏的AI系统设计教程

    游戏开发中AI的设计着实令人头疼,尤其是顶级游戏的设计,只有具备了尽善尽美的AI,才能真正称得上顶级。

顶级游戏的AI系统设计教程_顶级游戏设计_游戏AI_MMORPG_编程学习网

      什么是MMORPG的AI?

  玩MMORPG的地球人都知道,MMORPG的AI实在是弱智的要死。即使是在WOW这样顶级的游戏中,AI也是有限得掉渣,绝大部分NPC都像一个木桩一样,哪怕是精心设计的BOSS也就只有一些战斗AI。尽管有很多人把动画,或者自动寻路之类的功能也叫做AI,但是我们并不讨论这种基本功能。我们讨论的AI是指,可以使得NPC好像一个真人一样活动的AI。拥有这样AI的NPC看起来就不再是那个只有血条和攻击力的模型,而给玩家的感受会是一个有信念、欲望和意图的生命。从更广泛的意义上说,如果整个游戏世界是“高AI”的,那么这个游戏世界会充满着自由度。这意味着玩家可以在游戏中“创造”出前所未有的武器、科技甚至会有能力改变整个游戏世界外貌和文明。如果真正出现这样一款MMORPG,具备可以使得NPC好像一个真人一样活动的AI ,那么赢得粉丝们的惊声尖叫应该并不意外。品管中心孕育中的项目“失落的大陆”目前就正在向这个方向努力中,希望能够取得一定水准的突破。

  AI系统

  一个典型的AI系统包括,感知,导航和决策三个字系统。对于游戏来说,感知系统是可以“作弊”的,不需要NPC去“感知”世界,系统可以直接告诉NPC世界是怎样的。而导航系统,不属于今天的讨论范围。而决策系统才是让NPC看起来可以有自己的意图和信念,所以我们接下来主要讨论一下决策系统。

  AI决策系统的常见模型

  最早,游戏AI决策系统往往是这样写的:

  随着硬件的提高,可以分给AI执行的CPU时间越来越长,老板们对AI的要求自然也提高了,比如说老板可能会想出这样的策略:血量80的时候用魔法补一补就行了,血量60的时候吃个小血瓶,血量40的时候吃大血瓶,血量20的时候赶快逃跑。

  于是AI程序员就需要找到上面这个switch,然后修改里头的case。想象一下,万一碰到了一个Dota高手当老板,心中有着各种很NB的杀敌策略,需要随时根据环境状态判断利用哪种策略。当策略越来越多,很快,一个带有上万行代码的函数就横空出世了!如果这个时候遇到bug了,甭说修复了,仅仅是阅读这个函数就恐怕就得呕吐了。。。

  毫无疑问,上面的方法在遇到大量的状态的时候会让代码崩溃,不过经过无数前辈前仆后继用各种切身努力,帮我们提出了一种又一种精简代码的手段。目前常见的AI模型包括FSM(有限状态机,包括HFSM分层有限状态机)和BehaviorTree(行为树)两大类。

  FSM(有限状态机)

  相对于switch-case来说,FSM编程与人类思维相似从而便于梳理,更加灵活。当每种状态被封装之后,就不会再有一个“中央”函数来控制所有的逻辑,每个状态只要管好它自己就好了。这样复杂的决策系统就被切分两个子系统,不同状态以及状态之间的转化。切分后的这两个子系统的复杂度与原系统比都大大简化,从而使得代码变得可以维护。FSM在相当多的游戏中被应用,甚至UnrealEngine的脚本语言是直接支持状态编程的。

  当游戏中的NPC决策并不太复杂时候,FSM是非常有效的。比如Half-Life这款游戏,里面的AI被业界称赞了很久,而其中的AI就是通过FSM来实现的。

  我们接下来通过一个简单的例子来认识一下FSM。

  比如一个AI文字表述如下:

  1)平时的状态是巡逻

  2)如果遇到敌人之后打量一下敌人

  3)如果敌人比自己弱小,那就打攻击

  4)如果敌人比自己强大,那就跑逃跑

  那么这个可以很自然的转换成FSM,然后进行编程实现

  带边框的节点表示状态,而箭头上的条件表示状态切换的条件。

  虽然FSM简洁,和人的直觉思维相近,但是FSM也是有缺点的:

  A)由于我们所能做的仅是编辑从一状态到另一状态的转换,而无法做出更高层次的模式功能,所以会导致我们发现自己总是在构建相似的行为,这会花费我们大部分时间。

  B)使用FSM实现目标导向的行为需要做很多工作。这是一个大问题,因为大部分有针对性的AI需要处理长远目标。

  C)FSM难以并发。当并行运行多个状态机,要么死锁,要么我们通过手工编辑来确保它们在某个程度上能够兼容。

  D)大规模支持较差,即使是分层的有限状态机,也难以大规模扩展。它们往往是在其中夹杂一大块逻辑代码,而非行为编辑模块化。

  E)用FSM实现任何设计都需要做大量工作,需要花费设计师的大量时间(并非编程时间),甚至最终这还会成行为中的bugs的来源。

  行为树(BehaviorTree)

  行为树是在Next-GenAI中提出的模型,虽说是Next-GenAI,但距其原型提出已有约10年时间。其中Spore(孢子),Crysis(孤岛危机)2,RedDeadRedemption(荒野大镖客:救赎)等就是用行为树作为它们的AI模型。而越来越多的引擎也都开始直接支持行为树,比如CryEngine,Havok等。

  对于用行为树定模型构造的AI系统来说,每次执行AI时,系统都会从根节点遍历整个树,父节点执行子节点,子节点执行完后将结果返回父节点,然后父节点根据子节点的结果来决定接下来怎么做。

  行为树常见的基本类型节点有5种(当然也可以扩展更多类型):

  1)顺序节点(Sequence):属于组合节点,顺序执行子节点,只要碰到一个子节点返回false,则停止继续执行,并返回false,否则返回true,类似于程序中的逻辑与。

  2)选择节点(Selector):属于组合节点,顺序执行子节点,只要碰到一个子节点返回true,则停止继续执行,并返回true,否则返回false,类似于程序中的逻辑或。

  3)平行节点(ParallelNode):提供了平行的概念,无论子节点返回值是什么都会遍历所有子节点。所以不需要像Selector/Sequence那样预判哪个ChildNode应摆前,哪个应摆后。ParallelNode增加方便性的同时,也增加实现和维护复杂度。

  4)条件节点(Condition):属于叶子节点,判断条件是否成立。

  5)执行节点(Action):属于叶子节点,执行动作,一般返回true。

  接下来我们看一个行为树构造的AI,这个AI的逻辑文字表述为,一个NPC在晚上需要执行巡逻任务。而且如果天下雨的话,户外的人是需要打伞的。

  程序大概流程如下

  1)先处理Basic_AI节点,由于该节点是并行节点,所以将会依次处理接下来两个子树,无论第一个子树的返回值是什么。

  2)对于"打伞"节点,由于该节点是顺序节点,所以会依次处理其子节点,但是如果某个子节点返回false,那么该节点执行停止执行,并且返回false。因此执行打伞动作会不会执行取决于在它前面的两个条件是否返回true

  3)执行完"大伞"节点后,接下来必然会执行守夜节点,而守夜节点是选择节点,所以要么会执行夜里巡逻,要么会执行休息节点。夜里巡逻会不会这姓自然取决于条件节点"是晚上吗"的返回值

  行为树模型看似简单,但是以下几个优点让行为树目前变成了复杂AI的主流模型

  A)静态性

  越复杂的功能越需要简单的基础,否则最后连自己都玩不过来。即使系统需要某些"动态"性,也应该尽量使用静态的行为树来表示。Halo3相对于Halo2对BTAI的一个改进就是去除了一些的动态性。原则就是保持全部Node静态,只是根据事件和环境来检查是否启用Node。

  静态性直接带来的好处就是整棵树的规划无需再运行时动态调整,大大方便设计人员和编程人员,并且大大减少诡异的bug,同时这也为很多优化和预编辑都带来方便。

  B)直观性

  行为树可以方便地把复杂的AI知识条目组织得非常直观。

  默认的组合节点处理子节点的迭代方式就像是处理一个预设优先策略队列,也非常符合人类的正常思考模式:先最优再次优。

  此外,行为树编辑器对优秀的程序员来说也是唾手可得。

  C)复用性

  各种节点,包括叶子节点,可复用性都极高。

  D)扩展性

  可以容易地为项目量身定做新的组合节点或修饰节点。还可以积累一个项目相关的节点库,长远来说非常有价值。

  结语

  对于AI并不是太复杂的项目来说,选择有限状态机是很理智的行为,特别是在有些引擎支持的情况下。但是如果NPC的状态非常多,成千上万种,那么行为树就可能是避免项目最后崩溃的好办法。行为树虽然是很前沿的技术,不过对不熟悉的人来说还是很难使用,它的顺序,并行,选择三种节点很难理解和使用。不过条件节点和编程语言里的if else等价,如果条件节点能解析复杂的表达式就再好不过了。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

顶级游戏的AI系统设计教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

顶级游戏的AI系统设计教程

编程学习网:游戏开发中AI的设计着实令人头疼,尤其是顶级游戏的设计,只有具备了尽善尽美的AI,才能称为顶级!尽管有很多人把动画,或者自动寻路之类的功能也叫做AI,但是我们并不讨论这种基本功能。我们讨论的AI是指,可以使得NPC好像一个真人一样活动的AI。
顶级游戏的AI系统设计教程

关于顶级游戏设计大师教你如何成为一名游戏设计师

编程学习网:游戏设计现在是一个正式的学校的专业,顶级游戏的设计也是需要这些专业的人才的,那要项设计出顶级的游戏需要怎么做呢,怎样的游戏设计师才算是合格呢。
关于顶级游戏设计大师教你如何成为一名游戏设计师

FPS游戏设计初级教程全解

编程学习网:本文将通过阐述FPS设计时所涉及的UI、反馈、系统等模块来说明一下设计时的思路。首先我们要了解什么是FPS?
FPS游戏设计初级教程全解

游戏设计基础的概念设计教程

编程学习网:USC游戏设计专业系主任,TracyFullerton教授,越深入自己内心的情感,往往越能打动更多人。对于开发游戏,我们往往不是从市场出发,而是从设计者的艺术诉求出发,为新游戏寻找方向,设计概念。
游戏设计基础的概念设计教程

如何系统学习游戏的原画设计

编程学习网: 游戏开发的初学者多数会问,有没有什么捷径来学习游戏原画设计?编程学习网的答案是否定的,任何知识的学习都是没有捷径可走,勤学苦练才是做学问的硬道理,游戏的原画设计更是如此,没有捷径可走,但通过系统的学习却能达到事半功倍的效果。
如何系统学习游戏的原画设计

游戏开发中资源管理系统的架构与设计(如何构建高效的游戏资源管理系统?)

游戏资源管理系统对于现代游戏开发至关重要,本文详解了其架构与设计:资源类型与特性:识别不同资源类型(纹理、网格等)及其特性。资源加载策略:优化资源加载,如同步/异步、延迟/预加载。资源缓存技术:减少重复加载,使用LRU缓存算法。内存管理:优先考虑高优先级或常用资源,使用内存池优化分配。资源依赖性:跟踪资源依赖关系,避免加载错误。资源卸载:释放不再需要的资源,采用按时间或使用频率卸载策略。并发性:支持并发资源加载/卸载,使用线程或协程处理任务。资源管理API:提供易于访问资源的API,支持加载、卸载和依赖性
游戏开发中资源管理系统的架构与设计(如何构建高效的游戏资源管理系统?)

实时战斗系统在游戏开发中的设计与实现(如何实现紧张刺激的实时战斗系统?)

实时战斗系统是游戏核心要素,需要考虑输入、角色、环境、敌人、游戏节奏。设计时注重流畅输入、多样化角色、动态环境、智能化AI和快速节奏。实现方面,降低输入延迟、创建流畅动画、完善AI行为树、应用物理碰撞检测和优化音频设计至关重要。持续收集反馈、测试和分析数据,不断改进和优化系统,提升玩家体验。
实时战斗系统在游戏开发中的设计与实现(如何实现紧张刺激的实时战斗系统?)

编程热搜

  • 教你如何为你的Cocos2D-X资源加密解密
    编程学习网:我们平时在用Cocos2D-X时都不想让别人看到自己的文件,本篇教程将教你如何为你的Cocos2D-X资源加密解密。
    教你如何为你的Cocos2D-X资源加密解密
  • 教你如何用Cocos2D实现3d效果
    编程学习网:经过了之前几篇教程,相信各位同学已经对Cocos2D不陌生了,本篇教程将教你如何用Cocos2D实现3d效果。
    教你如何用Cocos2D实现3d效果
  • 零基础学习之教你如何用Cocos2D实现画中画效果
    编程学习网:没学过Cocos2D?没关系,多看看我们的教程,一步步成为游戏开发大神。本篇教程将教你如何用Cocos2D实现画中画效果。
    零基础学习之教你如何用Cocos2D实现画中画效果
  • 解析安卓Cocos2D-X2转移项目到Cocos2D-X3过程
    编程学习网:相信有一部分同学都经历过将项目从Cocos2D-X2转到Cocos2D-X3的麻烦,本篇教程将解析将项目从Cocos2D-X2转到Cocos2D-X3的过程。
    解析安卓Cocos2D-X2转移项目到Cocos2D-X3过程
  • 游戏脚本设计基础教程
    编程学习网:类游戏编程,特别是RPG脚本起着驱动整个游戏进程的作用。事件的运作建立在脚本的基础上,而脚本的设计建立在引擎的基础上,所以设计脚本之前因该想一想引擎,好的脚本对剧情的描述具有简单、准确的性质。
    游戏脚本设计基础教程
  • 成为游戏设计师必须具备的条件
    编程学习网:很多人喜欢玩游戏,他们总在不停感叹:这款游戏实在太精彩了,我要是能设计出这样的游戏就!而在他们行动之前,还有许多需要解答的问题罗列在前,我要如何成为游戏设计师?我需要具备哪些技能和素质?游戏设计师究竟在做什么工作?那么,游戏设计师有哪些任务呢?我们将讨论这个问题。
    成为游戏设计师必须具备的条件
  • 贪食蛇小游戏开发设计基础教程
    编程学习网: 贪吃蛇是家喻户晓的益智类小游戏,大家小时候应该都有玩过,编程学习网这里就不多介绍了,本教程将教你用MicrosoftVisualC++来制作它。
    贪食蛇小游戏开发设计基础教程
  • 成为优秀的Cocos2D程序员需要的十个品质
    编程学习网:相信各位同学都在为了成为优秀的Cocos2D程序员而奋斗着,那么一个优秀的Cocos2D程序员需要具备什么品质呢?本篇教程为你揭秘成为一个优秀的Cocos2D程序员所需要的十个品质。
    成为优秀的Cocos2D程序员需要的十个品质
  • Unity3d脚本基础
    最好用游戏引擎开发游戏,推荐Unity3D引擎,该引擎学习更简单,更易上手。游戏引擎可以编辑你的游戏场景、角色和游戏需要的东西。还有,学习编写脚本。编写脚本实际上就是编程。例如,你要在游戏中按键盘方向键来控制角色行走,这必须通过编写脚本。因此,脚本是游戏的逻辑。小编推荐你去学C编程,Unity3D通常是用C语言编写的。
    Unity3d脚本基础
  • 实例教程解析制作flash小游戏
    编程学习网:flash小游戏在游戏开发中是属于比较简单的类型,本例为FlashAS3.0实例教程,介绍射击类游戏的制作,主要分游戏界面的制作和类的编写两部分,从简单的开始做起,跟着教程动手做做看吧。
    实例教程解析制作flash小游戏

目录