Un servicio que calcula rutas de navegación.
Conceptos Clave | Detalles |
---|---|
PathfindingService | Un servicio que calcula rutas de navegación. |
Path | Un objeto que representa una ruta calculada. |
Waypoints | Puntos a lo largo de la ruta que el personaje seguirá. |
Agent Parameters | Parámetros que definen las capacidades y limitaciones de movimiento del personaje (e.g., radio, altura, altura de salto). |
Blocked Event | Un evento que se dispara cuando la ruta está bloqueada. |
StatusChanged Event | Un evento que se dispara cuando el estado de la ruta cambia. |
Definir Punto de Inicio y Punto Final
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
Creando una Ruta
-- Create a path object
local path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true,
AgentJumpHeight = 10,
AgentMaxSlope = 45,
})
Calculando una Ruta
-- 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
Visualizando la Ruta
-- 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
Moviendo NPC a lo largo de la Ruta
-- 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
Ejemplo: Código Completo
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.")
Si encuentras útil este tutorial y deseas apoyar mi trabajo, considera invitarme a un café.
¡Muchas gracias por tu apoyo!
Invítame a un café