保存数据

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

游戏常常需要在玩家的等级、经验点、物品栏项目、金钱/现金等之间存储一些 持久数据

本教程将显示您如何创建一个基本 数据存储 、保存样本数据和读回数据以游戏会话。

启用工作室访问

默认情况下,在 Studio 中测试的游戏无法访问数据存储,因此您必须先启用它们。

  1. 确保您的游戏是 发布 (文件> 发布到 Roblox),以启用 Studio 访1) 使用权 2)通行证 3)访问权限。

  2. 主页 选项卡打开 游戏设置 窗口。

  3. 在安全部分中,切换 启用工作室访问 API 服务。

  4. 单击 保存 以注册您的更改。

创建数据存储

数据存储使用 独特的名称 来识别。 在此示例中,名为 PlayerGold 的数据存储将保存每个玩家的金币存储在持久存储。

  1. 在 Class.ServerScriptService 中创建一个名为 ServerScriptService 的新 Class.Script

  2. 数据存储由 DataStoreService 管理,因此在第一行中获取服务。


    local DataStoreService = game:GetService("DataStoreService")
  3. 使用 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 场景

真的

要将玩家数据保存到数据存商店中:

  1. 创建一个名为 playerUserID 的变量为数据存储键。然后,使用 playerGold 来存储玩家的初始金币数量。


    local DataStoreService = game:GetService("DataStoreService")
    local goldStore = DataStoreService:GetDataStore("PlayerGold")
    -- 数据存储的钥匙和值
    local playerUserID = 505306092
    local playerGold = 250
  2. 要将数据保存到 PlayerGold 数据存商店中,请在受保护的调用中调用 Class.GlobalDataStore:SetAsync()|SetAsync ,并在之前创建的钥匙和值变量上传传递。


    local DataStoreService = game:GetService("DataStoreService")
    local goldStore = DataStoreService:GetDataStore("PlayerGold")
    -- 数据存储的钥匙和值
    local playerUserID = 505306092
    local playerGold = 250
    -- 设置数据存储钥键
    local setSuccess, errorMessage = pcall(function()
    goldStore:SetAsync(playerUserID, playerGold)
    end)
    if not setSuccess then
    warn(errorMessage)
    end

SetAsync() 这样的函数是网络调用,可能会时间不同。上面的示例显示了上次此类故障发生时 pcall() 用于检测并处理此类故障。

在最基本的形式中,pcall() 接受一个函数,并且返回两个值:

  • 状态 (boolean); 如果函数无错误地执行,或者为 false ,否则。
  • 函数或错误消信息的返回值。

在上面的示例中,状态 (setSuccess ) 在第 12 行中测试,如果因任何原因导致 SetAsync() 失败,errorMessage 将在输出窗口中显示。

读取数据

  1. 要从数据存商店中读取数据,请使用 GetAsync() 使用所需的钥匙名。


    local setSuccess, errorMessage = pcall(function()
    goldStore:SetAsync(playerUserID, playerGold)
    end)
    if not setSuccess then
    warn(errorMessage)
    end
    -- 阅读数据存储钥键
    local getSuccess, currentGold = pcall(function()
    return goldStore:GetAsync(playerUserID)
    end)
    if getSuccess then
    print(currentGold)
    end
  2. 要测试脚本,请单击 运行 并注意打印到currentGold窗口的 currentGold 值。请注意,这可能需要几秒钟,因为函数必须连接到数据存储服务器。

示例项目

现在您了解了基本数据存储的使用方法,请在示例游戏中测试。

金钱大闪惊 收集尽可能多的金块,打破个人记录,在游戏会话之间持续。

您还可以在 Studio 中编辑游戏,并探索包含数据自动保存等内容的强化 GoldManager 脚本。

Edit in Studio option from the experience's main page