游戏常常需要在玩家的等级、经验点、物品栏项目、金钱/现金等之间存储一些 持久数据 。
本教程将显示您如何创建一个基本 数据存储 、保存样本数据和读回数据以游戏会话。
启用工作室访问
默认情况下,在 Studio 中测试的游戏无法访问数据存储,因此您必须先启用它们。
确保您的游戏是 发布 (文件> 发布到 Roblox),以启用 Studio 访1) 使用权 2)通行证 3)访问权限。
从 主页 选项卡打开 游戏设置 窗口。
在安全部分中,切换 启用工作室访问 API 服务。
单击 保存 以注册您的更改。
创建数据存储
数据存储使用 独特的名称 来识别。 在此示例中,名为 PlayerGold 的数据存储将保存每个玩家的金币存储在持久存储。
在 Class.ServerScriptService 中创建一个名为 ServerScriptService 的新 Class.Script 。
数据存储由 DataStoreService 管理,因此在第一行中获取服务。
local DataStoreService = game:GetService("DataStoreService")使用 DataStoreService:GetDataStore() 调用串 "PlayerGold" 。 这将访问现有的 PlayerGold 数据存储,或者创建它。
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")
保存数据
数据存储其实是一个词典,例如 Lua 表。数据存储中的每个值都由唯一的 钥匙 索引,例如玩家的独特 UserId 或游戏促销的命名字串。
玩家数据示例
钥匙 | 值 |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
促销示例
钥匙 | 值 |
---|---|
特殊活动 | 夏季派对 2 |
激活促销代码 | 奖励123 |
可以访问 Party 场景 | 真的 |
要将玩家数据保存到数据存商店中:
创建一个名为 playerUserID 的变量为数据存储键。然后,使用 playerGold 来存储玩家的初始金币数量。
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- 数据存储的钥匙和值local playerUserID = 505306092local playerGold = 250要将数据保存到 PlayerGold 数据存商店中,请在受保护的调用中调用 Class.GlobalDataStore:SetAsync()|SetAsync ,并在之前创建的钥匙和值变量上传传递。
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- 数据存储的钥匙和值local playerUserID = 505306092local playerGold = 250-- 设置数据存储钥键local setSuccess, errorMessage = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not setSuccess thenwarn(errorMessage)end
像 SetAsync() 这样的函数是网络调用,可能会时间不同。上面的示例显示了上次此类故障发生时 pcall() 用于检测并处理此类故障。
在最基本的形式中,pcall() 接受一个函数,并且返回两个值:
- 状态 (boolean); 如果函数无错误地执行,或者为 false ,否则。
- 函数或错误消信息的返回值。
在上面的示例中,状态 (setSuccess ) 在第 12 行中测试,如果因任何原因导致 SetAsync() 失败,errorMessage 将在输出窗口中显示。
读取数据
要从数据存商店中读取数据,请使用 GetAsync() 使用所需的钥匙名。
local setSuccess, errorMessage = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not setSuccess thenwarn(errorMessage)end-- 阅读数据存储钥键local getSuccess, currentGold = pcall(function()return goldStore:GetAsync(playerUserID)end)if getSuccess thenprint(currentGold)end要测试脚本,请单击 运行 并注意打印到currentGold窗口的 currentGold 值。请注意,这可能需要几秒钟,因为函数必须连接到数据存储服务器。
示例项目
现在您了解了基本数据存储的使用方法,请在示例游戏中测试。
金钱大闪惊 收集尽可能多的金块,打破个人记录,在游戏会话之间持续。
您还可以在 Studio 中编辑游戏,并探索包含数据自动保存等内容的强化 GoldManager 脚本。