Manage UGC official in-game content
注釈:本資料はAI技術を用いて翻訳されています。
概要
UGCは、既存のプレイヤーのエンゲージメント、リテンション、ロイヤルティを高めるだけでなく、新規プレイヤーを引き込むための強力な手段になります。またUGCは、キャラクターのカスタマイズ、武器の新たな要素、多彩なレベルなど、さまざまな公式インゲームコンテンツを提供することで、プレイヤーの好みやプレイスタイルに合った豊かで多様な体験を実現できます。
公式インゲームコンテンツとは、開発者または公式コンテンツクリエイターによって作成されたコンテンツです。公式インゲームコンテンツは、プレイヤーと開発者の両方にとって次のような多くの利点があります。
- コンテンツは開発者によってテストおよび検証されているため、品質、一貫性、互換性が確保されます。
- 開発者のベストプラクティスや事例から学べるため、プレイヤーに対してガイダンス、サポート、フィードバックを提供できます。
- 開発者はプレイヤー向けにコンテンツを作成するスキルや専門知識を示せるため、開発者の評判、信頼性、権威性が高まります。
この記事では、次の方法について説明します。
- AccelByte Gaming Services(AGS)Admin Portalを使用して公式インゲームコンテンツを作成、表示、変更、削除する方法
- AGS SDKを使用してゲームクライアントに公式インゲームコンテンツを表示する方法

前提条件
次のものへのアクセスが必要です。
- AGS Admin Portal
- AGS UnrealまたはUnity SDK
- 参照用のAGS UGC API documentation
公式インゲームコンテンツを作成する
公式インゲームコンテンツは、開発者または公式コンテンツクリエイターによって作成されます。公式インゲームコンテンツには、プレイヤーへのガイダンス、サポート、フィードバックの提供など、プレイヤーと開発者の両方にとって多くの利点があります。もう1つの利点は、管理者クリエイターの評判、信頼性、創造性を高められることです。Admin Portalから公式コンテンツを作成する手順は2つあります。まず、コンテンツを保存するためのチャンネルを作成し、その後にコンテンツを作成します。
公式インゲームコンテンツを保存するチャンネルを作成する
UGCサービスは、チャンネルに基づいて公式コンテンツを管理します。チャンネルは、公式コンテンツを分類するために使用される汎用エンティティです。チャンネルを使用して、地域、言語、ビルドバージョン、パッチ、コンテンツカテゴリ、またはゲームのシナリオに必要なその他のケースでコンテンツをグループ化できます。公式コンテンツをチャンネルに保存する場合は、Admin Portalを使用してチャンネルを作成および管理できます。
公式インゲームコンテンツを保存するUGCチャンネルを作成するには、次の手順に従います。
-
Admin Portalのサイドバーで、Engagement > UGC > Content Creatorsに移動します。
-
Creatorsページで、Officialタブを開きます。
-
クリエイターのリストからAdminクリエイターを見つけ、その横にあるViewボタンをクリックします。クリエイターの詳細ページが表示されます。
-
Channelセクションで、+ New Channelボタンをクリックします。

-
Add New Channelフォームで、新しいチャンネルの名前を入力し、Addをクリックします。
UGCチャンネルに公式インゲームコンテンツを追加する
UGCサービスで公式インゲームコンテンツを作成する場合は、アイテムに適用したすべてのカスタマイズオプションを含むファイルを作成する必要があります。このファイルには、公式インゲームコンテンツに関する情報が保存されます。
公式インゲームコンテンツをUGCチャンネルに追加するには、次の手順に従います。
-
Admin Portalのサイドバーで、Engagement > UGC > Content Creatorsに移動します。
-
Creatorsページで、Officialタブを開きます。
-
クリエイターのリストから、使用したいチャンネルを持つクリエイターを見つけ、その横にあるViewボタンをクリックします。クリエイターの詳細ページが表示されます。
-
Channelsセクションで、更新したいチャンネルを見つけ、その横にあるViewボタンをクリックします。

-
チャンネルの詳細ページで、+ New Contentボタンをクリックします。

-
Add new contentフォームで、必要な情報を入力します。
- 新しいコンテンツの名前を入力します。
- コンテンツのタイプとサブタイプを指定します。
- コンテンツファイルを追加します。
- コンテンツのプレビューを追加します。
- (オプション)タグや追加フィールドを追加して、新しいコンテンツの詳細を提供します。

-
Addをクリックします。コンテンツが作成されると、そのコンテンツをゲーム内に表示し、プレイヤーが利用できるようにできます。

公式インゲームコンテンツを変更する
UGCコンテンツを作成した後、公式インゲームコンテンツファイルをより魅力的で分かりやすくする1つの方法は、ゲーム内での見え方を示すスクリーンショットを追加することです。スクリーンショットは、コンテンツファイルで作成した視覚効果や詳細を捉えることができます。
UGCチャンネル内の公式インゲームコンテンツを更新するには、次の手順に従います。
-
Admin Portalのサイドバーで、Engagement > UGC > Content Creatorsに移動します。
-
Creatorsページで、Officialタブを開きます。
-
クリエイターのリストから、使用したいチャンネルを持つクリエイターを見つけ、その横にあるViewボタンをクリックします。クリエイターの詳細ページが表示されます。
-
Channelsセクションで、更新したいコンテンツを含むチャンネルを見つけ、その横にあるViewボタンをクリックします。

-
コンテンツのリストから、更新したいコンテンツを見つけます。

-
必要に応じてコンテンツを更新します。基本情報を編集したり、新しいスクリーンショットをアップロードしたりできます。

公式インゲームコンテンツを表示する
UGCの公式インゲームコンテンツを作成すると、コンテンツの結果が自動生成され、管理者のクリエイターはAdmin Portalを通じてその結果を確認できます。また、作成したコンテンツをゲーム内に表示し、プレイヤーがゲームからそれを表示または使用できるようにすることもできます。
UGCの公式インゲームコンテンツを表示するには、次の手順に従います。
-
Admin Portalのサイドバーで、Engagement > UGC > Lookup UGCに移動します。
-
Lookup UGCページで、コンテンツ名、ID、タイプ、サブタイプ、タグ、シェアコード、ユーザーIDを使用して、UGCの公式インゲームコンテンツを検索できます。
-
検索結果から、表示したいコンテンツを見つけて開きます。

Client SDKを使用してシェアコードで公式インゲームコンテンツを表示する
この例では、シェアコードを使用して公式インゲームコンテンツを取得する方法を示します。
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString ShareCode = "YourUGCShareCode";
ApiClient->UGC.GetV2ContentByShareCode(ShareCode, THandler<FAccelByteModelsUGCContentResponseV2>::CreateLambda([](const FAccelByteModelsUGCContentResponseV2& Result)
{
// Do something if GetV2ContentByShareCode succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if GetV2ContentByShareCode fails
}));
string shareCode = "YourUGCShareCode";
UGC ugc = AccelByteSDK.GetClientRegistry().GetApi().GetUgc();
ugc.GetContentByShareCodeV2(shareCode, result =>
{
if (result.IsError)
{
// Do something if GetContentByShareCodeV2 fails
Debug.Log($"Error GetContentByShareCodeV2, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if GetContentByShareCodeV2 succeeds
});
string shareCode = "<YourUGCShareCode>";
var response = sdk.Ugc.PublicContentV2.PublicGetContentByShareCodeV2Op
.Execute(sdk.Namespace, shareCode);
if (response != null)
{
// Do something if successful
}
publicContentV2Service := &ugc.PublicContentV2Service{
Client: factory.NewUgcClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
namespace := "mygame"
shareCode := "mysharecode"
input := &public_content_v2.PublicGetContentByShareCodeV2Params{
Namespace: namespace,
ShareCode: shareCode,
}
result, err := publicContentV2Service.PublicGetContentByShareCodeV2Short(input)
final PublicContentV2 publicContentV2Wrapper = new PublicContentV2(sdk);
String shareCode = "<YourUGCShareCode>";
ModelsContentDownloadResponseV2 response;
try {
response = publicContentV2Wrapper.publicGetContentByShareCodeV2(PublicGetContentByShareCodeV2.builder()
.namespace("<namespace>")
.shareCode(shareCode)
.build());
} catch (Exception e) {
// Do something if an error occurs
return;
}
if (response == null) {
// Null response from server
} else {
// Do something if successful
}
import accelbyte_py_sdk.api.ugc as ugc_service
result, error = ugc_service.public_get_content_by_share_code_v2(
share_code="YourUGCShareCode",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
Client SDKを使用して公式インゲームコンテンツのリストを表示する
この例では、公式インゲームコンテンツのリストを取得する方法を示します。
公式インゲームコンテンツのリストを取得する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString ContentName = "Content Name";
FString CreatorName = "Creator Name";
FString Type = "Content Type";
FString Subtype = "Content Subtype";
TArray<FString> Tags = { "UGC Tag1", "UGC Tag2" };
bool bIsOfficial = true;
FString UserId = "Player User Id";
int32 Limit = 1000;
int32 Offset = 0;
EAccelByteUgcSortBy SortBy = EAccelByteUgcSortBy::DATE;
EAccelByteUgcOrderBy OrderBy = EAccelByteUgcOrderBy::DESC;
ApiClient->UGC.SearchContents(ContentName, CreatorName, Type, Subtype, Tags, bIsOfficial, UserId,
THandler<FAccelByteModelsUGCSearchContentsPagingResponse>::CreateLambda([](const FAccelByteModelsUGCSearchContentsPagingResponse& Result)
{
// Do something if SearchContents succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SearchContents fails
}), SortBy, OrderBy, Limit, Offset);
SearchContentRequest filterRequest = new SearchContentRequest()
{
name = "Content Name",
type = "Content Type",
subtype = "Content Subtype",
tags = new[] { "UGC Tag1", "UGC Tag2" },
limit = 1000,
offset = 0,
sortBy = UGCSortBy.DATE,
orderBy = UGCOrderBy.DESC,
isOfficial = true
};
UGC ugc = AccelByteSDK.GetClientRegistry().GetApi().GetUgc();
ugc.SearchContent(filterRequest, result =>
{
if (result.IsError)
{
// Do something if SearchContent fails
Debug.Log($"Error SearchContent, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if SearchContent succeeds
});
var response = sdk.Ugc.PublicContentLegacy.PublicSearchContentOp
.SetName("<content-name>")
.SetCreator("<creator-name>")
.SetSubtype("<content-subtype")
.SetTags(new List<string>()
{
"UGC Tag1",
"UGC Tag2"
})
.SetLimit(100)
.SetOffset(0)
.SetSortby("date")
.SetOrderby("desc")
.SetIsofficial("true")
.Execute(sdk.Namespace);
if (response != null)
{
// Do something if successful
}
publicContentLegacyService := &ugc.PublicContentLegacyService{
Client: factory.NewUgcClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
namespace := "mygame"
creator := "mycreator"
isofficial := "true"
limit := int64(100)
name := "mycontentname"
offset := int64(0)
orderby := "desc"
sortby := "date"
subtype := "mycontentsubtype"
tags := []string{ "UGC Tag1", "UGC Tag2" }
type_, _ := cmd.Flags().GetString("type")
userId, _ := cmd.Flags().GetString("userId")
input := &public_content_legacy.PublicSearchContentParams{
Namespace: namespace,
Creator: &creator,
Isofficial: &isofficial,
Limit: &limit,
Name: &name,
Offset: &offset,
Orderby: &orderby,
Sortby: &sortby,
Subtype: &subtype,
Tags: tags,
Type: &type_,
UserID: &userId,
}
result, err := publicContentLegacyService.PublicSearchContentShort(input)
PublicContentLegacy oublicContentLegacyWrapper = new PublicContentLegacy(sdk);
ModelsPaginatedContentDownloadResponse response;
try {
response = oublicContentLegacyWrapper.publicSearchContent(PublicSearchContent.builder()
.namespace("<namespace>")
.name("<content-name>")
.creator("<creator-name>")
.subtype("<content-subtype")
.tags(List.of("UGC Tag1", "UGC Tag2"))
.limit(100)
.offset(0)
.sortby("date")
.orderby("desc")
.isofficial("true")
.build());
} catch (Exception e) {
// Do something if an error occurs
return;
}
if (response == null) {
// Null response from server
} else {
// Do something when report succeeds
}
import accelbyte_py_sdk.api.ugc as ugc_service
result, error = ugc_service.public_search_content(
name="Content Name",
creator="Creator Name",
type_="Content Type",
subtype="Content Subtype",
tags=["UGC Tag1", "UGC Tag2"],
isofficial="true",
user_id="********************************",
sortby="date",
orderby="desc",
limit=1000,
offset=0,
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
Client SDKを使用してコンテンツIDで公式インゲームコンテンツを表示する
この例では、コンテンツIDを使用して公式インゲームコンテンツを取得する方法を示します。
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString ContentId = "YourUGCContentId";
ApiClient->UGC.GetV2ContentByContentId(ContentId, THandler<FAccelByteModelsUGCContentResponseV2>::CreateLambda([](const FAccelByteModelsUGCContentResponseV2& Result)
{
// Do something if GetV2ContentByContentId succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if GetV2ContentByContentId fails
}));
string contentId = "YourUGCContentId";
UGC ugc = AccelByteSDK.GetClientRegistry().GetApi().GetUgc();
ugc.GetContentByContentIdV2(contentId, result =>
{
if (result.IsError)
{
// Do something if GetContentByContentIdV2 fails
Debug.Log($"Error GetContentByContentIdV2, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if GetContentByContentIdV2 succeeds
});
string contentId = "<YourUGCContentId>";
var response = sdk.Ugc.PublicContentV2.PublicGetContentByIDV2Op
.Execute(contentId, sdk.Namespace);
if (response != null)
{
// Do something if successful
}
publicContentV2Service := &ugc.PublicContentV2Service{
Client: factory.NewUgcClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
contentId := "mycontentid"
namespace := "mygame"
input := &public_content_v2.PublicGetContentByIDV2Params{
ContentID: contentId,
Namespace: namespace,
}
result, err := publicContentV2Service.PublicGetContentByIDV2Short(input)
final PublicContentV2 publicContentV2Wrapper = new PublicContentV2(sdk);
String contentId = "<YourUGCContentId>";
ModelsContentDownloadResponseV2 response;
try {
response = publicContentV2Wrapper.publicGetContentByIDV2(PublicGetContentByIDV2.builder()
.namespace("<namespace>")
.contentId(contentId)
.build());
} catch (Exception e) {
// Do something if an error occurs
return;
}
if (response == null) {
// Null response from server
} else {
// Do something if successful
}
import accelbyte_py_sdk.api.ugc as ugc_service
result, error = ugc_service.public_get_content_by_idv2(
content_id="YourUGCContentId",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
Client SDKを使用して公式チャンネルを通じた公式インゲームコンテンツのリストを表示する
この例では、公式チャンネルを通じて公式インゲームコンテンツのリストを取得する方法を示します。
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FApiClientPtr ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
FString ChannelId = "YourUGCChannelId";
ApiClient->UGC.SearchV2ContentsSpecificToChannel(ChannelId, THandler<FAccelByteModelsUGCSearchContentsPagingResponseV2>::CreateLambda([](const FAccelByteModelsUGCSearchContentsPagingResponseV2& Result)
{
// Do something if SearchV2ContentsSpecificToChannel succeeds
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if SearchV2ContentsSpecificToChannel fails
}));
string channelId = "YourUGCChannelId";
UGC ugc = AccelByteSDK.GetClientRegistry().GetApi().GetUgc();
ugc.SearchContentsSpecificToChannelV2(channelId, result =>
{
if (result.IsError)
{
// Do something if SearchContentsSpecificToChannelV2 fails
Debug.Log($"Error SearchContentsSpecificToChannelV2, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if SearchContentsSpecificToChannelV2 succeeds
});
string channelId = "<YourUGCChannelId>";
var response = sdk.Ugc.PublicContentV2.PublicGetContentByChannelIDV2Op
.Execute(channelId, sdk.Namespace);
if (response != null)
{
// Do something if successful
}
publicContentV2Service := &ugc.PublicContentV2Service{
Client: factory.NewUgcClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
channelId := "myChannelId"
namespace := "mygame"
input := &public_content_v2.PublicGetContentByChannelIDV2Params{
ChannelID: channelId,
Namespace: namespace,
}
result, err := publicContentV2Service.PublicGetContentByChannelIDV2Short(input)
final PublicContentV2 publicContentV2Wrapper = new PublicContentV2(sdk);
String channelId = "<YourUGCChannelId>";
ModelsPaginatedContentDownloadResponseV2 response;
try {
response = publicContentV2Wrapper.publicGetContentByChannelIDV2(PublicGetContentByChannelIDV2.builder()
.namespace("<namespace>")
.channelId(channelId)
.build());
} catch (Exception e) {
// Do something if an error occurs
return;
}
if (response == null) {
// Null response from server
} else {
// Do something if successful
}
import accelbyte_py_sdk.api.ugc as ugc_service
result, error = ugc_service.public_get_content_by_channel_idv2(
content_id="YourUGCChannelId",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
公式インゲームコンテンツを削除する
-
Admin Portalのサイドバーで、Engagement > UGC > Content Creatorsに移動します。
-
Creatorsページで、Officialタブを開きます。
-
クリエイターのリストから、更新したいチャンネルを持つクリエイターを見つけ、その横にあるViewボタンをクリックします。クリエイターの詳細ページが表示されます。
-
Channelsセクションで、削除したいコンテンツを含むチャンネルを見つけ、その横にあるViewボタンをクリックします。

-
コンテンツのリストから、削除したいコンテンツを見つけ、その横にあるViewボタンをクリックします。

-
コンテンツの詳細ページで、Delete Contentボタンをクリックします。

-
確認メッセージでDELETEと入力し、Deleteボタンをクリックします。コンテンツはチャンネルのコンテンツリストから即座に削除されます。

次のステップ
UGCチャンネルのインゲームコンテンツに割り当てられるコンテンツタグ、タイプ、サブタイプを作成します。詳細については、Configure content tags, types, and subtypesを参照してください。