# Zjbcool-pathfinding插件教程

Pathfinding是Verge3D的自动寻径插件,它使用导航网格(navigation mesh)计算两点之间的最近路径,为角色实现导航功能,这种方法计算精确、快速,并且考虑了角色的大小。

img

# 导航网格

导航网格是场景中角色可以行走的区域,可以用它来表示场景中不能越过的障碍物、可攀爬的楼梯。下图中绿色的是导航网格。

img

要创建导航网格,可以使用Blender2.79 (opens new window)游戏模块中的创建导航网格功能。步骤如下:

  1. 从三维软件(Blender/3dsMax/Maya)中单独导出地面模型,格式可以是FBX、glTF2.0等通用格式,只要是Blender2.79支持的格式就可以
  2. 在Blender2.79中导入这个模型,然后将渲染器切换到BlenderGame,如图

img

  1. 在属性面板上切换到场景选项卡,找到Navigation Mesh卷展栏,在它下面有一个很大的Build Navigation Mesh按钮和几组参数,选中地面模型,然后点击按钮就会生成导航网格

img

重要的参数:

  • Rasterization栅格化:
    • Cell Size:单元格尺寸,值越小,单元格越多
    • Cell Height:导航网格相对于原始网格的高度
  • Agent代理:
    • Height: 代理可以行走的最小的高度
    • Radius:代理的半径
    • Max climb:代理可以攀爬的单元格之间的最大高度
    • Max slope:代理可以行走的最大坡度

更多参数说明,见文档 (opens new window)

  1. 将生成的导航网格再以通用格式导回到三维软件,最后,一并导出为Verge3D glTF格式。

# 工作流程

自动寻径的工作流程分3步:

  1. 创建Pathfinder -> create pathfinder拼图
  2. 根据提供的目标点计算路径 -> calculate path拼图
  3. 角色沿路径(如果存在)向目标点移动 -> animate player拼图

场景中可以有多个导航网格,对应的,拼图中可以创建多个Pathfinder。

Pathfinder创建完成后,对应地,会创建一个玩家(player),它默认是一个橙色球体。你可以通过set prop拼图修改它的属性,比如将不透明度设置为0,就会隐藏它。你可以把你真正的角色模型父子约束到它身上,这样就能让角色实现导航功能了。

默认当计算出一条路径时,它会显示出一条绿色的路径,如果不想显示出来,同样通过set prop拼图修改路径的不透明度为0,就会隐藏它。

img

# 常见问题

# 无法计算路径

calculate path拼图会在导航网格上计算从角色的当前位置到目标位置的最近路径,如果控制台抛出以下错误:

"Can't calculate the path to the target, make sure the position of player and target are on the navMesh."
1
  1. 确保正确生成了导航网格
  2. 检查create pathfinder拼图中初始位置是否在导航网格上,稳妥的方法是使用空物体定位,如图

img

img

  1. 同样检查calculate path拼图中提供的目标位置是否在导航网格上

# 获取点击位置的坐标

如果要实现让角色跟随鼠标点击位置的效果(见开头的动图),就需要动态获取点击位置的坐标。可以使用如下拼图简单实现,如图:

img

你还可以使用Teleport插件中的when clicked2拼图和picked object2拼图轻松实现,如图:

img

# 角色在移动中被卡住

解决方法是使用teleport player拼图将角色直接传送到目标位置,这个拼图不需要计算路径。

上次更新: 2021/6/14 上午11:36:18