如何让人物之外的物体进行寻路

功能效果展示

运行环境

Win7,Win8,Win10

Reworld版本 体验版

vc_redist.x64 运行环境

针对零基础读者的补充

下载安装 Reworld对应版本

Reworld官网链接http://www.reworlder.com/

Reworld创作者之家论坛:http://bbs.reworlder.com

下载后安装后注册账号打开空地图

下载安装 vc_redist.x64.rar运行环境

扫描二维码关注公众号,回复: 9187271 查看本文章

redist.x64下载链接

思路分析

想要实现自动寻路的功能,首先我们需要在玩家加入游戏时,启用编辑器内的导航网格,然后获取寻路具体路径,自身位置,目标位置,把获取的信息赋值给自身的坐标位置就可以实现了。

功能搭建

一、寻路物体搭建过程

1.首先我们需要在工作区里创建两个零件,其中一个命名为Player,另外一个命名为Target,修改他们的颜色方便我们观察和区分。如下图所示:

2.我们再在两个零件之间创造一些障碍物。如下图所示:

 

二、寻路功能搭建过程

在名为Player的零件下创建一个服务器脚本。如下图所示:

编写服务脚本如下:

local player=script.Parent --获取玩家
local target=WorkSpace.Target --获取目标
 
Players.PlayerAdded:Connect(function(Uid) --当玩家加入时
    local ren=Players:GetPlayerByUserId(Uid)   --获取玩家本身
    ren.AvatarAdded:Connect(function()      --当玩家角色加载时
        GameSetting.NavMeshOpen = true -- 路径导航开启赋值
        PathFindService:CalculateNavMesh(0.5,1.5,45) -- 导航网格建立
        --获取寻路具体路径,自身位置,目标位置
        local tableList=PathFindService:GetPath(player.Position,target.Position)
        --循环路径数量,这里从第二个路径点开始,因为第一个路径点就是自身的位置
        for i=2,#tableList,1 do 
            coroutine.start(function()--运用协程帮助我们实现缓动效果,替代update函数
                --当玩家和当前路径点距离大于0.1并且index并未超出索引范围时,玩家移动
                while Vector3.Distance(player.Position,tableList[index])>0.1 and index<=#tableList do
                    --Vector3.MoveTowards方法类似Mathf.Lerp方法,传入自身和目标位置以及缓动插值即可
                    --把获取的信息赋值给自身的Position
                    player.Position=Vector3.MoveTowards(player.Position,tableList[index],0.1)
                    coroutine.wait(0.02)--协程等待
                end
                --如果不满足while的循环条件,说明已经到达当前的路径,我们去更新下一个路径
                index=index+1
            end)
        end
        --当全部路径搜寻完之后,我们重置路径索引计数器
        index=2
    end)
end)

补充说明

1.什么是工作区?

工作区中的对象是会被可视化显示到3D场景中的,并且只有在工作区中的对象才会发生物理交互。

2.什么是服务器脚本?

只会在服务器运行的Lua脚本代码,用于编写服务器逻辑。

3.什么是导航网格?

开启后地图会生成导航网格,可用于实现自动绕过阻挡的寻路功能。开启此功能会增加游戏运算压力,如果不需要寻路功能,建议不要开启。

好了,接下来我们开始游戏,当玩家加入的时候,我们可以看见名为Player的零件通过了障碍物,移动到了名为Target的零件的位置。如果有什么问题或者有更好的实现方式,大家可以在下方积极交流讨论,我们也会参与进来和大家一起分享经验,期望能和大家共同进步~~

发布了35 篇原创文章 · 获赞 2 · 访问量 5825

猜你喜欢

转载自blog.csdn.net/weixin_41987154/article/details/102832699