适用于 Unity 的 6labs SDK
本指南介绍如何将 6labs SDK 集成到您的 Unity 游戏中:导入安装包、开始与控制游戏观察,以及发送游戏事件。
支持的平台
6labs Unity SDK 可在以下平台上观察游戏过程:
- iOS — iOS 15 或更高版本
- Android — API 级别 23(Android 6.0 Marshmallow)或更高版本
- Windows 11(DirectX 12)
前提条件
在集成 6labs SDK 之前,请确保您的开发环境和项目满足以下要求:
- 需要 Unity 2021 LTS 或更高版本。旧版本可能可以运行,但不受积极支持。
- 仅限 Apple 平台 — 请确保开发机器上已安装以下工具:
- Xcode 26.2 或更高版本
- CocoaPods 1.12.0 或更高版本
1. 下载并导入模块
6labs SDK 以 Unity 包文件的形式提供。
按照以下步骤将该模块添加到您的 Unity 项目中:
- 下载 6labs Unity SDK 最新版本
v4.0.0。 - 将安装包导入到您的 Unity 项目中:
- 在 Unity 编辑器中点击 Assets > Import Package > Custom Package.
- 从系统中选择已下载的
.unitypackage文件。 - 点击 Import 完成导入。
2. 开始观察游戏
使用 StartSession() 方法开始观察游戏,如下所示:
using SixLabs.SDK;
SixLabsSDK.Instance.StartSession(
inGameId: "<optional_player_in_game_id>",
developerPayload: "<optional_developer_payload_here>",
callbackOnComplete: (sdkResponse, errorMessage) => {
// sdkResponse == SdkResponse.SUCCESS 表示 StartSession() 已成功完成
// 处理返回结果
// SixLabsSDK.Instance.CurrentState 可获取 SDK 当前的状态
}
);
重要说明
- 如果未传递
inGameId,观察到的会话可能会被丢弃,并且不会用于 AI 分析。缺少该字段时,无法将会话归属到玩家,而这是生成后续洞察所必需的。 - 在开始观察游戏之前,请确保已获得用户同意。SDK不会自动请求权限,相关的授权流程需要在您的游戏逻辑中自行实现。
- 作为推荐的最佳实践,您可以在游戏的EULA(最终用户许可协议)或隐私政策中说明游戏观察相关内容。
- 请确保您的应用已为目标平台启用所需的网络访问权限。
- 该SDK无法在Unity
Editor中运行。要进行正确测试,您需要创建特定平台的构建并在真实设备上运行。在编辑器中,
StartSession()会改为使用ERROR_NOT_SUPPORTED调用callbackOnComplete。
方法说明StartSession()
public void StartSession(
string inGameId = null,
string developerPayload = null,
Action<SdkResponse, string> callbackOnComplete = null)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
inGameId |
string |
否 | 可选但推荐的用户标识符。如果省略,会话可能会被丢弃,且不会用于 AI 分析。 |
developerPayload
|
string |
否 | 与会话关联的可选开发者自定义元数据。该值会随会话请求原样转发,可用于附加自定义追踪信息或上下文信息。提供更丰富的 developerPayload 可以显著提升 AI 驱动的分析能力和会话理解效果。如需详细用例和 JSON 示例,请参阅开发者载荷示例页面。
示例:
|
callbackOnComplete |
Action<SdkResponse, string> |
否 | 调用完成后触发(无论成功或失败)。详见回调参数。 |
回调响应
该回调是异步的,会通过 sdkResponse 和 errorMessage 提供结果。
| 响应值 | 说明 |
|---|---|
SUCCESS |
会话已成功启动。 |
ERROR_STATE_NOT_IDLE |
SDK 未处于 SDK_STATE_IDLE 状态 — 可能已有会话在运行、会话已暂停,或前一个会话仍在停止中。请改用 ResumeSession() 方法继续该暂停的会话。 |
ERROR_NOT_SUPPORTED |
在不支持观察游戏的平台上调用了 StartSession(),例如 Unity Editor。 |
ERROR_SESSION_FAILED |
请求已被接受,但观察会话未能启动,SDK 已返回 SDK_STATE_IDLE。这可能是由于会话创建失败、设备性能限制、SDK 版本过旧、网络问题或其他初始化故障导致的。 |
3. 设置游戏内 ID
使用 SetInGameId() 方法将玩家的游戏内 ID 与现有的观察会话关联。当 SDK 在用户账户创建之前完成初始化时,通常需要调用此方法,以便将已登录的用户与当前正在进行的会话关联起来。
SixLabsSDK.Instance.SetInGameId("<player_in_game_id>");
注意
- 如果在
StartSession()时已传入inGameId,调用SetInGameId()将覆盖当前会话中已设置的值。
方法说明SetInGameId()
public void SetInGameId(string inGameId)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
inGameId |
string |
是 | 要与当前会话关联的玩家游戏内标识符。 |
4. 发送游戏事件
使用 SendGameEvent() 方法在活动的游戏观察会话期间记录自定义游戏事件。事件会被关联到该会话,并可用于在分析时对应到特定的游戏时刻。
bool result = SixLabsSDK.Instance.SendGameEvent(
eventName: "<event_name>",
eventDataJson: "<event_data_as_json>"
);
方法说明SendGameEvent()
public bool SendGameEvent(
string eventName,
string eventDataJson)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
eventName |
string |
是 | 要记录的自定义事件的名称。 |
eventDataJson |
string |
是 | 包含该事件附加数据的 JSON 编码字符串。 |
返回值
| 值 | 说明 |
|---|---|
true |
事件已被接受并加入上传队列。 |
false |
事件被拒绝,例如 eventName 为空时。 |
5. 高级控制
StartSession() 会为新会话开始观察游戏。之后,您可以根据需要使用
PauseSession()、
ResumeSession() 和
StopSession() 方法来控制该会话。
5.1 暂停 (PauseSession)
调用 PauseSession() 方法暂停游戏观察。
SdkResponse result = SixLabsSDK.Instance.PauseSession();
重要说明
- 该方法用于暂停游戏观察。
- 之后可以再次调用
ResumeSession()恢复游戏观察。
方法说明PauseSession()
public SdkResponse PauseSession()
返回值
| 值 | 说明 |
|---|---|
SUCCESS |
该调用已被接受并执行。 |
ERROR_STATE_NOT_CAPTURING |
当 SDK 未处于 SDK_STATE_CAPTURING 状态时返回 — 例如当前没有正在进行的游戏观察、会话已处于暂停状态,或已有一个停止操作正在进行。有关状态和响应代码的完整列表,请参阅会话生命周期。 |
5.2 恢复 (ResumeSession)
使用 ResumeSession() 方法继续此前通过 PauseSession() 暂停的会话。
SixLabsSDK.Instance.ResumeSession(
callbackOnComplete: (sdkResponse, errorMessage) => {
// sdkResponse == SdkResponse.SUCCESS 表示 ResumeSession() 已成功完成
// 处理返回结果
// SixLabsSDK.Instance.CurrentState 可获取 SDK 当前的状态
}
);
方法说明ResumeSession()
public void ResumeSession(Action<SdkResponse, string> callbackOnComplete = null)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
callbackOnComplete |
Action<SdkResponse, string> |
否 | 调用完成后触发(无论成功或失败)。详见回调参数。 |
回调响应
该回调是异步的,会通过 sdkResponse 和 errorMessage 提供结果。
| 响应值 | 说明 |
|---|---|
SUCCESS |
会话已成功恢复。 |
ERROR_STATE_NOT_PAUSED |
SDK 未处于 SDK_STATE_PAUSED 状态,因此没有可继续的暂停会话。 |
ERROR_SESSION_FAILED |
请求已被接受,但暂停的会话未能恢复,SDK 已返回 SDK_STATE_IDLE。这可能是由于会话或运行时故障、网络问题,或其他导致会话无法恢复的故障。 |
5.3 停止 (StopSession)
使用 StopSession() 方法永久结束当前会话。与 PauseSession() 不同,已停止的会话无法通过 ResumeSession() 继续 — 如需开始新的会话,必须重新调用 StartSession()。
SixLabsSDK.Instance.StopSession(
callbackOnComplete: (sdkResponse, errorMessage) => {
// sdkResponse == SdkResponse.SUCCESS 表示 StopSession() 已成功完成
// 处理返回结果
// SixLabsSDK.Instance.CurrentState 可获取 SDK 当前的状态
}
);
方法说明StopSession()
public void StopSession(Action<SdkResponse, string> callbackOnComplete = null)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
callbackOnComplete |
Action<SdkResponse, string> |
否 | 调用完成后触发(无论成功或失败)。详见回调参数。 |
回调响应
该回调是异步的,会通过 sdkResponse 和 errorMessage 提供结果。
| 响应值 | 说明 |
|---|---|
SUCCESS |
调用已被接受,会话已结束。 |
ERROR_STATE_NOT_CAPTURING |
SDK 未处于 SDK_STATE_CAPTURING 或 SDK_STATE_PAUSED 状态,因此没有正在进行或已暂停的会话可以停止。 |
6. 会话生命周期
SDK 会在以下状态之间转换。您可以调用哪些方法以及方法返回什么,取决于当前状态:
- 您可以随时通过
SixLabsSDK.Instance.CurrentState查看 SDK 当前的状态。 StartSession()、PauseSession()、ResumeSession()和StopSession()只能在 SDK 处于有效状态时调用。在无效状态下调用会返回错误。PauseSession()会直接返回一个SdkResponse。StartSession()、ResumeSession()和StopSession()则通过可选的callbackOnComplete回调返回结果。callbackOnComplete回调是异步调用的。
6.1 回调参数
该回调的类型为 Action<SdkResponse, string>,会接收以下两个参数:
| 参数 | 类型 | 说明 |
|---|---|---|
sdkResponse |
SdkResponse |
本次调用的结果,取值见响应代码。 |
errorMessage |
string |
成功时为空;失败时说明具体原因。 |
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 响应代码
| 响应值 | 值 | 触发方法 | 处理方式 |
|---|---|---|---|
SUCCESS |
0 |
全部 | 无需处理 — 调用已被接受并成功完成。对于 StopSession(),表示会话已结束。 |
ERROR_STATE_NOT_IDLE |
1000 |
StartSession() |
已有会话在运行、已暂停,或仍在停止中。请检查 CurrentState;如果会话处于暂停状态,请调用 ResumeSession()。 |
ERROR_STATE_NOT_CAPTURING |
1001 |
PauseSession(), StopSession() |
SDK 当前没有在进行观察。如果该调用来自可能在没有会话时触发的生命周期回调,可以安全忽略。StopSession() 也可以结束已暂停的会话。 |
ERROR_NOT_SUPPORTED |
1002 |
StartSession() |
当前环境不支持游戏观察 — 目前为Unity 编辑器。请提前返回,不要重试。 |
ERROR_STATE_NOT_PAUSED |
1003 |
ResumeSession() |
SDK 当前未处于暂停状态。当状态为 SDK_STATE_IDLE 时,请改为调用 StartSession()。 |
ERROR_SESSION_FAILED |
1004 |
StartSession(), ResumeSession() |
请求已被接受,但会话未能启动,SDK 已回到 SDK_STATE_IDLE。该错误通过 callbackOnComplete 返回,而不是立即拒绝。请记录 errorMessage,并在下一个合适的时机重试;常见原因包括低端设备、SDK 版本过旧以及网络问题。 |
