如何使用 Pathfinder 使 NPC 追踪玩家

我已经在 Roblox 开发者论坛上尝试了多种解决方案,但我只找到了一些未完成的代码或者一些与我代码不兼容的代码。这张图片中的代码可以让我的角色找到要追踪的零件,并追逐直到到达那里。这很完美,但我一直在尝试找到一种让角色追踪最近的玩家的方法。我听说过矢量,但我不确定如何实现,甚至不能让角色首先追逐玩家。 enter image description here

点赞
用户15250066
用户15250066

首先,.magnitude是“向量的长度”。它通常用于计算从点 A 到点 B 的向量距离。因此,从两个点之间的距离将是 (pointA.Position-pointB.Position).magnitude

现在,为了追逐玩家,您可以循环遍历所有玩家,并获取 NPC 将要追逐的玩家。

您可以使用 for 循环并循环遍历 game.Players:GetPlayers(),然后获取其角色:<v>.Character,然后获取其人形根部部分(HumanoidRootPart)的位置。如果您想为 NPC 创建一个范围或是 'aggro 距离',您可以使用 magnitude。您首先要为距离创建一个变量。由于我们将处理向量单位,因此应为向量长度。例如,local aggroDistance = 30。当添加到代码中时,这意味着它仅会追踪距离 30 个单位的玩家。然后,您可以添加一个 if 语句,即 if (<NPC.HumanoidRootPart.Position-<players hrp position>).magnitude < aggroDistance then。现在,您可以使用 Pathfinding 服务将 NPC 移动到玩家位置,使用 PathfindingService:ComputeAsync(<NPC HumanoidRootPart Position, <player HumanoidRootPart Position>) 以从起始位置(第一个参数)到终止位置(第二个参数)创建路径。<NPC Humanoid>:MoveTo(<player HumanoidRootPart Position>) 然后使 NPC 移动到玩家。为了监听当 NPC 达到在 :ComputeAsync() 中创建的路径的末尾时执行的函数,您可以使用 <NPC Humanoid>:MoveToFinished:Connect(function()) 进行运行,或使用 <NPC Humanoid>:MoveToFinished:Wait() 等待再计算下一条路径。

提示: 您还可以检查玩家是否还有 0 点健康值(即是否存活),以便 NPC 仅移动到还活着的玩家。您可以通过在含有 aggroDistance 的 if 语句中添加 and <player>.Humanoid.Health > 0 实现。

如果您有任何问题,请告诉我。

代码构成:

  • aggroDistance 变量 < 可选
  • while 循环
  • if 语句(如果有 aggroDistance 变量,可以包含其中,并检查玩家健康值):ComputeAsync()
  • :MoveTo()
  • :MoveToFinished
  • if 语句结束
  • while 循环结束
2021-04-30 23:58:01