Class.DataStoreService は、プレイヤーのインベントリやスキルポイントなどのアイテムのようなセッション間の保持が必要なデータを保存できます。データストアはエクスペリエンスごとに一貫されているため、エクスペリエンス内の任意の場所からアクセスでき、変更できます。
データストアに粒度の高いパーミッションコントロールを追加し、Studio または Roblox サーバー以外の場所からアクセスするためには、オープンクラウド API を使用する 。
一時的なデータを更新またはアクセスする必要がある場合は、メモリストア を使用します。
Studio アクセスを有効化する
デフォルトでは、Studio でテストされたエクスペリエンスはデータストアにアクセスできませんので、まずはこれらを有効にする必要があります。Studio でデータストアにアクセスすると、ライブエクスペリエンスのために Studio アクセスする同じデータストアをアクセスできるため、生産データを上書きする可能性があります。
公開されたエクスペリエンスでStudio アクセスを有効にするには:
- Go to ホーム > ゲーム設定 > セキュリティ 。
- Enable the Studio アクセスを API サービスに有効化 toggle.
- クリックします 保存 。
データストアにアクセスする
エクスペリエンス内のデータストアにアクセスするには:
- Add DataStoreService to a server-side Script 。
- Class.DataStoreService:GetDataStore()|GetDataStore() 関数を使用し、使用するデータストアの名前を指定します。データストアが存在しない場合は、Studio は初めてデータストアを保存するときに作成します。
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
データの作成
データストアは、Lua テーブルと似ている辞書です。ユニークな キー インデックスは、ユーザーのユニークな Player.UserId やエクスペリエンスプロモーションの名前など、データスト保管の各値にあります。
ユーザーデータキー | 値 |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
プロモーションデータの鍵 | 値 |
アクティブスペシャルイベント | サマーパーティー2 |
アクティブプロモコード | ボーナス123 |
CanAccessPartyPlace | はい |
新しいエントリを作成するには、SetAsync() を呼び出し、キー名と値を指定します。
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, errorMessage = pcall(function()
experienceStore:SetAsync("User_1234", 50)
end)
if not success then
print(errorMessage)
end
データの更新
データストア内の任意のストレージ値を変更するには、UpdateAsync() を呼び出し、入力のキー名とコールバック関数を入力して、エントリを更新する方法を定義します。このコールバックは、現在の値を取得し、ロジックを定義するために新しい値を返します
local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local function makeNameUpper(currentName)
local nameUpper = string.upper(currentName)
return nameUpper
end
local success, updatedName = pcall(function()
return nicknameStore:UpdateAsync("User_1234", makeNameUpper)
end)
if success then
print("Uppercase Name:", updatedName)
end
設定対比更新
セットを使用して、特定のキーをクイックに更新できます。Class.GlobalDataStore:SetAsync()|SetAsync() 機能:
- 2つのサーバーが同じキーを同時に設定しようとすると、データの一貫性が保てない場合があります
- 書き込みの制限にのみカウントされます
更新を使用して、複数のサーバーの試行を処理します。Class.GlobalDataStore:UpdateAsync()|UpdateAsync() 機能:
- 変更前に、サーバーから現在のキーバリューを読み取ります
- 書き込む前に読み込むので、速度が低い
- 読み込みと書き込みの両方の制限に対応してカウント
データを読み取る
データストアのエントリの値を読み取るには、GetAsync() を入力し、エントリのキー名を持つこと。
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, currentExperience = pcall(function()
return experienceStore:GetAsync("User_1234")
end)
if success then
print(currentExperience)
end
データを増加させる
データストアに整数を増加するには、IncrementAsync() を呼び出し、エントリのキー名と数値の変更量を入力します。IncrementAsync() は、UpdateAsync()
local DataStoreService = game:GetService("DataStoreService")
local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
local success, newExperience = pcall(function()
return experienceStore:IncrementAsync("Player_1234", 1)
end)
if success then
print(newExperience)
end
データを削除する
要素を削除し、キーに関連する値を返すには、RemoveAsync() を呼び出します。
local DataStoreService = game:GetService("DataStoreService")
local nicknameStore = DataStoreService:GetDataStore("Nicknames")
local success, removedValue = pcall(function()
return nicknameStore:RemoveAsync("User_1234")
end)
if success then
print(removedValue)
end
メタデータ
キーに関連するメタデータの 2種類あります:
- サービス定義 : 最新の更新時間や作成時間など、サービスによってデフォルトの読み取りメタデータが設定されます。すべてのオブジェクトにサービス定義のメタデータがあります。
- ユーザー定義 : タグとカテゴリのカテゴリを追加するためのユーザー定義メタデータ。 DataStoreSetOptions オブジェクトと SetMetadata() 機能を使用して定義されています。
メタデータを管理するには、SetAsync()、UpdateAsync()、GetAsync()、2>Class.GlobalDataStore:IncrementAsync()|IncrementAsync()2>、5>Class.GlobalData
SetAsync() はオプションの 3 番目と 4 番目の引数を受け入れます:
Class.Player.UserId|UserIds のテーブル。これは、コンテンツの著作権と知的財産の追跡と削除に役立つ可能性があります。
Class.DataStoreSetOptions オブジェクト、SetMetadata() 関数を使用して、カスタムメタデータを定義できます。
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")local setOptions = Instance.new("DataStoreSetOptions")setOptions:SetMetadata({["ExperienceElement"] = "Fire"})local success, errorMessage = pcall(function()experienceStore:SetAsync("User_1234", 50, {1234}, setOptions)end)if not success thenprint(errorMessage)end
GetAsync() 、 IncrementAsync() 、および RemoveAsync() は、0> Class.DataStoreKeyInfo0> オブジェクトの 2つの値を返します。この 2つの値には、サ
- Class.DataStoreKeyInfo:GetUserIds()|GetUserIds() 機能は、UserIds を通り抜けて、SetAsync() にパスします。
- Class.DataStoreKeyInfo:GetMetric()|GetMetric() 機能は、SetAsync() を通じて、SetMetadata() にユーザーが提供したユーザー定義メタデータを取得します。
- Class.DataStoreKeyInfo.Version|Version プロパティは、キーのバージョンを取得します。
- Class.DataStoreKeyInfo.CreatedTime|CreatedTime プロパティは、キーが作成された時間を取得し、エポックからミリ秒単位の時間を形式化します。
- Class.DataStoreKeyInfo.UpdatedTime|UpdatedTime プロパティは、キーが最後に更新された時間を取得し、エポックからのミリ秒単位の更新時間を形式化します。
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")local success, currentExperience, keyInfo = pcall(function()return experienceStore:GetAsync("User_1234")end)if success thenprint(currentExperience)print(keyInfo.Version)print(keyInfo.CreatedTime)print(keyInfo.UpdatedTime)print(keyInfo:GetUserIds())print(keyInfo:GetMetadata())endClass.GlobalDataStore:UpdateAsync()|UpdateAsync() のコールバック関数は、現在のキー状態を記述する DataStoreKeyInfo オブジェクトに追加のパラメータを取ります。修正された値、UserIds に関連付けられたキー、およびキーのメタデータを返します。
local DataStoreService = game:GetService("DataStoreService")local nicknameStore = DataStoreService:GetDataStore("Nicknames")local function makeNameUpper(currentName, keyInfo)local nameUpper = string.upper(currentName)local userIDs = keyInfo:GetUserIds()local metadata = keyInfo:GetMetadata()return nameUpper, userIDs, metadataendlocal success, updatedName, keyInfo = pcall(function()return nicknameStore:UpdateAsync("User_1234", makeNameUpper)end)if success thenprint(updatedName)print(keyInfo.Version)print(keyInfo.CreatedTime)print(keyInfo.UpdatedTime)print(keyInfo:GetUserIds())print(keyInfo:GetMetadata())end
メタデータを定義するときは、メタデータの制限 を参照してください。
オーダー済みデータストア
デフォルトでは、データストアはコンテンツをソートしません。持続的なリーダーボード統計のようなオーダードリーダーボード統計では、GetOrderedDataStore() を呼び出すのではなく、GetDataStore() を呼び出します。
local DataStoreService = game:GetService("DataStoreService")local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
注文されたデータストアは、デフォルトのデータストアと同じ基本的な機能をサポートし、ユニークな GetSortedAsync() 機能を含みます。これは、特定のソートオーダー、ページサイズ、最小/最大値に基づく複数のソートキーを含む、ソートオーダーの基本的な機能をサポートします。
次の例では、キャラクターのデータを 3つの行でソートし、それぞれ下降順に表示し、その後、ページをループして、それぞれのキャラクターの名前と年齢を出力します。
local DataStoreService = game:GetService("DataStoreService")
local characterAgeStore = DataStoreService:GetOrderedDataStore("CharacterAges")
-- 指定されたデータストアに人口を集計す保管
local characters = {
Mars = 19,
Janus = 20,
Diana = 18,
Venus = 25,
Neptune = 62
}
for char, age in characters do
local success, errorMessage = pcall(function()
characterAgeStore:SetAsync(char, age)
end)
if not success then
print(errorMessage)
end
end
-- データを 3つのエントリのページに分割する
local success, pages = pcall(function()
return characterAgeStore:GetSortedAsync(false, 3)
end)
if success then
while true do
-- 現在の (最初の) ページを取得します
local entries = pages:GetCurrentPage()
-- ページ内のすべてのキーバリューペアをイテレートします
for _, entry in entries do
print(entry.key .. " : " .. tostring(entry.value))
end
-- 最後のページに到達したかどうかをチェックします
if pages.IsFinished then
break
else
print("----------")
-- 次のページへの進捗状況
pages:AdvanceToNextPageAsync()
end
end
end