The DataStoreService は、プレイヤーのインベントリやスキルポイントのように、セッション間で持続する必要があるデータを保存できます。データストアはエクスペリエンスごとに一貫しているので、エクスペリエンスのどこかでも、異なるサーバーの場所を含めて同じデータにアクセスして変更できます。
データストアに粒度の高い権限制御を追加し、Studio または Roblox サーバーの外部にアクセスしたい場合は、データストア用のオープンクラウドAPIを使用する ことができます。
クリエイターハブを通じてエクスペリエンス内のすべてのデータストアを表示し、監視するには、データストアマネージャーを使用します。
頻繁に更新またはアクセスする一時データには、メモリストア を使用します。
スタジオアクセスを有効にすアクセス, 書き込み権限 (write access)
デフォルトでは、Studio でテストされたエクスペリエンスはデータストアにアクセスできませんので、最初に有効にする必要があります。Studio でデータストアにアクセスすると、ライブエクスペリエンスにとって危険である可能性があります。Studio はクライアントアプリケーションと同じデータストアにアクセスします。生産データの上書きを避けるには、ライブエクスペリエンスでこの設定を有効にしないでください。代わりに、エクスペリエンスの別のテストバージョンに有効化します。
公開された経験でStudio へのアクセスを有効にするには:
- Open ゲーム設定。
- ナビゲート to セキュリティ 。
- API サービスへの Studio アクセスを有効にするトグル を有効にします。
- クリック 保存 。
アクセスデータストア
エクスペリエンス内のデータストアへのアクセス:
- サーバー側の DataStoreService に Script を追加します。
- GetDataStore() 機能を使用し、使用したいデータストアの名前を指定します。データストアが存在しない場合、Studio はエクスペリエンスデータを保存するときに最初に作成します。
local DataStoreService = game:GetService("DataStoreService")local experienceStore = DataStoreService:GetDataStore("PlayerExperience")
データを作成する
データストアは本質的に Luau テーブルと同様の辞書です。ユニークな キー インデック保管は、ユーザーのユニークな Player.UserId またはエクスペリエンスプロモーションの名前付きストリングのように、データストアに各値をインデックスします。
ユーザーデータキー | 値 |
---|---|
31250608 | 50 |
351675979 | 20 |
505306092 | 78000 |
プロモーションデータキー | 値 |
ActiveSpecialEvent | サマーパーティ2 |
ActivePromoCode | ボーナス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() を呼び出し、エントリを更新する方法を変更します。このコールバックは、現在の値を取り、定義したロジックに基づいて新しい値を返します。コールバックが nil を返す場合、書き込み操作がキャンセルされ、値は更新されません。
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
設定と更新の比アップデート
セットを使用して、特定のキーを迅速に更新します。SetAsync() 関数:
- 2つのサーバーが同時に同じキーを設定しようとした場合、データの不一致を引き起こす可能性があります
- 書き込み制限にのみカウントされます
アップデートを使用して、マルチサーバー試行を処理します。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種類あります:
- サービス定義 : 最新の更新時間や作成時間のようなデフォルトの読み取り専用メタデータ。すべてのオブジェクトにサービス定義メタデータがあります。
メタデータを管理するには、SetAsync()、UpdateAsync()、GetAsync()、IncrementAsync()、およびRemoveAsync()機能を拡張します。
SetAsync() オプションの第三と第四の引数を受け入れます:
UserIds のテーブル。これは、コンテンツの著作権と知的財産の追跡と削除に役立つ可能性があります。
A DataStoreSetOptions オブジェクト、 where あなた can define カスタムメタデータ using the 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() は、DataStoreKeyInfo オブジェクトで 2番目の値を返します。この 2番目の値には、ユーザー定義メタデータを取得するためのサービス定義プロパティと機能が両方含まれています。
- 関数は、 を介してパスしたユーザー定義のメタデータを取得します。
- Version プロパティは、キーのバージョンを取得します。
- CreatedTime プロパティは、キーが作成された時間を取得し、エポックからのミリ秒数としてフォーマットします。
- 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())endUpdateAsync() のコールバック関数は、現在のキー状態を記述する 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