Ein Dienst, der Pfade berechnet.
Schlüsselkonzepte | Details |
---|---|
PathfindingService | Ein Dienst, der Pfade berechnet. |
Path | Ein Objekt, das einen berechneten Pfad darstellt. |
Waypoints | Punkte entlang des Pfades, denen der Charakter folgen wird. |
Agent Parameters | Parameter, die die Bewegungsfähigkeiten und Einschränkungen des Charakters definieren (z.B. Radius, Höhe, Sprunghöhe). |
Blocked Event | Ein Ereignis, das ausgelöst wird, wenn der Pfad blockiert ist. |
StatusChanged Event | Ein Ereignis, das ausgelöst wird, wenn sich der Pfadstatus ändert. |
Start- und Endpunkt definieren
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
Einen Pfad erstellen
-- Create a path object
local path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true,
AgentJumpHeight = 10,
AgentMaxSlope = 45,
})
Einen Pfad berechnen
-- 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
Den Pfad visualisieren
-- 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
Roblox Studio
NPC entlang des Pfades bewegen
-- 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.")
Roblox Studio
Beispiel: Vollständiger Code
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.")
Wenn Sie dieses Tutorial hilfreich fanden und meine Arbeit unterstützen möchten, können Sie mir gerne einen Kaffee spendieren.
Vielen Dank für Ihre Unterstützung!
Kaufen Sie mir einen Kaffee