适用于 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 项目中:

  1. 下载 6labs Unity SDK 最新版本 v4.0.0。
  2. 将安装包导入到您的 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()要求:SDK_STATE_IDLE
public void StartSession(
    string inGameId = null,
    string developerPayload = null,
    Action<SdkResponse, string> callbackOnComplete = null)

参数说明

参数 类型 必填 说明
inGameId string 否 可选但推荐的用户标识符。如果省略,会话可能会被丢弃,且不会用于 AI 分析。
developerPayload string 否 与会话关联的可选开发者自定义元数据。该值会随会话请求原样转发,可用于附加自定义追踪信息或上下文信息。提供更丰富的 developerPayload 可以显著提升 AI 驱动的分析能力和会话理解效果。如需详细用例和 JSON 示例,请参阅开发者载荷示例页面。
示例:

  • 用户获取渠道
  • 活动 Campaign ID
  • 用户分群(例如:新用户 / 回访用户 / 付费用户)
  • A/B 测试变体(例如:variant_a、variant_b)— 将用户划分为不同的队列,并在 6labs 控制台中对比各队列的游戏数据。
  • 内部追踪标识
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()要求:SDK_STATE_CAPTURING
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()要求:SDK_STATE_PAUSED
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()要求:SDK_STATE_CAPTURING / SDK_STATE_PAUSED
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 版本过旧以及网络问题。
Text copied to clipboard
有疑问?请通过以下方式联系我们: dev-support@6labs.ai