寻路

发表时间: 2025-11-14 18:40:56

最后更新: 2025-11-14 18:40:56(5分钟前)

本文标签: 生物机制

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

寻路是我的世界的一种游戏内容

介绍

  1. 在《我的世界》中,大部分人工智能生物具备自主移动的能力。
  2. 寻路(Pathfinding)机制确保这些生物能够有效地沿着合适的路径进行移动。
  3. 所有可自主移动的AI生物都拥有一套独立的寻路系统,这个系统能够分析周围环境,并在设定的目标基础上计算和优化行走路线
  4. 不同类型的生物可能会具备各自特有的寻路系统,其设置参数也可能有所不同,这种差异在宏观上表现为同一环境中生物选择路径的多样化。
  5. 生物的寻路目标是由其AI系统指定,而并非寻路系统自身所控制。
  6. 接下来我们将列举游戏中常见的指定寻路目标的生物AI,并对此类生物的行为进行详细介绍。

寻路系统

一、 寻路分类

  1. 在《我的世界》中,生物的寻路系统根据其移动特性被划分为三种类别。

  2. 首先是地面寻路系统,这是最为常见的寻路方式,主要用于在地表活动的生物。

  3. 该系统具备评估地面环境与路径节点费用的能力,能够在必要时考虑面和水底的路径,但对在水中游泳的路径节点无法进行计算。

  4. 第二种是水中寻路系统,专为水生生物设计,可以有效地计算水中游泳时的路径节点。

  5. 与地面寻路系统相比,水中系统在地面上的寻路功能受到限制,一旦水生生物搁浅(海豚除外),其寻路能力将会中止,无法自主返回水中。

  6. 第三类是飞行寻路系统,适用于能够飞行的生物,这类生物在空中进行路径计算时,完全不依赖地面寻路。

  7. 除了上述三种主要类型外,某些生物的寻路系统可能会与这些类别存在差异,但整体上它们大多属于这三类的变种。

  8. 在接下来的内容中,将详细阐述这三种寻路系统,并根据不同生物的特性逐一进行介绍。

二、 路径节点类型

  1. 生物在进行寻路时,需首先对周围环境进行全面了解。
  2. 这一过程涉及将每一个方块位置视作一个独立的路径节点。
  3. 由于许多方块具有相似的特性,游戏通过评估方块及其周边环境,确定该路径节点的类型。
  4. 接着,寻路系统会依赖节点类型来进行路径搜索,最终创建合适的路径。
  5. 游戏评估方块位置的路径节点类型通常分为两步:首先确定该方块位置的默认节点类型,然后结合周围环境判定环境相关的节点类型,并最终基于生物自身属性得出生物相关节点类型。
  6. 在绝大多数情况下,游戏主要依赖环境和生物相关节点类型来执行寻路及其他人工智能行为的判定。
  7. 不同的寻路系统在路径节点类型的评估上可能存在差异。
  8. 游戏内部的水中寻路系统对于环境和生物相关节点类型的判定使用相同的算法,然而与地面寻路环境的判定是不一致的。
  9. 其他寻路系统的环境相关节点类型的判定与地面寻路系统有所不同,但在生物相关节点的算法上仍然保持一致,这种差异会导致最终结果的不同。
  10. 因此,下文将专探讨水中寻路系统的节点类型,同时简要说明除水中寻路系统外的其他寻路系统的环境相关节点判定算法。
  11. 在路径节点类型的讨论中,所有提到的“当前位置”均指游戏在寻路系统运行期间扫描的方块位置,而非虚拟生物的固定位置。
  12. 节点类型中的“默认”一词指的是生物相关节点类型,若有判断不一致之处,将以全称进行说明。

方块默认节点类型

  1. 方块默认节点类型只与当前位置上的方块状态、流体状态有关。
  2. 下列为游戏中定义的所有方块默认节点类型:
条件 节点类型
活板门(#trapdoors)、睡莲大型垂滴叶 TRAPDOOR
细雪 POWDER_SNOW
仙人掌甜浆果 DAMAGE_OTHER
蜂蜜块 STICKY_HONEY
可可豆 COCOA
凋灵玫瑰滴水石锥 DAMAGE_CAUTIOUS
熔岩 LAVA
/灵魂火(#fire)、岩浆块、点燃的营火、熔岩炼药锅 DAMAGE_FIRE
开启的门 DOOR_OPEN
关闭的木门铜门 DOOR_WOOD_CLOSED
关闭的铁门 DOOR_IRON_CLOSED
所有种类的铁轨 RAIL
所有种类的树叶 LEAVES
所有种类的栅栏(#fences)、(#walls)、所有种类的关闭的栅栏门 FENCE
WATER
  1. 在我的世界中,由于方块的不同特性,方块的节点类型被分为两类:开放型(OPEN)和阻塞型(BLOCKED)。

  2. 阻塞型方块代表无法行走,除了具有特殊属性的方块外,所有不符合前表条件的方块均被视作开放型。

  3. 一些方块在任意状态下都不可供角色通过,包括但不限于:所有类型的炼药锅(除熔岩变种)、生物头颅铁砧杜鹃花丛竹子酿造台、各种蛋糕铁链箱子紫颂植株堆肥桶潮涌核心铜傀儡像饰纹陶罐土径龙蛋失水恶魂附魔台末影箱末地传送门框架耕地、所有花盆砂轮沉重核心漏斗讲台、所有灯笼泥巴重生锚末地烛避雷针、所有幽匿感测体海泡菜,以及展示架、所有台阶嗅探兽蛋灵魂沙、所有楼梯切石机、所有悬挂式告示牌、移动的活塞和所有类型的活塞及活塞头。

  4. 此外,还有一些方块在特殊状态下不可通过,例如熄灭的营火和不低于五层的

  5. 对于未具体说明的方块,如其碰撞箱的尺寸为1×1×1,则也不具备可行走性。

环境相关节点类型

  1. 环境相关节点类型是基于方块的默认节点类型,并结合周围方块的类型来计算的,某些条件还依赖于生物的特殊属性。

  2. 对于地面寻路系统,环境相关节点类型的算法如下:首先,对于嘎枝,需验证是否与嘎枝之心相连。

  3. 如果嘎枝已经绑定到嘎枝之心,且当前位置距离嘎枝之心超过32个方块(按照欧几里得距离),则会返回BLOCKED,这样嘎枝无法寻路超出32个方块的范围。

  4. 接下来,检查当前方块位置上方块的默认节点类型P:若P不是OPEN类型,或当前方块位置低于世界最低建筑高度,则直接返回P。

  5. 例如,当当前方块位置上的方块为铁轨时,环境相关节点类型则为RAIL。

  6. 然后,检查当前方块位置下方的方块节点类型B:若B是OPEN、WATER、LAVA或WALKABLE,则返回OPEN。

  7. 如果B为DAMAGE_FIRE、DAMAGE_OTHER、STICKY_HONEY、POWDER_SNOW、DAMAGE_CAUTIOUS或TRAPDOOR,则返回B。

  8. 之后,检查当前位置周围24个方块(不包括当前方块自身、上方与下方的位置),扫描顺序以西北下角为起始,先沿Z轴横向,再沿Y轴纵向,最后在X轴上全面扫描。

  9. 在扫描的过程中,若首次遇到的方块的默认节点类型为DAMAGE_OTHER,则返回DAMAGE_OTHER。

  10. 如果首次发现的方块类型为DAMAGE_FIRE或LAVA,则返回DAMAGE_FIRE。

  11. 若首次遇到WATER类型的方块,则返回WATER_BORDER,碰到DAMAGE_CAUTIOUS类型则返回DAMAGE_CAUTIOUS。

  12. 如果所有条件都没有满足,则返回WALKABLE。

  13. 对于飞行寻路系统,环境相关节点类型的算法步骤如下:首先检查当前方块位置的方块的默认节点类型P。

  14. 若P属于OPEN类型,并且该位置高于世界最低建筑高度,接着检查位置下方方块的默认节点类型B。

  15. 若B为DAMAGE_FIRE或LAVA,则返回DAMAGE_FIRE;如果B为DAMAGE_OTHER,则返回DAMAGE_OTHER。

  16. 若B的类型为COCOA,返回COCOA;若B为FENCE,且当前生物位于检查方块下方,则返回FENCE。

  17. 若B为WALKABLE、OPEN或WATER,则将P设置为OPEN,否则设置为WALKABLE。

  18. 进一步检查P:如果P为WALKABLE或OPEN类型,需再次检查当前位置周围24个方块。

  19. 扫描顺序同先前,从西北下角开始,先沿Z轴,再沿Y轴,最后沿X轴全面扫描。

  20. 在扫描过程中,如果首次遇到的方块类型为DAMAGE_OTHER,则返回DAMAGE_OTHER。

  21. 若首次发现的类型为DAMAGE_FIRE或LAVA,对应返回DAMAGE_FIRE;首次遇到WATER则返回WATER_BORDER;若为DAMAGE_CAUTIOUS,则返回DAMAGE_CAUTIOUS。

  22. 若上述条件均未满足,则返回P。

  23. 对于两栖类生物的寻路系统,该算法是地面寻路系统的一种特殊变种:以青蛙为例,会首先检查当前方块下方的方块是否为#frog_prefer_jump_to。

  24. 如果条件满足,则返回OPEN。接着检查当前方块位置的默认节点类型P:若P不是WATER,则按地面寻路系统的规则处理。

  25. 若P为WATER,则需要检查与此位置相邻的六个方块的默认节点类型,若其中任意一个为BLOCKED,则返回WATER_BORDER;否则返回WATER。

  26. 这种计算方式使得生物可以在地面上自由寻路,同时具备在水中寻路的能力。

生物相关节点类型

  1. 生物的相关节点类型是在环境节点类型的基础上,根据生物的特性进行调整的路径类型。
  2. 例如,体型较大的生物与地面方块的接触面积更广,因此游戏需要扩展扫描的范围,以更精准地判断寻路节点类型。
  3. 在水中寻路系统中,生物的寻路判定包围盒由能容纳生物碰撞箱的最小整数边长包围盒构成;若生物某个方向的长度刚好为整数,则需将边长扩展1格。
  4. 以待计算的位置作为判定包围盒的最小点,遍历所有内部方块位置:
  5. 如果判定包围盒内包含空气、洞穴空气或虚空空气,则该节点类型将被标记为BREACH。
  6. 若包围盒内含有不含水且非水的方块,那么节点类型将被认定为BLOCKED。
  7. 如果待计算位置为水或含水方块,并且不属于之前所述的不可通行方块,且也不是门、栅栏门、活板门、雪或营,则节点类型显示为WATER。
  8. 在其它情况下,节点类型则判断为BLOCKED。
  9. 对于非水中的寻路系统,生物相关节点类型的判断步骤与水中系统类似,同样计算一个包含生物碰撞箱的最小整数边长包围盒,并进行边长扩展。
  10. 以待计算位置为判定包围盒的起点,遍历所有内部方块,并将修正后的结果收集为类型集合:
  11. 如果生物能够开门且可以通过门,则DOOR_WOOD_CLOSED环境类型被修正为WALKABLE_DOOR。
  12. 若生物无法通过门,则DOOR_OPEN环境类型被修正为BLOCKED。
  13. 当环境类型为RAIL时,若生物所处的环境类型不为RAIL,则修正为UNPASSABLE_RAIL。
  14. 如果类型集合中包含FENCE,则生物相关节点类型识别为FENCE。
  15. 如果类型集合中有UNPASSABLE_RAIL,则生物相关节点类型识别为UNPASSABLE_RAIL。
  16. 若类型集合中存在负路径节点代价的类型,则返回对应的类型。
  17. 搜索整个类型集合以找到路径节点代价最大的类型P。
  18. 如果P不等于OPEN,并且生物宽度小于1且该类型的代价为0,同时待计算位置的类型为OPEN,则返回OPEN。
  19. 其他情况下,则返回类型P。

三、 路径节点代价

  1. 游戏中的判定节点类型旨在协助寻路系统评估特定位置的可通行性及通过难度
  2. 例如,与平坦的地面(WALKABLE)相比,水域(WATER)的通行难度更高,即所需的时间“代价”较大。
  3. 为了量化这种通行难度,游戏为每种节点类型定义了路径节点代价(Cost)。
  4. 路径节点代价可以是负值或非负值,负值表示该位置不可通行。
  5. 例如,BLOCKED类型在所有生物中的代价均为-1,通常代表不可穿越的方块,当游戏检测到该类型时,就会识别该位置不能通过。
  6. 正值则表示该位置可以通行,代价越小表示越容易通过,而代价越大则意味着通行更加困难。
  7. 例如,WALKABLE类型的代价为0,意味着所有生物在此类节点上几乎可以无障碍通行,而WATER类型的代价为8,显现水域的通行难度
  8. 不同生物对同一节点类型的代价认知可能存在差异,例如UNPASSABLE_RAIL在大多数生物中的代价为-1,表明它们无法跨越不可穿越的铁轨。
  9. 然而,监守者对此节点类型的代价为0,这使得它在任何情况下均可跨越铁轨。
  10. 此外,对于炽足兽来说,如果它处于骑乘状态,则判定的是骑乘生物对节点类型的代价,而不是炽足兽自身的代价。
  11. 下表中记录了所有节点类型和对应的代价:
节点类型 默认代价 例外生物或情况 例外代价
BLOCKED -1 - -
OPEN 0 - -
WALKABLE 0 - -
WALKABLE_DOOR 0 - -
TRAPDOOR 0 我的世界百科寻路寻路系统配图青蛙 -1
POWDER_SNOW -1 我的世界百科寻路寻路系统配图监守者
绑定嘎枝之心的我的世界百科寻路寻路系统配图嘎枝
8
DANGER_POWDER_SNOW 0 我的世界百科寻路寻路系统配图山羊
我的世界百科寻路寻路系统配图嗅探兽
我的世界百科寻路寻路系统配图
-1
FENCE -1 - -
LAVA -1 我的世界百科寻路寻路系统配图烈焰人
我的世界百科寻路寻路系统配图凋灵骷髅
我的世界百科寻路寻路系统配图僵尸猪灵
我的世界百科寻路寻路系统配图监守者
绑定嘎枝之心的我的世界百科寻路寻路系统配图嘎枝
8
我的世界百科寻路寻路系统配图炽足兽 0
WATER 8 我的世界百科寻路寻路系统配图
我的世界百科寻路寻路系统配图海龟
我的世界百科寻路寻路系统配图溺尸
我的世界百科寻路寻路系统配图守卫者
所有水中生物及两栖生物
0
我的世界百科寻路寻路系统配图蜜蜂
我的世界百科寻路寻路系统配图嗅探兽
我的世界百科寻路寻路系统配图烈焰人
我的世界百科寻路寻路系统配图末影人
-1
WATER_BORDER 8 我的世界百科寻路寻路系统配图蜜蜂 16
RAIL 0 - -
UNPASSABLE_RAIL -1 我的世界百科寻路寻路系统配图监守者 0
DANGER_FIRE 8 我的世界百科寻路寻路系统配图铜傀儡
我的世界百科寻路寻路系统配图村民
我的世界百科寻路寻路系统配图流浪商人
我的世界百科寻路寻路系统配图猪灵
我的世界百科寻路寻路系统配图猪灵蛮兵
所有动物
16
我的世界百科寻路寻路系统配图烈焰人
我的世界百科寻路寻路系统配图炽足兽
我的世界百科寻路寻路系统配图监守者
绑定嘎枝之心的我的世界百科寻路寻路系统配图嘎枝
0
我的世界百科寻路寻路系统配图蜜蜂
我的世界百科寻路寻路系统配图鹦鹉
-1
DAMAGE_FIRE 16 我的世界百科寻路寻路系统配图烈焰人
我的世界百科寻路寻路系统配图炽足兽
我的世界百科寻路寻路系统配图监守者
绑定嘎枝之心的我的世界百科寻路寻路系统配图嘎枝
0
我的世界百科寻路寻路系统配图蜜蜂
我的世界百科寻路寻路系统配图鹦鹉
我的世界百科寻路寻路系统配图铜傀儡
我的世界百科寻路寻路系统配图村民
我的世界百科寻路寻路系统配图流浪商人
我的世界百科寻路寻路系统配图猪灵
我的世界百科寻路寻路系统配图猪灵蛮兵
所有动物
-1
DANGER_OTHER 8 我的世界百科寻路寻路系统配图铜傀儡 16
我的世界百科寻路寻路系统配图狐狸 0
DAMAGE_OTHER -1 我的世界百科寻路寻路系统配图监守者
绑定嘎枝之心我的世界百科寻路寻路系统配图嘎枝
8
我的世界百科寻路寻路系统配图狐狸 0
DOOR_OPEN 0 我的世界百科寻路寻路系统配图海龟 -1
DOOR_WOOD_CLOSED -1 - -
DOOR_IRON_CLOSED -1 - -
BREACH 4 - -
LEAVES -1 我的世界百科寻路寻路系统配图劫掠兽 0
STICKY_HONEY 8 - -
COCOA 0 我的世界百科寻路寻路系统配图蜜蜂
我的世界百科寻路寻路系统配图鹦鹉
-1
DAMAGE_CAUTIOUS 0 我的世界百科寻路寻路系统配图嗅探兽 -1
DANGER_TRAPDOOR 0 我的世界百科寻路寻路系统配图烈焰人 -1

四、 起始节点与目标节点

  1. 在设定好各个位置的代价后,寻路系统能够开始构建从起点到终点的最优路径。

  2. 不过,在此之前,游戏首先需要初始化寻路节点系统,并计算路径的起始与终止位置。

  3. 当前生物的起点和由AI确定的终点不一定符合寻路节点系统的要求,因此系统会在开始路径计算之前重新评估有效的起点和终点。

  4. 不同类型的寻路节点系统在初始化时存在一些差异,但都需要清除先前的缓存并重新设置当前的碰撞上下文。

  5. 在地面寻路系统中,如果生物是炽足兽并且处于着火或水中状态,那么其对水的代价将被调整为0,这样炽足兽便可以在水中寻路,完成后会恢复该代价。

  6. 对于两栖类生物的寻路系统(地面寻路系统的一种特殊变体),在系统初始化阶段,水的代价被设置为0,地面可通行的代价为6,而水边缘的代价则为4,寻路完成后会恢复原来的代价。

  7. 初始化工作完成后,游戏需要确认一个有效的寻路起点,否则寻路过程将无法启动,生物也无法实现自主移动。

  8. 在进行水中寻路时,会通过生物判定箱的最小点,将Y轴坐标舍入后作为起点。

  9. 使用飞行寻路系统时,首先需要计算生物的初始高度:如果生物可以浮出水面并且当前在水中,就会找到水面上第一个非水的高度;否则,使用生物的当前位置进行舍入。

  10. 若以所得初始高度为Y值,且生物位置的水平坐标代价为非负,则该位置将作为有效的起点。

  11. 计算生物周围的位置时,若生物体积小于1立方米,则只考虑当前位置的方块;若大于或等于1立方米,则需各个轴扩展至至少1.1米并计算交集的方块位置,随机选择10个作为周围位置。

  12. 遍历这些周围位置,找出代价为非负的节点作为起点;若找不到,则起点查找失败,寻路任务被终止。

  13. 在地面寻路系统中,初始高度的确定包括检查生物在特定流体上方的高度,以及向下查找第一个非空气的位置。

  14. 如果初始高度处的节点代价为非负且节点类型不是开放的,则该位置作为起点。

  15. 另外,还需检查生物判定箱四个角落的Y值为初始高度的四个位置,找到一个代价为非负且节点类型不是开放的角落作为起点。

  16. 如果以上所有步骤均未找到有效起点,寻路则会被放弃。

  17. 对于两栖类生物,当不在水中时应用地面寻路系统算法,而在水中时则使用水中寻路算法,且青蛙水中的Y轴坐标直接使用原值,而不需要舍入。

  18. 除了两栖类寻路系统以外,终点的计算一般直接采用目标要求,而在两栖类寻路系统中,它会将Y轴舍入后设为终点。

五、 路径建立

  1. 完整理解寻路节点系统之后,可以清晰地阐明整个路径建立的流程。

  2. 路径的创建需要输入以下几项数据:生物的当前位置S,用于确定起始节点;生物的目标位置集合T,其中包含多个候选目标,通常游戏会选择最易到达的一个。

  3. 最大距离l是另一个重要参数,它可以限制游戏在查找路径时,起点所能达到的最远欧几里得距离,超出此范围的点将被忽视。

  4. 查找边距n限制了游戏搜索的区域,游戏只会在查找边距n与最大距离l之和的半径内进行查找,超过此范围的点将不予计算。

  5. 当游戏找到一个节点距离某个候选目标的曼哈顿距离不大于到达范围r时,便认为该路径已达成目标。

  6. 最大访问节点比率v则用于计算可访问的最大节点数c,即l和v的乘积,表明游戏最多能访问的节点数量以便于路径的计算。

  7. 若生物的目标位置集合T为空,或者生物当前的位置S低于世界建筑高度,则不会执行路径建立,生物无法进行寻路。

  8. 在特定情况下,生物将无法尝试建立路径。例如,地面生物如果处于高空或水中,或是未骑乘任何实体,将不会寻路;水中生物若不在水中且不允许搁浅,则无法寻路;飞行生物在特定条件下也无法进行寻路。

  9. 与此相对的,两栖类生物无论条件如何,都可以进行寻路操作。

  10. 为了降低重复计算,游戏会缓存上一次计算的路径,如果该路径达到目标,并且目标在此次新集合T中,那么游戏将直接复用之前的结果。

  11. 在路径建立过程中,主要使用A*算法,其中实际距离g(n)为路径上所耗费用与路径长度的总和,而启发式距离h(n)则是当前节点到所有目标的最小欧几里得距离乘以1.5。

  12. 算法的总体流程包括对节点的属性定义并设置优先队列O,循环执行查找直到O为空或达到最大访问节点数c。

  13. 在每次循环中,从O中提取估算函数值f最小的元素P,并检查其距离目标的曼哈顿距离是否在有效范围内。

  14. 若P的欧几里得距离超出最大值l,将跳过该节点并继续计算下一个。

  15. 紧接着,获取P的所有邻近节点,并对这些节点进行遍历,以更新和计算距离、代价等。

  16. 更新后,若N不在O中,便将其放入O中,并重建路径,根据最近元素返回各目标的路径状态。

  17. 举例来说,若僵尸有两条路径至村民,一条途径岩浆块,而另一条则不经过岩浆块,基于计算的总实际距离,游戏将选择距离更短的路径。

近邻计算

  1. 近邻计算是寻路系统中一种用于确定从当前节点到下一个可以到达节点的算法。

  2. 在这一过程里,游戏会根据当前位置的信息,收集并返回周边可供移动的节点数据。

  3. 寻路系统之间的主要差别在于近邻计算的方法,因为它是控制生物从一个点移动到另一个点的基本操作。

  4. 鉴于近邻计算的复杂性,这里将不详细介绍算法的具体内容,而是讨论其行为特征。

  5. 在地面寻路系统中,生物能够在周围的八个水平坐标中移动。

  6. 生物可以从代价为负的节点出发,向任何节点移动,但无法从代价非负的节点走向负代价节点。

  7. 由于近邻计算并不局限于单一路径,因此在最终路径中可能会交错出现负代价和非负代价的节点。

  8. 重要的是,起始节点必须是负值,这样才能确保有完全由负代价节点构成的路径。

  9. 跳跃寻路的节点仅能从代价非负的节点开始,且高度需至少超过1.125,但不超过生物的行走高度。

  10. 若存在多个跳跃位置,生物将优先选择最低的位置。

  11. 对于不能在水中上浮的生物,游戏在查找近邻时会优先找到第一个非水面(WATER)位置作为高度修正的近邻节点。

  12. 生物可以朝向悬崖(即连续的开放节点)移动,若悬崖高度低于生物的最大摔落高度,将在悬崖底部创建非负代价节点;否则,便会创建负代价节点。

  13. 生物能够向斜对角节点移动,前提是对角线中间两个位置的高度不超过当前和对角节点的高度。

  14. 对于喜欢在浅水中游泳的两栖类生物,其在海平面以下10格的水域节点中,代价将增加1。

  15. 在水中寻路系统中,生物可以在水平方向的八个坐标和上下两个坐标中移动。

  16. 许多生物只能前往代价非负的节点,使得在无水的地点代价额外增加8。

  17. 在飞行寻路系统中,生物能够访问周围的26个坐标。

  18. 与地面寻路相似,生物在飞行时也只能前往代价非负的节点,并且所有可行走的节点代价会额外增加1。

六、 沿路径行进

  1. 在游戏中,生物的移动主要依赖于一个路径寻路系统,该系统会在计算路径后指导生物进行相应的行动。

  2. 每次游戏刻,寻路系统会执行一系列检查和操作,以适应周围环境的变化。

  3. 因为环境是动态变化的,同时寻路算法相对耗时,游戏会将路径重新计算的频率限制为每秒最多20次,以降低因计算造成的负担。

  4. 系统会跟踪当前生物的位置,并相应更新其在路径节点中的索引。

  5. 下一步需要到达的路径节点将被传递给移动控制器,该控制器负责控制生物的移动。

  6. 移动控制器是生物自主移动机制的核心,独立于寻路系统,并与跳跃控制器和视角控制器共同组成生物的基础运动系统。

  7. 不同种类的生物都具有各自的控制器,以调节其移动行为,例如,僵尸可在地面上行进,蜘蛛能够爬,而蝙蝠则是飞行。

  8. 每种移动控制器都有四种状态:等待(WAIT)、前行(MOVE_TO)、侧步(STRAFE)和跳跃(JUMP)。

  9. 在等待状态下,生物并没有收到前进的动力输入,因此此刻其移动是基于上一个输入值的衰减。而这并不表示生物处于静止状态。

  10. 在侧步状态,生物会计算侧步的方向并提交相应的移动向量,若前方节点不便于行走,则需向前移动,这种行为由生物的AI直接控制。

  11. 在前行状态时,生物会确定下一步移动的节点位置,如果已经到达目标位置,则状态转变为等待;否则,将会调整视角并输入移动向量。

  12. 如果前方的障碍要求生物跳跃(例如,以跨越高度较高的节点或障碍),则生物会切换至跳跃状态,否则则进入等待状态。

  13. 在跳跃的瞬间,移动控制器仅负责速度设置,并不进行实际的前行操作;一旦生物降落到地面或进入水中,再次切换为等待状态。

  14. 游戏并未专门为生物的攀爬设计逻辑,然而通过寻路系统,生物可以在一定条件下实现攀爬,如跳跃动作所完成的那样。

  15. 例如,一个僵尸可以找到到达海龟蛋的路径,并沿路径移动。

  16. 当僵尸到达第二个节点时,游戏会要求其继续到达第三个节点,但由于当前的跳跃条件符合,它会执行跳跃。

  17. 这种跳跃使得僵尸能沿脚手架爬升,但若其没有继续前进到第三个节点,寻路系统会持续要求其移动,并不断循环执行。

  18. 这种循环过程将只有在寻路路径失效的情况下才会结束,例如生物AI超时或导航计算未完成等情况。

寻路目标

一、 随机游走

  1. 在《我的世界》中,生物在空闲状态下,为了避免显得静止,通常会随机选择一个目标并朝其移动,这一行为被称为随机游走意向(Random Stroll Goal)。

  2. 这种行为在生物的意向系统中优先级较低,但仍高于随机视角转向意向,并会占用移动的标记

  3. 在记忆行为系统中,该行为被标识为随机游走单刻行为(Random Stroll One Shot),并通常与其他随机行为一起从一个门行为中进行选择,影响WALK_TARGET的短期记忆。

  4. 无论使用哪种AI系统,生物选择随机游走目的地时主要依靠两种算法:默认目标算法和陆地目标算法。

  5. 在深入介绍这两种算法之前,有几个关键概念需要了解,其中一个是稳定方块(Stable Block)。

  6. 稳定方块的定义是,只有在目标下方是完整方块时,这个位置才算作有效目标;如果下方是台阶、楼梯或者玻璃等不完整方块,则这个目标将视为无效。

  7. 另一个概念是行走目标值(Walk Target Value),表示生物对随机游走目标的偏爱程度。

  8. 此值越高,生物选择该位置的可能性就越大,而每种生物对行走目标值的偏好不同,能在特定位置生成的生物也受到此值的影响。

  9. 每个维度会计算一个与位置和亮度相关的位置行走目标值,公式依据内部光照和环境光照的不同而变化。

  10. 在主世界中,公式设定为i * 60 - 3i - 0.5,内部光照为12时其值为零;而在下界和末地,公式和零点各有不同且各自特定。

  11. 当位置光照越亮,生物的随机游走倾向性也会越强。

  12. 例如,动物在草方块上的行走目标值为10,因此它们更乐意向草方块移动;而哞菇则以菌丝体作为其判断标准。

  13. 蜜蜂只对空气产生行走目标值,与其他方块相比为0。

  14. 有些生物例如快乐恶魂对非空气位置的行走目标值为0,但若下方是空气而更下方又不是,则为10。

  15. 海龟在未归家的状态下对水和沙子的行走目标值都为10,其他情况则依据位置行走目标值。

  16. 大多数怪物的行走目标值为负,使它们更偏向于在黑暗环境中活动,而末影人其他特定生物几乎没有明显的偏好。

  17. 对于巨人这一生物,其正向的行走目标值使之在主世界生成时需要满足特定的亮度条件。

  18. 守卫者和远古守卫者在水中的行走目标值会加上10,导致它们在水中更倾向于亮的位置。

  19. 蠹虫在可感染的方块上方的行走目标值为10,而处于其他位置则为负。

  20. 炽足兽在熔岩中的行走目标值为10,而不在熔岩中的情况则取决于是否处于熔岩内。

  21. 随机游走目标算法的设置包括两个参数:随机高度范围和随机水平范围,接下来将详细介绍不同的随机游走目标算法。

默认目标算法

  1. 默认目标算法应用于某些不需要避开液体的随机游走行为,包括北极熊溺尸唤魔者守卫者掠夺者炽足兽卫道士等生物。

  2. 除了随机游走行为,部分非随机的接近目标行为也会采用此算法。

  3. 该算法的执行步骤包括:首先随机选择十个潜在位置。

  4. 生成一个随机方向,利用高度和水平范围找到一个方块,作为运动的目标方向。

  5. 如果生物处于固定位置或被限制在某一范围内,游戏将直接根据生物当前位置与该方向相加来确定目标位置。

  6. 否则,算法将根据选择的方向,并随机在固定中心附近的半个水平范围内设定目标位置。

  7. 接下来,通过筛选这十个获取的位置,若任何一个位置符合以下任一条件,即视为无效:

  8. 高度超出建筑的上下限制;

  9. 超出了生物的活动范围;

  10. 位置下方不是稳定块;

  11. 该位置的节点代价不为零。

  12. 从筛选后的候选中,选择行走目标值最大的那个位置作为最终目的地。

  13. 在本算法中,由于位置的选择是完全随机的,因此终点的选择完全依赖于其行走目标值的大小。

  14. 此算法还具备寻找游泳位置的变化形式:游戏首先按照上述步骤尝试获得一个终点。

  15. 如果所得终点为水域或含水方块,并且不属于前文提到的不可寻路方块(例如铜傀儡像展示架含水台阶以外的门、栅栏门、活板营火),则该终点被视为有效。

  16. 若不满足上述条件,游戏将再次按照算法随机获取一个终点,并进行判定,最多可尝试十次。

  17. 此算法适用于所有在水中进行随机游走的生物。

陆地目标算法

  1. 陆地目标算法是大 多数生物在游戏中的随机移动目标选择机制。
  2. 与标准目标算法不同,这种算法不会完全随机选取目标,而是调整目标的高度,以确保其位于地面上。
  3. 该算法的执行步骤包含多个阶段。
  4. 首先,系统会随机选择10个位置,并生成一个随机方向:这个方向是通过在高度和水平范围内随机选择一个方块得出的。
  5. 若生物处于固定位置范围内,游戏会直接将选定方向与生物的当前位置相加,形成初步目标位置;反之,则会在选定方向上,从固定中心向内随机找半个水平范围,以确定初步目标位置。
  6. 初步目标位置若满足以下任意条件,则视为无效:其高度超出了建筑的上限或下限、生物超出了固定范围,或位置下方的方块不稳定。
  7. 若初步目标位置是固体方块,则其高度会上移一格,随后会重复该步骤,直到找到一个非固体方块。
  8. 如果经过调整后的位置为,或者节点的代价不为零,则该位置被认定为无效。
  9. 最后,系统会选择一个有效的行走目标,优先挑选位置值最大的作为最终目标。
  10. 这种算法的主要创新在于对高度进行修正,从而提高了选取目标的成功率,并且受到周围稳定方块密度的影响:周围稳定方块越多,生物成功选取目标的几率也会随之增加。

使用寻路

  1. 动物和生物在《我的世界》中可以通过寻路算法实现行为的操控。

  2. 例如,依赖随机游走算法,这些生物只能将稳定方块的上方视为随机游走的目标终点。

  3. 因此,在特定位置放置大量稳定方块可以吸引生物聚集,而相反地,也可以防止生物在某些区域聚集。

  4. 利用寻路算法中的节点类型计算,可以引导生物经过危险的活板门,从而发挥陷阱的效果。

  5. 另外,铁轨在绝大多数情况下可以阻挡生物的移动,这一特性能够使生物更难接近某些区域,或促使它们朝向需要的目标移动。

📑
🤔
⬆️