#roblox
Вопрос:
По какой-то причине, когда цель назначения находится где-то там, где требуется прыгать, чтобы добраться до моего NPC, он движется к ней, продолжая переключаться между перемещениями вперед и назад.
Код:
local path = PathfindingService:CreatePath()
local waypoints
local currentWaypointIndex
local function followPath(destinationObject)
path:ComputeAsync(enemyNPC.HumanoidRootPart.Position, destinationObject.Position)
waypoints = {}
if path.Status == Enum.PathStatus.Success then
waypoints = path:GetWaypoints()
currentWaypointIndex = 1
humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
else
error("Path not really working")
end
end
local function onWaypointReached(reached)
if reached and currentWaypointIndex < #waypoints then
currentWaypointIndex = 1
if waypoints[currentWaypointIndex].Action == Enum.PathWaypointAction.Jump then
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
end
if reached and currentWaypointIndex >= #waypoints then
print("Target reached!")
animationTrack:Stop()
end
end
local function onPathBlocked(blockWaypointIndex)
if blockWaypointIndex > currentWaypointIndex then
followPath(destination)
end
end
path.Blocked:Connect(onPathBlocked)
humanoid.MoveToFinished:Connect(onWaypointReached)
followPath(destination)
(Я удалил верхнюю часть кода с некоторыми локальными переменными, потому что это не позволило мне опубликовать все это, не сказав, что мой пост в основном состоит из кода)
Кто — нибудь знает, что я делаю не так?
Ответ №1:
Вы ищете действие в точке пути, которая является перечислением PathWaypointAction. Вы должны определить, является ли точка маршрута действием Ходьбы или прыжка. В настоящее время вы делаете MoveTo()
это независимо от того, должен ли он прыгать или нет.
if waypoints[currentWaypointIndex].Action == Enum.PathWaypointAction.Jump then
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
else
humanoid:MoveTo(waypoints[currentWaypointIndex].Position)
end