如何利用Reworld做一个一键吸空投箱的效果

功能效果展示

运行环境

Win7,Win8,Win10

Reworld版本 体验版

vc_redist.x64 运行环境

针对零基础读者的补充

下载安装 Reworld对应版本

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

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

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

redist.x64下载链接

思路分析

我们想要实现玩家按键吸空投箱的功能,首先我们需要设计一个技能的UI,点击这个UI后,空投箱移动到玩家的位置,因此我们需要获取到玩家的坐标,把所有的空投箱组合成一个集合,集合下的所有空投箱朝玩家坐标移动,当到达玩家坐标后停止移动。

功能搭建

一、空投箱搭建过程
1.首先我们需要在工作区里创建一个文件夹,重命名为ObjList。在文件夹下创建一个自定义零件,取消锚定后,导入一个在商店里下载好的空投箱模型。如下图所示:
如何利用Reworld做一个一键吸空投箱的效果_第1张图片

2.我们复制几个ObjList下上一步创建好的空投箱零件,然后分散排布它们的位置,方便我们观看效果。如下图所示:
如何利用Reworld做一个一键吸空投箱的效果_第2张图片

二、技能UI搭建过程
在界面初始化下创建一个2D容器界面,重命名为Test,在2D容器界面下创建一个按钮控件,在按钮控件下创建一个文本控件,调整大小和位置。如下图所示:
如何利用Reworld做一个一键吸空投箱的效果_第3张图片

核心功能环境搭建

一、服务器脚本搭建过程
在工作区下创建一个服务器脚本。如下图所示:
如何利用Reworld做一个一键吸空投箱的效果_第4张图片
编写服务器脚本如下:

local list=WorkSpace.ObjList --获取到要聚拢物体的集合
local ren=nil
 
local MoveTrigger=false --控制聚拢效果的开关
Players.PlayerAdded:Connect(function(Uid)
    ren= Players:GetPlayerByUserId(Uid)
end)
 
MessageEvent.ServerEventCallBack("GatherTogether"):Connect(function()--接收按钮回调
    MoveTrigger=true
end)
local index=0
GameRun.Update:Connect(function()
    if ren~=nil and MoveTrigger then
        local objs=list:GetAllChild() --获取objList文件夹下所有子类
        index=0
        for i=1,#objs,1 do
            if Vector3.Distance(objs\[i\].Position,ren.Avatar.Position)>1 then
                --将物体聚拢到人物身边
                objs\[i\].Position=  Vector3.MoveTowards(objs\[i\].Position,ren.Avatar.Position,0.1)
            else
                objs\[i\].Position=objs\[i\].Position
                index=index+1
            end 
            if index==#objs then --当物体全部到达人物身边时停止聚拢
                MoveTrigger=false
            end
        end
 
    end
end)

二、客户端搭建过程
我们在玩家初始化,玩家初始化脚本下创建一个客户端脚本。如下图所示:
如何利用Reworld做一个一键吸空投箱的效果_第5张图片
编写客户端脚本如下:

GameUI.Test.按钮控件.OnClick:Connect(function() --注册按钮点击事件
    MessageEvent.FireServer("GatherTogether")
end)

二、补充说明

1.__什么是工作区?

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

2.__什么是服务器脚本?

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

3.__什么是客户端脚本?

_只会在客户端执行的脚本,执行的逻辑和表现也只会在本地客户端展现;可在以下几个文件目录下自动执行,客户端脚本在“工作区”下不会自动执行,需要放在以下对象里面:
1. __客户端最先加载 。
2. 工作区中的角色模型玩家初始化中的角色初始化脚本,在运行后会自动移动到角色模型下。
3. 玩家列表中的玩家玩家初始化中的玩家初始化脚本,在运行后会自动移动到玩家下
4. 玩家玩家界面界面初始化的脚本,在运行后会自动移动到玩家界面下。
5. 玩家的背包,例如工具里面的。_

4.什么是2D容器界面?

2D容器界面是显示在玩家屏幕上的2DUI对象的主要存储对象。UI对象若要显示在编辑器中,必须作为容器控件的子级。

游戏运行后,存放在界面初始化_StarterUI下的界面会复制到玩家界面下,只有在玩家界面GameUI下的界面才能在游戏中显示。_

好了,接下来我们开始游戏,点击吸空投这个按钮,所有的空投箱就都被我们吸过来啦。如果有什么问题或者有更好的实现方式,大家可以在下方积极交流讨论,我们也会参与进来和大家一起分享经验,期望能和大家共同进步~~

你可能感兴趣的:(reworld,lua,游戏,游戏开发,游戏引擎)