生物AI

发表时间: 2025-11-14 18:23:09

最后更新: 2025-11-14 18:23:09(23分钟前)

本文标签: 生物机制

用户头像-Connie 等1名 热心馆友编辑完成

生物AI是我的世界的一种游戏内容

介绍

  1. 在《Minecraft》游戏中,存在着多种多样的生物,它们各自展现出独特的行为,这些行为由生物的人工智能系统进行调节和管理。
  2. 带有人工智能的生物通常被称为AI生物。
  3. 在这些生物的意向系统中,意向(Goal)被视为控制生物行为的基本单元。
  4. 自Java版1.16版本起,某些生物(如炽足兽发光鱿鱼沼骸等)和村民开始使用一种更为复杂的生物AI系统,即记忆行为系统,而其他生物依然依赖于意向系统。
  5. 相较于意向系统,记忆行为系统的特点在于它会在每个游戏刻进行实时计算。
  6. 尽管记忆行为系统提供了更高的生物智能,其中频繁的更新也增加了人工智能计算的负担。
  7. 该记忆行为系统由三个重要成分构成:记忆、行为和活动。

概述

  1. 在《我的世界》中,生物的人工智能(AI)系统根据其当前状态和周围环境来计算行为。

  2. 该系统利用多种控制器将计算出的行为指令转化为可执行的动作,以实现对生物的控制。

  3. 游戏中存在两种不同的生物AI系统,均依据上述原理进行行为计算。

  4. 第一种是意向系统,它通过意向选择器来识别生物的“意向”,从而引导其行为。

  5. 第二种为记忆行为系统(仅限Java版),该系统能够记录生物的记忆,并结合当前活动、状态和环境来确定生物的行为模式。

  6. 通过以上机制,生物的行为得以实现更加自然和多样的表现。

意向系统

一、 运行频率

  1. 在Minecraft基岩版中,意向系统会在每个游戏刻被自动计算,已激活的意向也会在此过程中执行。

  2. 而在Java版中,意向系统的运行状态在每个游戏刻之间会有所差异。

  3. 游戏会将当前维度中的游戏刻计数(这不是指游戏的总时间,而是从服务器启动到现在所经过的游戏刻数)与实体ID相加,并据此进行判断。

  4. 如果计算的结果为偶数,则将正常启动意向系统的计算,并执行所有已激活的意向。

  5. 换句话说,意向系统每隔两个游戏刻进行一次计算,尝试激活符合条件的意向。

  6. 反之,如果结果为奇数,则不会进行意向的完整计算,但部分已激活的意向仍会被执行。

  7. 在意向系统未进行全面计算的情况下执行的部分意向与其特性有关,并非所有意向都具备这一特性,因此并不能在每个游戏刻都得到执行。

二、 意向分类

  1. 意向可根据其功能分为两种主要类型。
  2. 第一类是动作意向,它负责调节生物执行的具体行为,如随机移动、攻击及逃离等。
  3. 第二类为索敌意向,也称为目标意向,它决定了生物的攻击目标,例如选择玩家作为攻击对象,或是反击攻击自身的生物。
  4. 动作意向又可以被细分为多个类别。
  5. 每种动作意向都涉及不同的控制器标志(Flag),以控制生物的行为。
  6. 一个动作意向可能只控制一种控制器,例如移动控制器,也可能控制多种控制器,例如同时控制移动和视角控制器。
  7. 这些控制器的标志主要包括:
  8. 移动(Move):此标志使得生物通过移动控制器(Move Control)进行路径计算,从而按照预定路线移动。
  9. 视角(Look):此标志使得生物通过视角控制器(Look Control)调整其视角方向。
  10. 跳跃(Jump):此标志使得生物能够通过跳跃控制器(Jump Control)主动进行跳跃,或者阻止其被动跳跃行为。

三、 意向生命周期

  1. 在Minecraft中,每个意向执行的流程遵循特定的顺序。
  2. 首先,生物会被加载或生成,随之创建意向(Construct)。
  3. 如果满足启动条件,意向将被启动(Start)。
  4. 当满足运行条件时,意向开始执行(Tick)。
  5. 在Java版中,若意向可持续计算,则将会在每个游戏刻中被执行。
  6. 如果条件不再满足或者被其他意向所替代,意向就会停止(Stop)。
  7. 在基岩版中,所有意向至少会被执行一次。
  8. 需要注意的是,在Java版中,有些意向可能仅会被启动和停止,而不会执行。
  9. 还有一部分意向不允许被替代,这意味着它们在运行时不能被具有更高优先级的意向打断,只有在自身不满足运行条件时才能停止。

四、 选择与执行意向

  1. 意向系统的作用在于合理计算与选择符合条件的意向并执行,具体过程如下进行:

  2. 首先,终止那些当前无法执行的敌对意向。

  3. 接着,挑选并启动可行的敌对意向。

  4. 随后,实施当前的敌对意向。

  5. 然后,停止那些无法执行的动作意向。

  6. 之后,选择并激活可执行的动作意向。

  7. 最后,执行当前的动作意向。

  8. 在Java版的游戏中,意向系统在某些时间段内不进行计算,仅负责执行,当时的执行步骤包括:

  9. 运行当前可以持续进行的敌对意向。

  10. 以及运行当前可以持续进行的动作意向。

停止意向

  1. 当意向满足下列条件的任何一个,在意向系统计算时它就会被立刻停止:
  2. 意向已经执行完毕,等待停止。
  3. 对于动作意向,动作意向的旗标中,有一个旗标对应的控制器被禁用。
  4. 对于索敌意向,索敌控制器被禁用。
  5. 意向不满足自身的运行条件,需要被停止。

挑选索敌意向

  1. 在Minecraft中,索敌意向的选取仅在索敌控制器未被禁用的情况下才会生效。

  2. 对于Java版游戏,索敌意向的挑选遵循以下步骤:首先,如果当前意向未满足启动条件,则会被忽略。

  3. 接着,若该意向正是当前正在执行的索敌意向,也会被忽略。

  4. 如果索敌意向的优先级低于当前执行意向的优先级,则该意向同样会被忽略。

  5. 当当前没有执行的索敌意向时,可以进入下一个步骤进行选择。

  6. 一旦当前有执行的索敌意向,便会强制停止该意向。

  7. 然后,所选的索敌意向将被启动,并成为当前有效的索敌意向。

  8. 在基岩版中,索敌意向的挑选相对简单,仅需寻找满足启动条件的优先级最高的索敌意向,并与当前意向进行比较。

  9. 若当前意向的优先级更高,则不会有任何变化;相反,若新意向的优先级更高,当前意向将被停止并替换为新意向。

  10. 尽管Java版和基岩版在挑选的具体流程上有所不同,但最终效果基本一致。

  11. 在Java版中,所有索敌意向按照优先级从高到低排列,这样的设计有效避免了低优先级意向频繁被高优先级意向替代,减少了多次停止与启动的情况。

挑选动作意向

  1. 动作意向的选择与复杂性密切相关,以适应不同的情境需求。

  2. 与索敌意向相比,角色的动作意向可以同时运行多个。

  3. 然而,不同的动作意向之间可能会发生冲突,这通常是由于它们共享同一控制器造成的。

  4. 为了防止这种冲突发生,任何单一的旗标最多只能与一种动作意向关联,而不同的旗标之间则可以同时存在多种动作意向。

  5. 例如,近战攻击意向可能涉及到移动和视角两个旗标,然而躲避其他实体的意向仅需要移动旗标,这样它们就无法同时存在。

  6. 相反,观察玩家的意向只涉及视角旗标,因此它可以与躲避其他实体的意向共存,因为它们不使用相同的旗标。

  7. 当某个动作意向正在执行时,它将占用其所包含的所有旗标,以确保不会出现冲突。

  8. 在Java版中,动作意向的选择过程遵循一定的步骤:

  9. 首先,如果动作意向未满足启动条件,则会被忽略。

  10. 其次,若动作意向已在运行状态,同样会被忽略。

  11. 如果动作意向依赖的控制器已被禁用,则将不会考虑此动作意向。

  12. 对于每一个动作意向的旗标,检查是否有其他动作意向在占用此旗标。

  13. 若无任何动作意向占用该旗标,则说明检查通过,可以继续进行下一步。

  14. 如果已经有动作意向占用该旗标,将会比较两个动作意向的优先级。

  15. 若当前动作意向的优先级高于占用该旗标的动作意向,且占用的动作意向可以被中断,则检查会通过,继续宏观检查。

  16. 否则,该动作意向无法启动,随后的检查步骤将被跳过。

  17. 一旦通过检查,将停止原本占用这些旗标的动作意向,并启动新的动作意向。

  18. 在基岩版中,挑选动作意向的过程则涉及识别能够启动且没有标签冲突的最高优先级动作意向组。

  19. 如果选定的集合与当前正在运行的动作意向集合相同,则不会触发启动或停止操作;如果不同,则将停止未在新集合内的动作意向,并启动新集合中的未运行动作意向。

  20. 尽管Java版和基岩版的挑选机制存在差异,但其最终效果相似,主要区别在于Java版中,如果动作意向没有按照优先级排序,则可能会被新的动作意向所中断。

五、 举例

  1. 下面以Java版的史莱姆举例,分析它的AI行为。
  2. 下表是史莱姆的索敌意向和动作意向:
优先级 索敌意向 动作意向
视角 移动 跳跃
1 锁定最近玩家
Nearest Attackable Target Goal <Player>
  在液体内上浮
Slime Float Goal
2   视角转向攻击
Slime Attack Goal
   
3 锁定最近铁傀儡
Nearest Attackable Target Goal <IronGolem>
随机视角转向
Slime Random Direction Goal
   
5     持续跳跃移动
Slime Keep On Jumping Goal
  1. 在分析敌对目标时,史莱姆主要会针对两种生物发起攻击:玩家和铁傀儡,其中它更偏向于攻击玩家。

  2. 当史莱姆的周围环境中存在符合条件的铁傀儡与玩家时,它将优先选择攻击玩家,而不是铁傀儡

  3. 史莱姆并没有反击的能力,这意味着它不会对攻击过它的生物进行反击,因此在游戏中无法引导史莱姆主动攻击其他生物。

  4. 在动作意向上,史莱姆拥有四种不同的状态:

  5. 首先是“在液体内上浮”,该状态的触发及运行条件是史莱姆位于域或熔岩中,此时它以80%的概率跳跃(即上浮),并朝前移动。

  6. 其次是“视角转向攻击”,这一状态在锁定攻击目标时被激活,史莱姆会朝着攻击对象的方向移动视线

  7. 还有一种“随机视角转向”,当没有攻击目标时,史莱姆会每40到100游戏刻随机转向一次。

  8. 最后一种状态是“持续跳跃移动”,此时的运行条件是史莱姆并未骑乘任何其他实体,它将朝前移动。

  9. 如果史莱姆没有锁定攻击目标,其行动意向仅限于“随机视角转向”和“持续跳跃移动”,这使得它在进行随机跳动并前行。

  10. 当史莱姆有攻击目标时,随机视角转向的意向被暂停,转而激活“视角转向攻击”,使其朝攻击目标看去,同时“持续跳跃移动”使其向前推进并接触目标进行攻击。

  11. 史莱姆掉入水中,“持续跳跃移动”的意向将被“在液体内上浮”替代,从而使其能在水中跳跃以避免窒息。

  12. 再以Java版的苦力怕举例,下表是苦力怕的索敌意向和动作意向:

优先级 索敌意向 动作意向
视角 移动 跳跃
1 锁定最近玩家
Nearest Attackable Target Goal <Player>
    在液体内上浮
Float Goal
2 锁定伤害自身生物
Hurt By Target Goal
  膨胀爆炸
Swell Goal
 
3     远离豹猫
Avoid Entity Goal <Ocelot>
 
    远离
Avoid Entity Goal <Cat>
 
4   近战攻击
Melee Attack Goal
 
5     随机游走(避免接触水)
Water Avoiding Random Stroll Goal
 
6   看向玩家
Look At Player Goal
   
  随机视角
Random Look Around Goal
 
  1. 苦力怕在游戏中的攻击目标主要是玩家,其次是那些对其进行攻击的生物。

  2. 当苦力怕受到其他生物的攻击时,它会试图进行反击,但如果有玩家在附近,它依然会将玩家视为主要攻击对象,而放弃针对其他生物的攻击。

  3. 了解苦力怕的动作意向是很重要的,其中只有一种意图会消耗其跳跃标志,那就是在水中上浮,这使得苦力怕能够避免淹死。

  4. 其他动作意向包括膨胀爆炸:当苦力怕开始膨胀,或其距离攻击目标在三格以内时,它会引发爆炸,同时控制自身的膨胀。

  5. 苦力怕还有“远离生物”的意向;当其碰撞箱范围内出现豹猫或猫,并且能找到逃跑的路径时,它会尽量沿着该路径快速逃离。

  6. 在近战攻击方面,苦力怕在锁定攻击对象并靠近时,会发动近战攻击,前提是目标仍然存在且没有消失。

  7. 在没有其他实体骑乘的情况下,苦力怕每隔大约120游戏刻(6秒)会进行一次随机游走。

  8. 另外,当苦力怕检测到有攻击目标或玩家在附近时,会定时转头朝向这些目标,持续时间为40到80游戏刻。

  9. 在没有攻击目标且周围没有猫或豹子的情况下,苦力怕只能启动随机游走或随机视角意向,二者不能同时存在。

  10. 如果随机视角意向优先,那么随机游走意向会被中断并改为随机视角。

  11. 当苦力怕靠近创造模式的玩家时,即使无法将其视为攻击对象,仍可尝试朝该玩家的方向看。

  12. 然而,看向玩家的意向和随机视角意向不能共存,尽管它们不会相互干扰,仍会依据优先级依次执行。

  13. 如果苦力怕与攻击目标的距离超过三格,近战攻击意向会被激活,强迫其向目标靠近。

  14. 一旦进入三格范围内,膨胀爆炸的意向会迅速替代近战攻击意向,虽然苦力怕具备近战攻击能力,但实际上并不会执行这一攻击。

  15. 如果在靠近攻击对象时,周围有豹猫,近战攻击意向将被远离生物的意向替代,使得苦力怕转而逃离这些生物。

  16. 在逃离过程中,如果与攻击目标的距离再次回到三格以内,苦力怕会立即停止逃跑并开始膨胀爆炸

记忆行为系统

一、 记忆

  1. 在Minecraft中,生物的状态包括其位置、当前攻击目标等,而记忆则是对这些状态的一种扩展。

  2. 记忆由三个主要属性构成:记忆类型、记忆值和存活时间。

  3. 记忆类型(Memory Module Type)定义了该记忆所存储的数据及其功能。

  4. 记忆值(Memory Value)表示当前所存储的数据,可以是数字,也可以是某个对象,例如特定的方块位置或生物实体。

  5. 存活时间(Time To Live,TTL)指记忆在特定时间段内有效;一旦超出此时间,记忆将失效并被清除,部分记忆类型则不受时间限制。

  6. 根据能否记录到生物数据中,记忆分为短期记忆和长期记忆。

  7. 短期记忆在生物被卸载时会丢失,无法被记录,而长期记忆则可以被存储,卸载后重新加载时可以恢复以前的状态。

  8. 记忆类型及其相关的记忆通常经历以下几个步骤:首先,在生物生成或加载时注册记忆类型,而此时记忆尚不存在。

  9. 生物通过感受器(Sensor)接收环境的信息,或通过行为生成数据,并将这些数据存储为记忆,从而获取相应的信息。

  10. 对于具有存活时间的记忆而言,一旦超出存活时间,该记忆将过期(Expire)并被删除。

  11. 如果感受器或行为判断某个记忆不再有效,则该记忆会被抹除(Erase)。

二、 感受器

  1. 感受器是生物体获取外界信息的重要机制,并将这些信息记录于其记忆之中。

  2. 感受器的工作并非在每个游戏刻都进行,它具有一定的扫描频率,通常设定为每20个游戏刻(相当于1秒)。

  3. 按功能分类,感受器可分为两种类型:生物感受器和状态感受器。

  4. 生物感受器负责根据目标条件在周围环境中搜索生物,并将满足条件的生物记录到对应的记忆中。

  5. 状态感受器则基于生物当前位置及其周遭环境的信息,将相关数据存储至相应的记忆中。

  6. 大部分的感受器为生物感受器,其主要用途是进行敌对生物的检测,同时也支持其他生物的人工智能计算。

  7. 为了确保能获得足够的信息来执行相应行为,感受器的运作会始终在行为执行之前进行,以提供所需的信息基础。

三、 行为

  1. 在Minecraft游戏中,生物的行为与意向密切相关,前者代表了生物的具体动作。

  2. 不同于意向,行为能够通过组合形成更为复杂的活动,而意向则无法相互组合。

  3. 行为的生命周期大致可以分为几个阶段:首先,当生物被生成或加载时,相关的行为便被创建。

  4. 随后,在活动执行中,如果行为未运行,系统将尝试启动该行为。

  5. 启动行为的尝试可能会成功或失败,若成功,行为将开始运行;若失败,则将不进行任何操作。

  6. 当行为正在运行时,游戏的每个刻都会对该行为进行执行或尝试停止。

  7. 在特定情况下,其他行为或环境变化可能会导致当前行为被强制停止。

  8. 根据上述生命周期及动作特点,行为可分为四类:持续行为、无行为、行为以及单刻行为/触发器行为。

  9. 持续行为指生物在一定时间内进行的动作,无行为则表示生物在某段时间内处于静止状态。

  10. 门行为允许挑选一系列子行为进行执行,而单刻行为/触发器行为则是在满足特定条件后立即触发,并迅速停止。

持续行为

  1. 在《我的世界》中,持续行为会在一段时间内保持进行。

  2. 此类行为的生命周期依据其基本特征进一步细分,具体为尝试启动阶段。

  3. 启动持续行为的条件可分为两部分,分别是记忆检查和额外启动条件。

  4. 记忆检查旨在对生物当前持有的记忆进行评估,其状态包括注册、存在和不存在。

  5. 当要求记忆处于注册状态时,只要生物已经注册了该记忆类型,即使记忆当前不存在,检查也被视为成功。

  6. 额外启动条件的检查依据不同的行为而有所不同,通常涉及生物的状态及记忆值。

  7. 对于持续行为的执行和停止,还需进行超时检查及额外运行条件的验证。

  8. 若这两项中的任何一项未能通过,则该行为将终止,反之则继续进行。

  9. 每种持续行为都有特定的最大运行时长,通常设定为60游戏刻,约合3秒。

  10. 一旦持续行为达到了设定的最大运行时间,它将自动停止。

  11. 额外运行条件则由各个持续行为本身进行定义和管理。

无行为

  1. 无行为代表这个行为什么都不做。
  2. 它没有启动条件,尝试启动无行为会立刻生效。
  3. 无行为在持续指定时间后就会自行停止。
  4. 虽然名称叫无行为,但是它不代表生物在这段时间内真的什么都不做。
  5. 无行为只是代表生物进行这个行为时这个行为不会产生动作,而其他的行为仍然有可能启动、运行和停止,在表现上生物不会突然停止。

门行为

  1. 门行为的功能是选择内部的子行为进行启动和执行,类似于简化版的意向选择器。

  2. 启动门行为的唯一条件是进行记忆检查(详见前文)。

  3. 一旦记忆检查成功,门行为会判断其中的子行为,并启动相应的子行为。

  4. 在门行为中,维护有一个包含权重信息的子行为列表,当门行为启动时,该列表将被重新排序,以随机确定子行为尝试启动的次序。

  5. 重新排序方式主要有两种选择:维持原顺序(Ordered),即保持定义时的顺序;按权重打乱(Shuffled),即根据列表中每个项的权重重新排列,权重越高的项被优先排列。

  6. 如果某个子行为列表项的权重为w,门行为生成的随机数为r(范围在[0,1)之间),则排序数计算为r'=-r/(1+w)。

  7. 排序完成后,门行为会按顺序尝试执行这些子行为,执行过程中有两种可能情况:仅启动第一个(Run One)和尝试全部启动(Try All)。

  8. 在仅启动第一个情况下,门行为会依次尝试启动子行为,直至成功启动一个为止,之后不再尝试其他

  9. 而在尝试全部启动的情况下,门行为会依次尝试启动所有子行为,这样可能会有多个子行为同时启动。

  10. 门行为只会在其自身被启动时尝试子行为的启动,一旦门行为被执行,所有已启动的子行为也会随之执行。

  11. 当所有子行为停止后,门行为也会自行结束。

  12. 如果门行为被强制停止,其所有子行为也会立即强制停止。

单刻行为

  1. 单刻行为是一种只在游戏中持续1个刻的行为模式,并会在完成后立即停止。
  2. 当该行为被触发时,游戏系统会验证与之关联的条件,若条件满足,则会执行该行为的内容;若不满足,则行为将不会被执行。
  3. 在行为执行或试图终止时,单刻行为会立即结束,保证其仅在一个游戏刻内活动。
  4. 许多生物的行为并不需要一直进行,而是通过改变记忆来实现,并依赖一些基本的持续行为来读取这些记忆以执行相应动作。
  5. 例如,当生物随机游走至某个位置时,只需检查其行走目标记忆是否存在,若不存在,则会以一定概率随机选择一个新的游走目标,并将其行为目标设置为这个新的位置,随后立即停止。
  6. 在之后的运动中,生物将会根据已存储的记忆前往行走目标,从而产生持续的行动。
  7. 这样的设计不仅能够减轻行为之间的冲突,还能有效降低计算所需的负担。

四、 活动

  1. 活动是由多种行为的组合所组成的,每个行为必须直接或间接关联于一个特定的活动。

  2. 每个活动内部定义的行为具有优先级,然而这种优先级不是在活动内部进行比较的,而是跨活动进行的。

  3. 例如,如果活动A内的行为a的优先级为2,而活动B内的行为b的优先级为1,那么游戏将优先执行行为b,之后再执行行为a。

  4. 活动分为两种状态,即激活(Active)和未激活(Inactive),未激活状态下的活动无法启动其内部行为。

  5. 一旦活动处于激活状态,其内部行为便可启动,但行为的执行与活动的当前状态并没有直接关系。

  6. 激活活动通常会检查一系列的激活条件,若不满足这些条件,活动将无法被激活。

  7. 当活动被取消激活时,系统可能会清除一些历史数据,以便于重置该活动的状态。

  8. 每个生物都会具备一组核心活动(Core Activities)以及一个默认活动(Default Activity)。

  9. 核心活动始终处于激活状态,负责维持生物的基本行为,例如沿路径移动等。

  10. 除去核心活动外,每个生物在任何时刻只能激活一个活动,在激活新的活动之前,必须先取消所有非核心活动的激活。

  11. 若在尝试激活活动时,相应的激活条件不满足,系统将自动启用默认活动。

  12. 活动的激活过程常常受到生物行为或事件的影响,还有一种特殊的活动切换方式即时刻表(Schedule),允许根据游戏世界内一天的时间来调整生物应激活的活动。

  13. 当前,仅有村民能够利用时刻表来决定其当前的激活活动。

五、 系统执行流程

  1. 游戏记忆行为系统的组成部分可以被整合为一套完整的流程。

  2. 每个游戏刻系统的运行可分为四个主要阶段。

  3. 第一阶段是剔除那些已过时的记忆。

  4. 第二阶段涉及对所有感受器的运行进行尝试。

  5. 第三阶段是努力启动那些尚未执行的行为。

  6. 最后一个阶段是执行当前运行的行为,并尝试将其停止。

删除过期记忆

  1. 在当前的阶段,生物所拥有的所有记忆均需进行计算。

  2. 如果某个记忆没有设定存活时间,那么该记忆将不会过期,因此相关的计算会被忽略。

  3. 反之,若记忆具备存活时间,系统会首先判断该记忆是否已经过期,然后再将存活时间减少一单位的游戏刻。

  4. 由于记忆被删除和存活时间减少的处理顺序,实际删除过期记忆所需的时间会比存活时间的值多出一个游戏刻。

  5. 举例而言,如果在第0游戏刻生物获取了记忆A,并且其存活时间为600游戏刻,那么在第0游戏刻时并不会减少存活时间。

  6. 在接下来的600游戏刻中,存活时间会逐渐减少,但此阶段因为未达到0,所以记忆依然存在。

  7. 当达到第600游戏刻时,存活时间剩余1游戏刻,系统首先检查该记忆是否过期,结果判定为未过期。

  8. 此后,存活时间被减少至0游戏刻,而在第601游戏刻,该记忆才会最终被删除。

  9. 从行为执行的角度来看,这个记忆的存在时间实际上是601游戏刻,而非设定的600游戏刻。

启动与执行行为

  1. 在所有操作进行之前,系统需先尝试启动这些操作,以便为后续执行做好准备。
  2. 由于每种操作在活动中具有不同的优先级,因此在执行或启动这些操作前,必须对其进行排序和预处理。
  3. 首先,将所有活动中同一优先级的操作进行分组,并对这些分组按优先级顺序进行排序,形成一个优先级执行列表。
  4. 该列表中的优先级是从高到低排列,每一项都是活动及其对应优先级操作的映射关系。
  5. 在尝试启动所有尚未启动的操作时,系统会按优先级从高到低依次遍历列表项。
  6. 对于每一列表项,系统会检查其中的活动,如果某个活动未被激活,则不考虑对应的操作;如果激活,则会遍历该活动的高优先级操作,尝试启动所有当前未运行的操作。
  7. 在执行及停止所有正在运行的操作时,同样需要按优先级从高到低遍历列表项,但此时不再检查活动的激活状态。
  8. 最后,遍历每个活动的已运行操作,执行相应的操作并尝试停止这些活动。

六、 举例

  1. 下文以美西螈举例,说明记忆行为系统的执行流程。
  2. 美西螈的生物AI在使用这套系统的生物中属于最简单的几种之一。
  3. 美西螈只会获得下列类型的记忆。
  4. 换句话说,美西螈生物AI中这些记忆类型被注册:
记忆类型常量 记忆名称 备注
BREED_TARGET 繁殖对象 用于繁殖生物的另一个同类型生物,如果不存在繁殖就无法进行
NEAREST_LIVING_ENTITIES 周围生物 按距离由近到远排序
NEAREST_VISIBLE_LIVING_ENTITIES 周围可见生物 按距离由近到远排序
NEAREST_VISIBLE_PLAYER 周围可见玩家 按距离由近到远排序
NEAREST_VISIBLE_ATTACKABLE_PLAYER 周围可见且可以进行攻击的玩家 只存储最近的可攻击玩家
LOOK_TARGET 视角目标 可以绑定到实体,也可以绑定到方块位置
WALK_TARGET 行走目标 可以绑定到实体,也可以绑定到方块位置
CANT_REACH_WALK_TARGET_SINCE 无法到达行走目标计时 以游戏刻计
PATH 生物行走路径 寻路系统动态计算,指定时间内更新一次
ATTACK_TARGET 攻击对象 用于近战攻击
ATTACK_COOLING_DOWN 攻击冷却 限制近战攻击的攻击频率
NEAREST_VISIBLE_ADULT 周围可见成年生物 用于跟随
HURT_BY_ENTITY 最近曾攻击自身的生物 判定装死
PLAY_DEAD_TICKS 装死计时 超出一定时间后结束装死
NEAREST_ATTACKABLE 最近可攻击生物 判定索敌,按距离由近到远排序
TEMPTING_PLAYER 正在使用物品吸引的玩家 只存储距离最近的玩家
TEMPTATION_COOLDOWN_TICKS 在进入求爱模式后的冷却 冷却过期时被删除
IS_TEMPTED 是否进入求爱模式  
HAS_HUNTING_COOLDOWN 是否处于捕猎其他生物的冷却时间内 冷却过期时被删除
IS_PANICKING 是否处于惊慌状态  
  1. 美西螈有5个感受器,按顺序执行。
  2. 这些感受器用于检测周围的环境,并将这些数据写入到记忆中:
感受器 操作记忆 备注
检测周围生物
Nearest Living Entities
NEAREST_LIVING_ENTITIES
NEAREST_VISIBLE_LIVING_ENTITIES
 
检测成年生物
Nearest Adult
NEAREST_VISIBLE_ADULT 筛选NEAREST_VISIBLE_LIVING_ENTITIES记忆数据获得
检测伤害自身的生物
Hurt By
HURT_BY
HURT_BY_ENTITY
HURT_BY可以为任何实体,但在美西螈中没有用处;HURT_BY_ENTITY必须为生物
检测美西螈可攻击生物
Axolotl Attackables
NEAREST_ATTACKABLE 仅在HAS_HUNTING_COOLDOWN不存在时检测,筛选NEAREST_VISIBLE_LIVING_ENTITIES记忆数据获得
检测吸引美西螈的玩家
Axolotl Temptations
TEMPTING_PLAYER  
  1. 美西螈一共有下列4个活动,活动中包含了一系列行为。
  2. 其中核心活动就是核心活动CORE,默认活动是空闲活动IDLE。
活动
优先级
核心活动
CORE
空闲活动
IDLE
战斗活动
FIGHT
装死活动
PLAY_DEAD
0 看向视角目标
Look At Target Sink
随机看向玩家
Set Entity Look Target Sometimes (Player)
停止攻击无效对象
Stop Attacking If Target Invalid
装死
Play Dead
1 走向行走目标
Move To Target Sink
繁殖
Animal Make Love (Axolotl)
更新超过范围的攻击对象行走目标
Set Walk Target From Attack Target If Target Out Of Reach
抹除记忆(装死计时)
Erase Memory If (PLAY_DEAD_TICKS)
2 退出装死状态
Validate Play Dead
门行为(按权重打乱,仅启动第一个)
Run One
近战攻击
Melee Attack
 
3 求爱模式冷却倒计时
Count Down Cooldown Ticks
开始攻击指定对象
Start Attacking
抹除记忆(攻击对象)
Erase Memory If (ATTACK_TARGET)
 
  寻找水
Try Find Water
   
4   门行为(维持原顺序,尝试全部启动)
GateBehavior
   

1. 其中,空闲活动优先级为2的门行为内部的子行为有:

行为 权重
跟随手持指定物品玩家
Follow Temptation
1
跟随成年美西螈
Baby Follow Adult
1

1. 空闲活动优先级为4的门行为内部的子行为有:

行为 权重
随机游走(游泳)
Random Stroll (Swim)
2
随机游走(陆地)
Random Stroll (Stroll)
2
走向视角目标
Set Walk Target From Look Target
3
检查当前是否位于水和气泡柱
Trigger If (Is In Water Or Bubble)
5
检查当前是否在陆地
Trigger If (On Ground)
5
  1. 按照活动小写形式名称的哈希码,可以得出活动执行顺序是:核心活动、空闲活动、战斗活动、装死活动。
  2. 上表中所有行为的类型和记忆条件也在此给出:
行为 类型 要求存在记忆 要求不存在记忆
看向视角目标
Look At Target Sink
持续行为 LOOK_TARGET -
走向行走目标
Move To Target Sink
持续行为 WALK_TARGET PATH
退出装死状态
Validate Play Dead
单刻行为 PLAY_DEAD_TICKS -
求爱模式冷却倒计时
Count Down Cooldown Ticks
持续行为 TEMPTATION_COOLDOWN_TICKS -
随机看向玩家
Set Entity Look Target Sometimes (Player)
单刻行为 NEAREST_VISIBLE_LIVING_ENTITIES LOOK_TARGET
繁殖
Animal Make Love (Axolotl)
持续行为 NEAREST_VISIBLE_LIVING_ENTITIES
BREED_TARGET
IS_PANICKING
门行为(按权重打乱,仅启动第一个)
Run One
门行为 - -
跟随手持指定物品玩家
Follow Temptation
持续行为 TEMPTING_PLAYER TEMPTATION_COOLDOWN_TICKS
BREED_TARGET
IS_PANICKING
跟随成年美西螈
Baby Follow Adult
单刻行为 NEAREST_VISIBLE_ADULT WALK_TARGET
开始攻击指定对象
Start Attacking
单刻行为 - ATTACK_TARGET
寻找水
Try Find Water
单刻行为 - ATTACK_TARGET
WALK_TARGET
门行为(维持原顺序,尝试全部启动)
GateBehavior
门行为 - WALK_TARGET
随机游走(游泳)
Random Stroll (Swim)
单刻行为 - WALK_TARGET
随机游走(陆地)
Random Stroll (Stroll)
单刻行为 - WALK_TARGET
走向视角目标
Set Walk Target From Look Target
单刻行为 LOOK_TARGET WALK_TARGET
检查当前是否位于水和气泡柱
Trigger If (Is In Water Or Bubble)
单刻行为 - -
检查当前是否在陆地
Trigger If (On Ground)
单刻行为 - -
停止攻击无效对象
Stop Attacking If Target Invalid
单刻行为 ATTACK_TARGET -
更新超过范围的攻击对象行走目标
Set Walk Target From Attack Target If Target Out Of Reach
单刻行为 ATTACK_TARGET -
近战攻击
Melee Attack
单刻行为 ATTACK_TARGET
NEAREST_VISIBLE_LIVING_ENTITIES
ATTACK_COOLING_DOWN
抹除记忆(攻击对象)
Erase Memory If (ATTACK_TARGET)
单刻行为 ATTACK_TARGET -
装死
Play Dead
持续行为 HURT_BY_ENTITY PLAY_DEAD_TICKS
抹除记忆(装死计时)
Erase Memory If (PLAY_DEAD_TICKS)
单刻行为 PLAY_DEAD_TICKS -
  1. 美西螈的行为模式可以通过分析其核心行为来了解。

  2. 核心行为包括四个优先级较高的行为:关注视觉目标、朝行走目标移动、退出装死状态和求爱模式冷却倒计时。

  3. 视觉目标和行走目标是生物的基本行为,缺乏这些行为,美西螈无法进行转向或移动。

  4. 当需要关注视觉目标时,会调用LOOK_TARGET记忆,而由于此行为优先级最高,低优先级的行为修改视觉目标时,生物必须等到下一个游戏刻才能转动视角。

  5. 行走目标的更新依赖于WALK_TARGET记忆,优先级1也意味着生物能够立即开始移动,而其他低优先级行为需要等到下一游戏刻才能生效。

  6. 退出装死状态是美西螈必不可少的行为,若不执行此操作,它将继续保持装死状态。

  7. 为了保证繁殖行为之间的冷却时间,求爱模式冷却倒计时存在,只要TEMPTATION_COOLDOWN_TICKS存在,便会持续。

  8. 如果美西螈在没有攻击目标的情况下,并且不处于装死状态,它会激活空闲活动IDLE,以进行随机活动。

  9. 空闲活动的最高优先级行为是随机朝玩家看,设置后将在下一个游戏刻转动视角。

  10. 接下来的优先级是繁殖,成立的前提是周围有匹配的生物并且自身必须进入求爱模式。

  11. 繁殖活动会寻找最近的配偶,并保持LOOK_TARGET和WALK_TARGET均指向其,以避免外界干扰。

  12. 门行为是另一类优先级较低的行为,确保在任何时候只有一个跟随生物的行为被激活。

  13. 当求爱模式冷却及繁殖对象不存在时,美西螈能够跟随手持热带鱼桶玩家,并会持续该行为,直到条件不再满足。

  14. 如果幼年美西螈在成年美西螈周围且没有当前行走目标,它会把目标指向成年美西螈。

  15. 开始攻击和寻找水是优先级3的行为,攻击行为的启动需满足一定条件以确保顺序执行。

  16. 寻找行为只有在美西螈没有攻击目标和行走目标时才会触发,目的是保持湿润。

  17. 最后,处于最低优先级的行为会尝试激活随机走动,若没有行走目标,生物可随机游走获取移动自由。

  18. 特殊条件下,美西螈的状态可能被锁定在装死活动,导致无法恢复至正常状态。

  19. 装死活动必须在受伤害后激活,该行为持续时间为200游戏刻,若条件不满足系统则不会执行。

  20. 战斗活动则需要存在攻击目标才能启动,并依据一定优先级处理攻击及移动行为。

📑
🤔
⬆️