Unreal 向け 6labs SDK
このガイドでは、6labs SDK を Unreal Engine ゲームに統合する方法を説明します。プラグインのインストール、ゲームプレイ観察の開始と制御、ゲームイベントの送信までを扱います。
対応プラットフォーム
6labs Unreal SDK が現在対応しているプラットフォームは以下のとおりです。
- Windows 11(DirectX 12)
前提条件
6labs SDK を統合する前に、開発環境とプロジェクトが以下の要件を満たしていることを確認してください:
- Unreal Engine 5.7 — 5.7.x のいずれかのリリース
- プロジェクトが 5.6.x や 5.8.x など他のエンジンバージョンを使用している場合は、6labs サポートまでお問い合わせください。
1. モジュールのダウンロードとインポート
6labs SDK は Unreal Engine プラグインとして提供されます。
このモジュールを Unreal プロジェクトに追加します。
- ダウンロード 6labs Unreal SDK の最新バージョン
v2.3.5。 - プラグインをプロジェクトの Plugins
ディレクトリ(
YourProject/Plugins/SixLabsSDK/)に展開します。 - プラグインが有効になっていることを確認します。
- Unreal Editor で Edit > Plugins を開きます。
- 「6labs SDK」を検索し、有効になっていることを確認します。
- モジュール依存関係を追加します。
- ゲームモジュールの
Build.csに次を追加します:PublicDependencyModuleNames.Add("SixLabsSDK");
- ゲームモジュールの
2. ゲームプレイの観察を開始
StartSession() メソッドを使用して、ゲームプレイの観察を開始します。以下の例を参照してください。
// MyGameInstance.h
UFUNCTION()
void OnStartSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage);
// MyGameInstance.cpp
#include "SixLabsSubsystem.h"
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
FSixLabsLifecycleComplete OnComplete;
OnComplete.BindDynamic(this, &UMyGameInstance::OnStartSessionComplete);
SixLabs->StartSession(TEXT("<player_in_game_id>"), TEXT("<developer_payload>"), OnComplete);
}
void UMyGameInstance::OnStartSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage)
{
// Response == ESixLabsSdkResponse::SIXLABS_SUCCESS は StartSession() が正常に完了したことを意味します
// 結果を処理する
// SixLabs->GetSdkState() で SDK の現在の状態を取得できます
}
重要事項
InGameIdが渡されない場合、観察されたセッションは破棄され、AI 分析に使用されない可能性があります。これがないと、セッションをプレイヤーに紐付けることができず、後続のインサイト生成に必要な情報が不足します。- ゲームプレイの観察を開始する前に、必ずユーザーの同意を取得してください。SDKは自動的に許可を要求しないため、同意処理はゲームロジック内で実装する必要があります。
- 推奨されるベストプラクティスとして、ゲームのEULA(エンドユーザー使用許諾契約)またはプライバシーポリシーに、ゲームプレイ観察に関する記載を含めることを検討してください。
- 正しくテストするには、プラットフォーム別のビルドを作成し、実機で実行する必要があります。Play-In-Editor セッションでは、
StartSession()は代わりにOnCompleteをSIXLABS_ERROR_NOT_SUPPORTEDとともに呼び出します。 - なお、すべての SDK メソッドはブループリントからも呼び出せます。
リファレンスStartSession()
void StartSession(
const FString& InGameId,
const FString& DeveloperPayload,
const FSixLabsLifecycleComplete& OnComplete);
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
InGameId |
FString |
いいえ | 省略可能ですが推奨されるユーザー識別子です。省略した場合、セッションが破棄され、AI 分析に使用されない可能性があります。 |
DeveloperPayload
|
FString |
いいえ | セッションに関連付けられる任意の開発者定義メタデータです。この値はセッションリクエストとともにそのまま転送され、カスタムのトラッキング情報やコンテキスト情報を付加するために利用できます。より詳細な DeveloperPayload を提供することで、AIによる分析やセッション理解の精度を大幅に向上させることができます。詳細なユースケースと JSON の例については、Developer Payload の例ページを参照してください。例:
|
OnComplete |
FSixLabsLifecycleComplete |
はい | 呼び出しが完了すると(成功・失敗を問わず)呼び出されます。詳細はコールバック型を参照してください。ブループリントでは、コールバックピンの接続は任意です。 |
コールバックレスポンス
このコールバックは非同期に呼び出され、Response と ErrorMessage で結果を提供します。
| レスポンス | 説明 |
|---|---|
SIXLABS_SUCCESS |
セッションが正常に開始しました。 |
SIXLABS_ERROR_STATE_NOT_IDLE |
SDK が SDK_STATE_IDLE 状態ではありませんでした — 既にセッションが実行中である、一時停止中である、または前のセッションがまだ停止処理中です。一時停止中のセッションを継続するには ResumeSession() を使用してください。 |
SIXLABS_ERROR_NOT_SUPPORTED |
Play-In-Editor セッションなど、ゲームプレイの観察に対応していないプラットフォームで StartSession() が呼び出されました。 |
SIXLABS_ERROR_SESSION_FAILED |
リクエストは受理されましたが、観察セッションを開始できず、SDK は SDK_STATE_IDLE に戻りました。これは、セッション作成の失敗、デバイスの性能限界、古い SDK バージョン、ネットワークの問題、またはその他の初期化に関する問題が原因で発生することがあります。 |
3. ゲーム内 ID の設定
SetInGameId() メソッドを使用して、プレイヤーのゲーム内 ID を既存の観察セッションに関連付けます。このメソッドは、ユーザーアカウントが作成される前に SDK が初期化された場合に、ログイン済みのユーザーを進行中のセッションに紐付けるためによく使用されます。
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
SixLabs->SetInGameId(TEXT("<player_in_game_id>"));
}
注意
StartSession()呼び出し時にInGameIdを渡していた場合、SetInGameId()を呼び出すと、現在のセッションに設定されていた値が上書きされます。
リファレンスSetInGameId()
void SetInGameId(const FString& InGameId);
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
InGameId |
FString |
はい | 現在のセッションに関連付けるプレイヤーのゲーム内識別子です。 |
4. ゲームイベントの送信
SendGameEvent() メソッドを使用すると、進行中の観察セッション中にカスタムのゲームプレイイベントを記録できます。イベントはセッションに紐付けられ、分析時に特定のゲームプレイの瞬間を関連付けるために利用できます。
const bool bAccepted = SixLabs->SendGameEvent(TEXT("<event_name>"), TEXT("<event_data_as_json>"));
if (!bAccepted)
{
// イベントは送信されていません。理由は下記を参照
}
リファレンスSendGameEvent()
bool SendGameEvent(
const FString& EventName,
const FString& EventDataJson);
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
EventName |
FString |
はい | 記録するカスタムイベントの名前です。 |
EventDataJson |
FString |
はい | イベントに関連付ける追加データを含む JSON エンコードされた文字列です。 |
戻り値
| 値 | 説明 |
|---|---|
true |
イベントが受理され、アップロード待ちのキューに追加されました。 |
false |
イベントが拒否されました。例えば EventName が空の場合などです。 |
5. 高度な制御
StartSession() は新しいセッションのゲームプレイ観察を開始します。その後は要件に応じて
PauseSession()、
ResumeSession()、
StopSession() を使用してそのセッションを制御できます。
5.1 一時停止 (PauseSession)
PauseSession()
メソッドを使用して、ゲームプレイの観察を一時停止します。
const ESixLabsSdkResponse Response = SixLabs->PauseSession();
if (Response != ESixLabsSdkResponse::SIXLABS_SUCCESS)
{
// SDK は観察を行っていませんでした。下記のレスポンスを参照
}
重要事項
- ゲームプレイの観察を一時停止します。
- 観察を再開する場合は、後から再度
ResumeSession()を呼び出すことができます。
リファレンスPauseSession()
ESixLabsSdkResponse PauseSession();
戻り値
| 値 | 説明 |
|---|---|
SIXLABS_SUCCESS |
呼び出しが受理され、実行されました。 |
SIXLABS_ERROR_STATE_NOT_CAPTURING |
SDK が SDK_STATE_CAPTURING 状態でない場合に返されます — 例えば、ゲームプレイの観察が実行されていない、セッションが既に一時停止されている、または停止処理が既に進行中である場合です。状態とレスポンスコードの全一覧については、セッションライフサイクルを参照してください。 |
5.2 再開 (ResumeSession)
ResumeSession() メソッドを使用して、PauseSession() によって一時停止されていたセッションを再開します。
// MyGameInstance.h
UFUNCTION()
void OnResumeSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage);
// MyGameInstance.cpp
#include "SixLabsSubsystem.h"
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
FSixLabsLifecycleComplete OnComplete;
OnComplete.BindDynamic(this, &UMyGameInstance::OnResumeSessionComplete);
SixLabs->ResumeSession(OnComplete);
}
void UMyGameInstance::OnResumeSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage)
{
// Response == ESixLabsSdkResponse::SIXLABS_SUCCESS は ResumeSession() が正常に完了したことを意味します
// 結果を処理する
// SixLabs->GetSdkState() で SDK の現在の状態を取得できます
}
リファレンスResumeSession()
void ResumeSession(const FSixLabsLifecycleComplete& OnComplete);
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
OnComplete |
FSixLabsLifecycleComplete |
はい | 呼び出しが完了すると(成功・失敗を問わず)呼び出されます。詳細はコールバック型を参照してください。ブループリントでは、コールバックピンの接続は任意です。 |
コールバックレスポンス
このコールバックは非同期に呼び出され、Response と ErrorMessage で結果を提供します。
| レスポンス | 説明 |
|---|---|
SIXLABS_SUCCESS |
セッションが正常に再開しました。 |
SIXLABS_ERROR_STATE_NOT_PAUSED |
SDK が SDK_STATE_PAUSED 状態ではなかったため、再開できる一時停止中のセッションがありませんでした。 |
SIXLABS_ERROR_SESSION_FAILED |
リクエストは受理されましたが、一時停止中のセッションを再開できず、SDK は SDK_STATE_IDLE に戻りました。これは、セッションまたはランタイムの障害、ネットワークの問題、またはセッションの再開を妨げるその他の障害が原因で発生することがあります。 |
5.3 停止 (StopSession)
StopSession() メソッドを使用して、現在のセッションを完全に終了します。PauseSession() とは異なり、停止したセッションは ResumeSession() で再開することはできません — 新しいセッションを開始するには、再度 StartSession() を呼び出す必要があります。
// MyGameInstance.h
UFUNCTION()
void OnStopSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage);
// MyGameInstance.cpp
#include "SixLabsSubsystem.h"
if (USixLabsSubsystem* SixLabs = GetSubsystem<USixLabsSubsystem>())
{
FSixLabsLifecycleComplete OnComplete;
OnComplete.BindDynamic(this, &UMyGameInstance::OnStopSessionComplete);
SixLabs->StopSession(OnComplete);
}
void UMyGameInstance::OnStopSessionComplete(ESixLabsSdkResponse Response, const FString& ErrorMessage)
{
// Response == ESixLabsSdkResponse::SIXLABS_SUCCESS は StopSession() が正常に完了したことを意味します
// 結果を処理する
// SixLabs->GetSdkState() で SDK の現在の状態を取得できます
}
リファレンスStopSession()
void StopSession(const FSixLabsLifecycleComplete& OnComplete);
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
OnComplete |
FSixLabsLifecycleComplete |
はい | 呼び出しが完了すると(成功・失敗を問わず)呼び出されます。詳細はコールバック型を参照してください。ブループリントでは、コールバックピンの接続は任意です。 |
コールバックレスポンス
このコールバックは非同期に呼び出され、Response と ErrorMessage で結果を提供します。
| レスポンス | 説明 |
|---|---|
SIXLABS_SUCCESS |
呼び出しが受理され、セッションが終了しました。 |
SIXLABS_ERROR_STATE_NOT_CAPTURING |
SDK が SDK_STATE_CAPTURING または SDK_STATE_PAUSED 状態ではなかったため、停止できるアクティブなセッションまたは一時停止中のセッションがありませんでした。 |
6. セッションライフサイクル
SDK は以下の状態を遷移します。呼び出せるメソッドとその結果は、現在の状態によって決まります:
GetSdkState()を使用すると、いつでも現在の SDK の状態を確認できます。戻り値はESixLabsSdkStateです。StartSession()、PauseSession()、ResumeSession()、StopSession()は、SDK が有効な状態にあるときにのみ呼び出すことができます。無効な状態から操作を呼び出すと、エラーが返されます。PauseSession()はESixLabsSdkResponseを直接返します。StartSession()、ResumeSession()、StopSession()は、OnCompleteコールバックを通じて結果を返します。OnCompleteコールバックはゲームスレッド上で非同期に呼び出されます。
6.1 コールバック型
FSixLabsLifecycleComplete は、次の 2 つのパラメータを受け取るダイナミックデリゲートです:
| パラメータ | 型 | 説明 |
|---|---|---|
Response |
ESixLabsSdkResponse |
呼び出しの結果。レスポンスコードのいずれかです。 |
ErrorMessage |
const FString& |
成功時は空文字列で、失敗時にはその理由を示します。 |
6.2 状態
| 状態 | 値 | 説明 |
|---|---|---|
SDK_STATE_IDLE |
100 |
SDK がゲームプレイを観察していない状態です。これはデフォルトの状態であり、セッションが停止した後、または開始に失敗した後に戻る状態でもあります。 |
SDK_STATE_CAPTURING |
101 |
SDK がゲームプレイを積極的に観察している状態です。これには、アクティブなセッションと、データのバッファリングやアップロードといったバックグラウンド処理が含まれます。 |
SDK_STATE_STOPPING |
102 |
セッションが停止処理中の状態です。SDK は SDK_STATE_IDLE に戻る前に、残っている処理を完了させています。 |
SDK_STATE_PAUSED |
103 |
セッションが一時停止している状態です。ゲームプレイの観察は一時的に停止していますが、セッションは開いたままであり、それまでに観察されたデータのアップロードは継続できます。 |
6.3 レスポンスコード
| レスポンス | 値 | 発生元メソッド | 対処方法 |
|---|---|---|---|
SIXLABS_SUCCESS |
0 | すべて | 対応は不要です — 呼び出しは受け付けられ、正常に完了しました。StopSession() の場合はセッションが終了しています。 |
SIXLABS_ERROR_STATE_NOT_IDLE |
1 | StartSession() |
すでにセッションが実行中、一時停止中、または停止処理中です。GetSdkState() を確認し、一時停止中であれば ResumeSession() を呼び出してください。 |
SIXLABS_ERROR_STATE_NOT_CAPTURING |
2 | PauseSession(), StopSession() |
SDK は観察を行っていません。セッションがない状態でも発火しうるライフサイクル処理からの呼び出しであれば、無視して問題ありません。StopSession() は一時停止中のセッションを終了することもできます。 |
SIXLABS_ERROR_NOT_SUPPORTED |
3 | StartSession() |
この環境ではゲームプレイの観察を利用できません — 現時点ではPlay-In-Editor セッションが該当します。処理を中断し、再試行しないでください。 |
SIXLABS_ERROR_STATE_NOT_PAUSED |
4 | ResumeSession() |
SDK は一時停止していません。状態が SDK_STATE_IDLE の場合は、代わりに StartSession() を呼び出してください。 |
SIXLABS_ERROR_SESSION_FAILED |
5 | StartSession(), ResumeSession() |
リクエストは受け付けられましたが、セッションを開始できず、SDK は SDK_STATE_IDLE に戻りました。このエラーは即時の拒否ではなく OnComplete を通じて返されます。ErrorMessage を記録し、次の適切なタイミングで再試行してください。主な原因は、低スペック端末、SDK バージョンの古さ、ネットワークの問題です。 |
