ゲーム内設定をゲームレコードに保存する
注釈:本資料はAI技術を用いて翻訳されています。
概要
Cloud Save サービスを使用すると、ゲームのユースケースに応じて、ゲームデータを JSON 形式で保存できます。保存されるゲームレコードは、グローバルタイトル用途であり、プレイヤーがアクセス可能で、場合によっては編集可能です。例えば、以下のようなデータを保存します:
- ゲームのシーズン UI テーマ設定
- ゲームイベントやニュース情報
- クラン、エリア、マップなどのプレイヤーの集合的なゲームデータ
このガイドでは、ゲームレコードを利用してゲームデータを保存し、ゲームクライアント内で表示し、ユースケースに応じて変更する方法を学びます。
目標
- ゲームレコードの概要を理解する
- ゲームレコードにゲームデータを保存する方法を理解する
- ゲームレコードを表示する方法を理解する
- ゲームレコードを変更する方法を理解する
- ゲームレコードを削除する方法を理解する
- AccelByte SDK を使用してゲームレコードを活用する方法を学ぶ
前提条件
以下へのアクセスが必要です:
- Admin Portal
- AccelByte Unreal または Unity SDK、以下の権限を含む:
- Client ID
- Client Secret
- AccelByte Cloud Save API ドキュメント
新しいゲームレコードにデータを保存する
Admin Portal 経由で新しいゲームレコードにデータを保存する
Admin Portal 経由でゲームレコードを作成することは、ゲームクライアントによって変更される必要がなく、ゲームクライアントによって取得されるだけのデータを保存したい場合に適しています。例: シーズン UI テーマ設定、イベント/ニュース情報など。
ゲームレコードを作成するには、以下の手順に従ってください:
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save メニューに移動し、Game Records を選択します。
-
Cloud Save ページで、Game Records タブを開き、Create Game Record ボタンをクリックします。Add Record フォームが表示されます。
-
必要な情報を入力します:

- 適切な形式を使用して Game Record Key を入力します。これをレコードのタイトルとして使用でき、後で SDK からレコードを取得するための識別子として使用できます。
- Write Permission セクションで選択することで、ゲームサーバーまたはゲームクライアントのみがレコードを更新できるように追加の検証を追加することもできます。利用可能なオプションの完全なリストについては、Write Permission を参照してください。
- JSON 形式で保存したいデータを追加します。
-
Add をクリックします。新しいレコードがレコードリストに追加されます。

SDK を使用して新しいゲームレコードにデータを保存する
これは、ゲームクライアントから何らかのアクションがトリガーされた後に動的に作成されるゲームレコードが必要な場合に適しています。例として、公開のカスタマイズ可能なマップデータを保存します。以下の関数を使用して新しいゲームレコードを作成することでデータを保存します。
クライアント経由でゲームレコードを作成する
- Unreal
- Unity
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString Key = FString("map-data");
TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=125;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=115,Y=225,Z=120"));
ApiClient->CloudSave.SaveGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SaveGameRecord fails
}));
CloudSave cloudSave = AccelByteSDK.GetClientRegistry().GetApi().GetCloudSave();
string key = "map-data";
Dictionary<string, object> recordRequest = new Dictionary<string, object>
{
{"NPC1", "x:125,y:256,z:125"},
{"NPC2", "x:115,y:225,z:120"}
};
cloudSave.SaveGameRecord(key, recordRequest, result =>
{
if (result.IsError)
{
// Do something if SaveGameRecord fails
Debug.Log($"Error SaveGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if SaveGameRecord succeeds
});
サーバー経由でゲームレコードを作成する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = FString("map-data");
TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=125;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=115,Y=225,Z=120"));
ServerApiClient->ServerCloudSave.SaveGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SaveGameRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "map-data";
Dictionary<string, object> recordRequest = new Dictionary<string, object>
{
{"NPC1", "x:125,y:256,z:125"},
{"NPC2", "x:115,y:225,z:120"}
};
var optionalParams = new GameRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.CLIENT
};
serverCloudSave.SaveGameRecord(key, recordRequest, optionalParams, result =>
{
if (result.IsError)
{
// Do something if SaveGameRecord fails
Debug.Log($"Error SaveGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if SaveGameRecord succeeds
});
サーバー経由で一時的なゲームレコードを作成する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = FString("map-data");
TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=125;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=115,Y=225,Z=120"));
FTTLConfig TTLConfig{};
TTLConfig.Action = EAccelByteTTLConfigAction::DELETE_RECORD;
TTLConfig.Expires_At = FDateTime::UtcNow() + FTimespan(0, 0, 5); // Will delete this record in the next five seconds
ServerApiClient->ServerCloudSave.SaveGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if SaveGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SaveGameRecord fails
})
, TTLConfig);
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "map-data";
Dictionary<string, object> recordRequest = new Dictionary<string, object>
{
{"NPC1", "x:125,y:256,z:125"},
{"NPC2", "x:115,y:225,z:120"}
};
var ttlConfig = new TTLConfig()
{
Action = TTLConfigAction.Delete,
ExpiresAt = DateTime.Now.AddSeconds(5) // Will delete this record in the next five sceonds
};
var optionalParams = new GameRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.CLIENT,
TTLConfig = ttlConfig
};
serverCloudSave.SaveGameRecord(key, recordRequest, optionalParams, result =>
{
if (result.IsError)
{
// Do something if SaveGameRecord fails
Debug.Log($"Error SaveGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if SaveGameRecord succeeds
});
サーバー経由でゲームレコードの有効期限を削除する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = FString("map-data");
ServerApiClient->ServerCloudSave.DeleteGameRecordTTLConfig(Key, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteGameRecordTTLConfig was successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteGameRecordTTLConfig fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "map-data";
serverCloudSave.DeleteGameRecordTTLConfig(key, result =>
{
if (result.IsError)
{
// Do something if DeleteGameRecordTTLConfig fails
Debug.Log($"Error DeleteGameRecordTTLConfig, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if DeleteGameRecordTTLConfig succeeds
});
ゲームレコードデータを表示する
Admin Portal またはゲームクライアントから保存および作成されたゲームレコードは、すべてのプレイヤーが取得できます。そのデータを使用して、ゲームのユースケースをサポートするために何でもできます。例として、シーズンテーマの UI を置き換えるためにデータを使用したり、更新されたニュースやイベントを表示するためにデータを表示したりします。
以下の関数を使用してゲームレコードを取得できます:
クライアント経由でゲームレコードを取得する
- Unreal
- Unity
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString Key = FString("inGameNews");
ApiClient->CloudSave.GetGameRecord(Key
, THandler<FAccelByteModelsGameRecord>::CreateLambda([](const FAccelByteModelsGameRecord& Result)
{
// Do something if GetGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if GetGameRecord fails
}));
CloudSave cloudSave = AccelByteSDK.GetClientRegistry().GetApi().GetCloudSave();
string key = "inGameNews";
cloudSave.GetGameRecord(key, result =>
{
if (result.IsError)
{
// Do something if GetGameRecord fails
Debug.Log($"Error GetGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if GetGameRecord succeeds
});
サーバー経由でゲームレコードを取得する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = FString("inGameNews");
ServerApiClient->ServerCloudSave.GetGameRecord(Key
, THandler<FAccelByteModelsGameRecord>::CreateLambda([](const FAccelByteModelsGameRecord& Result)
{
// Do something if GetGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if GetGameRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "inGameNews";
serverCloudSave.GetGameRecords(key, result =>
{
if (result.IsError)
{
// Do something if DeleteUserRecord fails
Debug.Log($"Error DeleteUserRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if DeleteUserRecord succeeds
});
ゲームレコードデータを変更する
Admin Portal 経由でゲームレコードを変更する
Admin Portal からゲームレコードを変更することは、データを調整するために手動でアクションを実行したい場合に適しています。例として、データの修正、監査などがあります。ゲームレコードを更新するには、以下の手順に従ってください:
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Game Records に移動します。
-
Game Records ページで、レコードタイプに応じて、JSON または Binary タブを開きます。リストから、更新したいレコードを見つけて表示します。

-
レコードの詳細ページで、フィールドまたはセクションの鉛筆または編集アイコンをクリックして、コンテンツを更新します。

-
変更を保存します。

SDK を使用して新しいゲームレコードを変更する
これは、ゲームがゲームクライアントからゲームレコードデータを更新する必要がある場合に適しています。保存したデータは、以下の関数を使用して新しいデータに置き換えられます:
クライアント経由でゲームレコードを変更する
- Unreal
- Unity
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString Key = "map-data";
TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=100;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=100,Y=225,Z=120"));
ApiClient->CloudSave.ReplaceGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceGameRecord fails
}));
CloudSave cloudSave = AccelByteSDK.GetClientRegistry().GetApi().GetCloudSave();
string key = "map-data";
Dictionary<string, object> recordRequest = new Dictionary<string, object>
{
{"NPC1", "x:100,y:256,z:125"},
{"NPC2", "x:100,y:225,z:120"}
};
cloudSave.ReplaceGameRecord(key, recordRequest, result =>
{
if (result.IsError)
{
// Do something if ReplaceGameRecord fails
Debug.Log($"Error ReplaceGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if ReplaceGameRecord succeeds
});
サーバー経由でゲームレコードを変更する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "map-data";
TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=100;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=100,Y=225,Z=120"));
ServerApiClient->ServerCloudSave.ReplaceGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceGameRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "map-data";
Dictionary<string, object> recordRequest = new Dictionary<string, object>
{
{"NPC1", "x:100,y:256,z:125"},
{"NPC2", "x:100,y:225,z:120"}
};
var optionalParams = new GameRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.CLIENT
};
serverCloudSave.ReplaceGameRecord(key, recordRequest, optionalParams, result =>
{
if (result.IsError)
{
// Do something if ReplaceGameRecord fails
Debug.Log($"Error ReplaceGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if ReplaceGameRecord succeeds
});
サーバー経由でゲームレコードを一時的なものに変更する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "map-data";
TSharedPtr<FJsonObject> RecordRequest = MakeShareable(new FJsonObject);
RecordRequest->SetStringField(FString("npc1"), FString("X=100;Y=256;Z=125"));
RecordRequest->SetStringField(FString("npc2"), FString("X=100,Y=225,Z=120"));
FTTLConfig TTLConfig{};
TTLConfig.Action = EAccelByteTTLConfigAction::DELETE_RECORD;
TTLConfig.Expires_At = FDateTime::UtcNow() + FTimespan(0, 0, 5); // Will delete this record in the next five seconds
ServerApiClient->ServerCloudSave.ReplaceGameRecord(Key
, *RecordRequest
, FVoidHandler::CreateLambda([]()
{
// Do something if ReplaceGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, FString ErrorMessage)
{
// Do something if ReplaceGameRecord fails
})
, TTLConfig);
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "map-data";
Dictionary<string, object> recordRequest = new Dictionary<string, object>
{
{"NPC1", "x:100,y:256,z:125"},
{"NPC2", "x:100,y:225,z:120"}
};
var ttlConfig = new TTLConfig()
{
Action = TTLConfigAction.Delete,
ExpiresAt = DateTime.Now.AddSeconds(5) // Will delete this record in the next five sceonds
};
var optionalParams = new GameRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.CLIENT,
TTLConfig = ttlConfig
};
serverCloudSave.ReplaceGameRecord(key, recordRequest, optionalParams, result =>
{
if (result.IsError)
{
// Do something if ReplaceGameRecord fails
Debug.Log($"Error ReplaceGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if ReplaceGameRecord succeeds
});
ゲームレコードデータを削除する
Admin Portal 経由で新しいゲームレコードを削除する
ゲームレコードを削除するには、以下の手順に従ってください:
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Game Records に移動します。
-
Game Records ページで、レコードタイプに応じて、JSON または Binary タブを開きます。リストから、削除したいレコードを見つけて、Action メニューの下にある Delete ボタンをクリックします。

-
確認メッセージで Delete をクリックします。

SDK 経由で新しいゲームレコードを削除する
ゲームが SDK 側からゲームレコードを削除する必要がある場合は、以下の関数を使用して削除できます。
クライアント経由でゲームレコードを削除する
- Unreal
- Unity
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString Key = FString("map-data");
ApiClient->CloudSave.DeleteGameRecord(Key
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteGameRecord fails
}));
CloudSave cloudSave = AccelByteSDK.GetClientRegistry().GetApi().GetCloudSave();
string key = "map-data";
cloudSave.DeleteGameRecord(key, result =>
{
if (result.IsError)
{
// Do something if DeleteGameRecord fails
Debug.Log($"Error DeleteGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
// Do something if DeleteGameRecord succeeds
});
サーバー経由でゲームレコードを削除する
- Unreal
- Unity
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = FString("map-data");
ServerApiClient->ServerCloudSave.DeleteGameRecord(Key
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteGameRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "map-data";
serverCloudSave.DeleteGameRecord(key, result =>
{
if (result.IsError)
{
// Do something if DeleteGameRecord fails
Debug.Log($"Error DeleteGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if DeleteGameRecord succeeds
});