InitExperiment
void InitExperiment(string gameObjectName, string methodName, string config)
说明:用于初始化 AB 实验功能
public class ExpConfig
{
public string game_id;
public string api_key;
public string user_id;
public bool enable_auto_exposure;
}
public class GameManager : MonoBehaviour
{
public void CallInitExperiment() {
ExpConfig expConfig = new ExpConfig()
{
game_id = "***", // 必选:项目游戏 ID,联系「苏」获取
api_key = "***", // 必选:项目 API KEY,联系「苏」获取
user_id = "***", // 必选:玩家小游戏 openid,玩家唯一标识。开发联调时可提供 openid 给「苏」加入实验的对照组/实验组白名单进行不同组的测试验证
enable_auto_exposure = false, // 可选:自动上报实验曝光(默认 true)。当该值为 true 时,在调用 GetVariation() 时会自动上报实验曝光,如果该值为 false 时,需要手动调用 TrackExposure() 上报实验曝光。实验曝光应该在玩家真正“看到”或“使用到”实验变体时才调用上报,比如玩家看到了变体的 UI,体验到变体的功能时才上报
};
#if UNITY_WEBGL && !UNITY_EDITOR
OSDKHelper.InitExperiment(gameObject.name, "OnInitExperiment", JsonUtility.ToJson(expConfig));
#else
Debug.Log("InitExperiment 仅在 WebGL 运行时有效");
#endif
}
public void OnInitExperiment(int initResult) {
Debug.Log($"init experiment 回调: {initResult}");
if (initResult == 1) {
// 初始化成功
Debug.Log("init experiment 回调成功");
string expId = "实验层 ID";
GetVariation(expId);
TrackExposure(expId);
} else {
// 初始化失败
Debug.Log("init experiment 回调失败");
}
}
}GetVariation
string GetVariation(string experimentId)
【使用前,需要先调用InitExperiment进行实验的初始化】
说明:获取实验分流信息,返回玩家在某个 AB 实验下被分配的实验组/实验变体信息。variationInfo 对象包含实验变体属性,并必须使用如下代码示例来读取实验变体的配置参数。
实验的配置参数截图示例(Demo 实验):

特殊说明:调试期(非正式上线)的实验,需要找「苏」加 openid 白名单到对照组/实验组,这样在开发联调时获取的「配置参数」的值才会符合预期。
// 传入实验层 id,获取实验分流信息(用户被分配到该实验的哪个实验组/实验变体)
private void GetVariation(string experimentId) {
string variation = OSDKHelper.GetVariation(experimentId);
if (string.IsNullOrEmpty(variation)) {
// 如果是空字符串
Debug.Log("该用户的流量不参与该实验(即不会分流到对照组或实验组) 或 其他异常,请执行默认版本");
} else {
// 用户被分流到该实验的对照组或实验组,即用户被分配到所属的实验变体了
// 现在可以获取实验变体的配置参数并在代码中直接使用这些参数
// 返回的 variation 为 json 字符串
Debug.Log("info:" + variation);
// 将 json 字符串反序列化(解析)为 C# 对象
VariationInfo variationInfo = JsonUtility.FromJson<VariationInfo>(variation);
// 如下 is_show_banner 为实验配置的参数 key,true 为获取不到配置参数时的默认值,默认值可自行定义,但类型要匹配。这里以配置 bool 值为例
bool isShowBanner = variationInfo.varParams?.boolValue?.is_show_banner ?? true;
if (isShowBanner) {
Debug.Log("展示 Banner");
} else {
Debug.Log("不展示 Banner");
}
// 其他示例(请自行定义好获取不到配置参数时的默认值)
// 1. 如果在实验平台配置 boolean 参数(必须采用 boolValue)
bool testBoolean = variationInfo.varParams?.boolValue?.testBoolean ?? false;
// 2. 如果在实验平台配置 string 参数(必须采用 stringValue)
string testString = variationInfo.varParams?.stringValue?.testString ?? "red";
// 3. 如果在实验平台配置 json 参数(json 会转为字符串,必须采用 stringValue)
string testJson = variationInfo.varParams?.stringValue?.testJson ?? "{\"a\":1,\"b\":2}";
// 4. 如果在实验平台配置 number 参数(必须采用 numberValue)
// 这里以配置 int 值为例
int testNumber = variationInfo.varParams?.numberValue?.testNumber ?? 10;
}
}控制台打印结果示例:

TrackExposure
void TrackExposure(string experimentId)
【使用前,需要先调用InitExperiment进行实验的初始化】
说明:手动实验曝光,当初始化实验传入 enable_auto_exposure 为 false 时,使用该方法进行手动实验曝光,当 variation 为空字符串时不用曝光。注意,当enable_auto_exposure 为 true 时,调用 GetVariation 时会自动触发实验曝光,请勿再使用 TrackExposure 进行重复曝光。
// 在实验变体信息被使用时,触发上报实验曝光。实验曝光应该在玩家真正“看到”或“使用到”实验变体时才调用上报,比如玩家看到了变体的 UI,体验到变体的功能时才上报。
private void TrackExposure(string experimentId) {
OSDKHelper.TrackExposure(experimentId);
Debug.Log("trackExposure");
}