PathFindingService (パスファインディングサービス)

パスを計算するサービス。
キーポイント詳細
PathfindingServiceパスを計算するサービス。
Path計算されたパスを表すオブジェクト。
Waypointsキャラクターが従うべきパスに沿ったポイント。
Agent Parametersキャラクターの移動能力と制限を定義するパラメータ(例:半径、高さ、ジャンプ高さ)。
Blocked Eventパスがブロックされたときに発生するイベント。
StatusChanged Eventパスのステータスが変更されたときに発生するイベント。

開始点と終了点を定義する

Image 1
Image 2
Roblox Studio
local PathfindingService = game:GetService("PathfindingService")
local character = workspace:WaitForChild("NPC")
local humanoid = character:WaitForChild("Humanoid")
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
humanoidRootPart.Anchored = false

-- Get the NPC's start position
local startPoint
if character.PrimaryPart then
	startPoint = character.PrimaryPart.Position
elseif character:FindFirstChild("HumanoidRootPart") then
	startPoint = character.HumanoidRootPart.Position
else
	error("No valid part found to determine the NPC's position")
end

local endPoint = workspace.End.Position

パスの作成

-- Create a path object
local path = PathfindingService:CreatePath({
	AgentRadius = 2,
	AgentHeight = 5,
	AgentCanJump = true,
	AgentJumpHeight = 10,
	AgentMaxSlope = 45,
})

パスの計算

-- Compute the path
path:ComputeAsync(startPoint, endPoint)

-- Check the path's status
if path.Status == Enum.PathStatus.Success then
	print("Path successfully computed.")
elseif path.Status == Enum.PathStatus.NoPath then
	print("No path could be found.")
elseif path.Status == Enum.PathStatus.Fail then
	print("Path computation failed.")
end

パスの視覚化

-- Visualize the path
local waypoints = path:GetWaypoints()

for _, waypoint in ipairs(waypoints) do
	local part = Instance.new("Part")
	part.Shape = Enum.PartType.Ball
	part.Material = Enum.Material.Neon
	part.Color = Color3.fromRGB(0, 255, 0)
	part.Size = Vector3.new(0.5, 0.5, 0.5)
	part.Position = waypoint.Position
	part.Anchored = true
	part.CanCollide = false
	part.Parent = workspace
end
Image 1
Roblox Studio

NPCをパスに沿って移動させる

-- Move the character along the path
for _, waypoint in ipairs(waypoints) do
	print(waypoint.Position)
	print(humanoid)
	humanoid:MoveTo(waypoint.Position)
	humanoid.MoveToFinished:Wait()
end

print("Character has followed the path.")
Image 1
Roblox Studio

例:完全なコード

local PathfindingService = game:GetService("PathfindingService")
local character = workspace:WaitForChild("NPC")
local humanoid = character:WaitForChild("Humanoid")
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
humanoidRootPart.Anchored = false

-- Get the NPC's start position
local startPoint
if character.PrimaryPart then
	startPoint = character.PrimaryPart.Position
elseif character:FindFirstChild("HumanoidRootPart") then
	startPoint = character.HumanoidRootPart.Position
else
	error("No valid part found to determine the NPC's position")
end

local endPoint = workspace.End.Position


-- Create a path object
local path = PathfindingService:CreatePath({
	AgentRadius = 2,
	AgentHeight = 5,
	AgentCanJump = true,
	AgentJumpHeight = 10,
	AgentMaxSlope = 45,
})

-- Compute the path
path:ComputeAsync(startPoint, endPoint)

-- Check the path's status
if path.Status == Enum.PathStatus.Success then
	print("Path successfully computed.")
elseif path.Status == Enum.PathStatus.NoPath then
	print("No path could be found.")
elseif path.Status == Enum.PathStatus.Fail then
	print("Path computation failed.")
end

-- Handle path being blocked during movement
path.Blocked:Connect(function(blockedWaypointIndex)
	print("Path is blocked at waypoint index:", blockedWaypointIndex)
end)

-- Visualize the path
local waypoints = path:GetWaypoints()

for _, waypoint in ipairs(waypoints) do
	local part = Instance.new("Part")
	part.Shape = Enum.PartType.Ball
	part.Material = Enum.Material.Neon
	part.Color = Color3.fromRGB(0, 255, 0)
	part.Size = Vector3.new(0.5, 0.5, 0.5)
	part.Position = waypoint.Position
	part.Anchored = true
	part.CanCollide = false
	part.Parent = workspace
end


-- Move the character along the path
for _, waypoint in ipairs(waypoints) do
	print(waypoint.Position)
	print(humanoid)
	humanoid:MoveTo(waypoint.Position)
	humanoid.MoveToFinished:Wait()
end

print("Character has followed the path.")

このチュートリアルがお役に立ちましたら、私の仕事をサポートするためにコーヒーをおごっていただけると嬉しいです。

ご支援、誠にありがとうございます!

コーヒーをおごる