功能效果展示
运行环境
Win7,Win8,Win10
Reworld版本 体验版
vc_redist.x64 运行环境
针对零基础读者的补充
下载安装 Reworld对应版本
Reworld官网链接:http://www.reworlder.com/
Reworld创作者之家论坛:http://bbs.reworlder.com
下载后安装后注册账号打开空地图
下载安装vc_redist.x64.rar运行环境
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的零件的位置。如果有什么问题或者有更好的实现方式,大家可以在下方积极交流讨论,我们也会参与进来和大家一起分享经验,期望能和大家共同进步~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。