寻路服务

  • 类型:PathFindService

服务对象
此对象为服务对象,可以使用GetService()函数获取此服务。

不可创建
无法使用RWObject:New(Classname)创建此对象,也不在编辑器对象列表中显示。

不在编辑器管理器中显示

简介

根据地形,障碍,角色高矮胖瘦等因素计算寻路路径的服务。是角色自动寻路的基础。

函数

    GetPath(startPoint,terminalPoint)
    计算路径坐标,输入起点和终点,返回一个记录路点坐标的路径对象

    CalculateNavMesh(agentRadius,agentHeight,agentSlope,repeatTime)
    根据给定参数每一段时间计算一次导航网格,调用本函数需要先将NavMeshOpen设置为true或者在游戏设置中开启导航网格选项。Avatar:MoveTo已封装了该函数,会持续计算导航网格。为0时CalculateNavMesh只在调用时计算一次。

实例

先在编辑器中创建一个迷宫,锚定的零件充作迷宫的墙壁。设定好起点和终点,创建一个男角色,通过脚本自动生成路径点,让npc沿着路径点移动,每走过一个路径点就消除一个路径点,最终走到终点。场景如下:

寻路场景示例

脚本:

local p = nil -- 路径
local i = 1 -- 变量点
local l = {nil} -- 零件暂存
local avatar = WorkSpace:WaitForChild("Boy") -- 获取创建好的角色

GameSetting.NavMeshOpen = true -- 开启导航网格
PathFindService:CalculateNavMesh(0.3,1.5,45,0) -- 计算一次导航网络
p = PathFindService:GetPath(Vector3(0,0,0),Vector3(0,0,30)) -- 获取导航路径上的路径点

for k, v in pairs(p) do -- 在每个路径点处创建零件,设置它的属性,将它放到零件数组中
    local part = RWObject.Create("Part")
    part.Position = p[k] + Vector3(0,0.5,0)
    part.UseType = Enum.MeshTypes.Sphere
    part.Color = Vector3(128,255,255)
    part.Scale = Vector3(0.25,0.25,0.25)
    part.Anchored = true
    part.CanCollide = false
    l[k] = part
end

function _MoveToCompleteF(isSuccessful)
    if isSuccessful then -- 当角色到达每个路径点时,销毁对应的块
        if i <= #p then
            if l[i] ~= nil then
                l[i]:Destroy()
                i = i+1
            end
            avatar:MoveTo(p[i],5) -- 当角色到达每个路径点时,自动向下一个路径点移动
        end
    end
end

avatar.onMoveToFinished:Connect(_MoveToCompleteF) -- 给角色注册MoveTo完成事件,当角色走完一段路径后自动触发_MoveToCompleteF函数
avatar:MoveTo(p[i],5) -- 角色第一次移动
文档更新时间: 2020-12-01 21:08   作者:刘征