【发布时间】:2021-07-24 05:18:00
【问题描述】:
我已经尝试在 Roblox 开发者论坛中查找多个解决方案,但我只发现了一些未完成的代码或一些不适用于我的代码。这张图片中的代码使我的装备找到了零件并追逐它直到它在那里。这非常有效,但我一直在尝试为装备寻找一种方法来追逐最近的玩家。我听说过幅度,但我不知道如何实现它,我什至不能让装备追逐玩家。
【问题讨论】:
我已经尝试在 Roblox 开发者论坛中查找多个解决方案,但我只发现了一些未完成的代码或一些不适用于我的代码。这张图片中的代码使我的装备找到了零件并追逐它直到它在那里。这非常有效,但我一直在尝试为装备寻找一种方法来追逐最近的玩家。我听说过幅度,但我不知道如何实现它,我什至不能让装备追逐玩家。
【问题讨论】:
首先,.magnitude 是“向量的长度”。它主要用于查找从点 A 到点 B 的向量单位的距离。因此,与 2 个点的距离为(pointA.Position-pointB.Position).magnitude。
https://developer.roblox.com/en-us/articles/Magnitude
现在为了追逐玩家,你可以循环遍历所有玩家并找到你的 NPC 将追逐的那个。
您可以使用 for 循环并循环通过 game.Players:GetPlayers() 然后获取他们的角色:<v>.Character 然后他们的 HumanoidRootPart 有他们的位置。如果您想为您的 NPC 设置一个范围或“仇恨距离”,那么您可以在此处实施幅度。您将首先为您的距离创建一个变量。由于我们将处理向量单元,因此它应该是向量的长度。例如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 loopif statement (can contain aggroDistance variable if you have one) and check player health
:ComputeAsync():MoveTo():MoveToFinishedif statement endwhile loop end
【讨论】: