功能效果展示
思路分析
存储服务是Reworld编辑器提供的用于存储游戏中数据的接口,在每次玩家进入游戏的时候都可以通过获取这些存储的数据来实现游戏状态的保留。下面我们来做最简单的一个数值存储,用最常见的金币作为例子。
存储服务的限制:
1、编辑器制作完成后需发布才可进行测试。
2、存储效率:每秒钟最多可进行10次的存储。
3、存储限制:数据存储的key没有限制,单个Value容量最大为16K
功能搭建
一、金币搭建过程
1.用圆柱压缩成一个钱币,贴上贴花。如果需要旋转漂浮就把重力取消再加上扭矩或者保持加速度。如下:
2.金币的功能是,在角色触碰后增加玩家的金币数。金币被触碰后会消失,一段时间后在原位置重新出现一个金币。金币需要漂浮在空中,并且有旋转效果,所以取消金币的重力,并在金币下增加保持角速度。
3.玩家的金币数需要存储在玩家相关的对象上,才能实现每个玩家都有自己的金币。这里选择将数值用值对象的方式存储在玩家对象下。在玩家初始化->玩家初始化脚本中,添加一个文件夹,命名为预设值。在文件夹下添加整数值对象,命名为金币数。
4.在金币下添加服务器脚本,编写金币的脚本如下:
local goldStore = DataStoreService:FindDataStore("DataTest") --创建存储空间 local delaytime = 1--金币冷却时间 local istouch = true--用来规避多次接触 script.Parent.TriggerEnter:Connect(function(res) if res:IsClass("Avatar") then if istouch == true then istouch = false coroutine.start(function() local setpos = script.Parent.Position--记录金币的位置 script.Parent:Destroy() local player = Players:GetPlayerByUserId(res.PlayerId)--通过角色的id获取玩家 local coinshad = player.玩家脚本.预设值.金币数--找到玩家下用来记录金币数的值 coinshad.Value = coinshad.Value + 1--金币数增加 local key = "Coin" goldStore:Set(res.PlayerId, coinshad.Value)--将金币数值存储下来 coroutine.wait(delaytime) local newcoin = ServerStorage.金币:Clone(WorkSpace) newcoin.Position = setpos --将克隆的金币放在记录位置上 end) end end end)
金币制作完毕后需要在服务器存储中放入副本。
5.制作好了用来排行的数据,希望每次进入游戏时都可以保留上次的数据,所以需要将金币数存储为玩家的数据,使用玩家信息存储。在工作区或者服务器逻辑中创建服务器脚本,编写代码如下:
Players.PlayerAdded:Connect(function(Uid) --玩家加载时触发 local player = Players:GetPlayerByUserId(Uid) local Coins = player:WaitForChild("玩家脚本"):WaitForChild("预设值"):WaitForChild("金币数") local key = "Coin" if goldStore:Get(Uid) then--如果存储过金币值 Coins.Value = goldStore:Get(Uid) end end)
二、显示界面搭建过程
1.在界面初始化下添加一个2D容器,命名为金币显示,在其中放一个图片控件显示金币图标,一个文本控件显示金币数量。分别命名为金币图和金币数。
2.在金币显示下添加客户端脚本:
local player = Players:GetLocalPlayer() local getcoin = player:WaitForChild("玩家脚本"):WaitForChild("预设值"):WaitForChild("金币数") local coinnum = GameUI:WaitForChild("金币显示"):WaitForChild("金币数") local function CoinChange() -- 金币数值更改时显示 coinnum.Text = getcoin.Value end PropertyWatcherService:ListenPropertyChange(getcoin, "Value", CoinChange) -- 监测金币数的变化
好了,接下来我们运行游戏测试一下。如果有什么问题或者有更好的实现方式,大家可以在下方积极交流讨论,我们也会参与进来和大家一起分享经验,期望能和大家共同进步~~~
相关阅读:
本帖最后由 开会你是不是没听_轩哥 于 2020-05-12 20:34 编辑
请登录后评论~