如何使用探路者让NPC追逐玩家

How do I use pathfinder to make the NPC chase a player

我已经尝试在 Roblox 开发者论坛中查找多个解决方案,但我只找到了一些未完成的代码或一些不适用于我的代码。这张照片中的代码让我的钻机找到零件并追逐它直到它到达那里。这非常有效,但我一直在努力寻找一种方法让钻机改为追逐最近的玩家。我听说过震级,但我不确定如何实现它,我什至无法让钻机首先追逐玩家。

首先,.magnitude 是“向量的长度”。它主要用于查找从点 A 到点 B 的矢量单位距离。因此,到 2 个点的距离为 (pointA.Position-pointB.Position).magnitudehttps://developer.roblox.com/en-us/articles/Magnitude

现在为了追逐玩家,你可以遍历所有的玩家,找到你的 NPC 会追逐的玩家。

您可以使用 for 循环并遍历 game.Players:GetPlayers(),然后获取他们的角色:<v>.Character,然后是他们的 HumanoidRootPart,其中有他们的位置。如果你想为你的 NPC 或 'aggro distance' 设置一个范围,你可以在这里实现量级。您将首先为您的距离创建一个变量。由于我们将处理向量单位,因此它应该是向量的长度。例如 local aggroDistance = 30。当添加到代码中时,这意味着它只会跟踪玩家,如果他们在 30 个螺柱内。然后你会写一个 if 语句说 if (<NPC.HumanoidRootPart.Position-<players hrp position>).magnitude < aggroDistance then。现在您可以使用 Pathfinding Service 将 NPC 移动到玩家,方法是使用 PathfindingService:ComputeAsync(<NPC HumanoidRootPart Position, <player HumanoidRootPart Position>) :ComputeAsync() 从起始位置(第一个参数)到结束位置(第二个参数)创建一条路径。 <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 variable <可选
while loop
if statement (can contain aggroDistance variable if you have one) and check player health :ComputeAsync()
:MoveTo()
:MoveToFinished
if statement end
while loop end