跳转到内容

锦标赛(Unity)

FRVRSDK.Tournament 覆盖限时竞赛活动 —— 共享起始 payload、共享排行榜。和”对局结束”流程天然搭配:每局结束都调一次 CreateOrPostScore,玩家要么是在创建一个新锦标赛,要么是在延伸他们当前的参赛记录。

if (!FRVRSDK.Tournament.IsSupported()) return;

bool canCreate = FRVRSDK.Tournament.IsSupportedAPI("create");

沙盒化 / 无服务器的渠道完全不支持锦标赛。单个动作(createinvite、…)可能被分别管控 —— 接按钮之前先 IsSupportedAPI 一下。

FRVRSDK.Tournament.PostScore(
    tournamentId: "26406699882334539",
    score:        1500,
    () => Debug.Log("Score posted"),
    err => Debug.LogError(err));
string payload  = "{\"seed\":12345,\"mode\":\"endless\"}";
int    score    = 1500;
string endTime  = "1774907214000";   // 自 epoch 起的毫秒。"0" = 默认(2 周)

FRVRSDK.Tournament.Create(
    payload,
    title:     "Weekend Rush",
    sortOrder: "HIGHER_IS_BETTER",   // 计时类玩法用 "LOWER_IS_BETTER"
    score,
    endTime,
    tournamentId => Debug.Log("Created: " + tournamentId),
    err => Debug.LogError(err));

payload 是自由格式 JSON —— 每个参与者拿到的是同一个字符串,因此可以用它来给本局做 seed。

对局结束的辅助方法:CreateOrPostScore

Section titled “对局结束的辅助方法:CreateOrPostScore”

这是你在”你死了,显示成绩界面”时想要的调用。如果玩家不在锦标赛里,原生弹窗会提议创建一个;如果在,就提交分数。一次调用,在两种状态下都行为正确。

FRVRSDK.Tournament.CreateOrPostScore(
    payload:   "{}",
    title:     "Tournament",
    sortOrder: "HIGHER_IS_BETTER",
    score:     1500,
    endTime:   "0",                      // "0" = 默认 2 周结束时间
    resultJson =>
    {
        // { action: "created" | "posted", tournamentId: "..." }
        Debug.Log(resultJson);
    },
    err => Debug.LogError(err));

当前锦标赛(玩家正在参与的那个,如果有):

FRVRSDK.Tournament.GetCurrentTournament(
    json =>
    {
        var t = JsonUtility.FromJson<TournamentInfo>(json);
        Debug.Log(t.id);
    },
    err => Debug.LogError(err));

玩家完整的锦标赛列表:

FRVRSDK.Tournament.GetMyTournaments(
    json => { /* JsonUtility.FromJson<TournamentInfoArray>(json) */ },
    err => Debug.LogError(err));

宿主平台展示出来的活跃锦标赛:

FRVRSDK.Tournament.GetActiveTournaments(
    json => { /* PlatformTournamentArray */ },
    err => Debug.LogError(err));
FRVRSDK.Tournament.Join("26406699882334539",
    () => Debug.Log("Joined!"),
    err => Debug.LogError(err));

FRVRSDK.Tournament.Leave(
    () => Debug.Log("Left!"),
    err => Debug.LogError(err));

string options = JsonUtility.ToJson(new
{
    image = imageBase64,
    text  = "X invites you to a tournament!",
    cta   = "Play Now"
});

FRVRSDK.Tournament.InvitePlayers(options,
    () => Debug.Log("Players invited!"),
    err => Debug.LogError(err));

image 是 base64 data URL —— 形状和 Social.Share 一致。