跳到主要内容

模版开发

信号量总览

Unity-WebGL 模版协议:

  1. init(包含 craft
  2. ready
  3. start
  4. end

完整代码示例(含 craft,基于环境配置完成)

using System;
using UnityEngine;

public sealed class NianxieTemplateController : MonoBehaviour
{
[Serializable]
private sealed class Craft
{
public string title;
public string coverUrl;
public int timeLimitSec = 60;
}

[Serializable]
private sealed class InitPayload
{
public Craft craft;
}

private Craft _craft;
private bool _started;
private NianxieBridge _bridge;

private void Awake()
{
_bridge = GetComponent<NianxieBridge>();
if (_bridge == null)
{
Debug.LogError("[Nianxie] NianxieBridge not found on this GameObject.");
}
}

// [init] 包含 craft:解析参数并完成模板装配
public void OnMiniInit(string json)
{
var payload = JsonUtility.FromJson<InitPayload>(json);
_craft = payload.craft;
ApplyCraft(_craft);
// [ready] craft 应用完成后通知宿主可开始
_bridge?.SendReady("{\"stage\":\"template-ready\"}");
}

// [start] 收到开始信号后进入正式可交互运行
public void OnMiniStart(string _)
{
if (_started) return;
_started = true;
StartTemplateRuntime(_craft);
}

// [end] 模版流程结束时上报结果
public void FinishTemplate(int score)
{
var result = $"{{\"score\":{score}}}";
_bridge?.SendEnd(result);
}

private void ApplyCraft(Craft craft)
{
// TODO: 用 craft 驱动 UI/资源/玩法参数
Debug.Log($"Template title={craft.title}, limit={craft.timeLimitSec}");
}

private void StartTemplateRuntime(Craft craft)
{
// TODO: 启动模板运行逻辑
}
}

Json Schema 定义示例

备注

这里仅给定义示例,不展开说明。

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["title"],
"properties": {
"title": { "type": "string", "minLength": 1 },
"coverUrl": { "type": "string" },
"timeLimitSec": { "type": "integer", "minimum": 10, "maximum": 600 }
}
}

开发约束与提审建议

  • init 阶段建议先暂停运行,应用 craft 后再 ready
  • start 后再恢复运行态,避免用户在未就绪时触发交互
  • 如果你的项目有顶部 UI,建议在桥接层统一处理安全区偏移(README 默认示例包含 safe area + extraTopOffsetPx 思路)
  • WebGL 模板保持官方变量写法,避免导出后资源变量未替换

可参考:

常见错误统一见:常见问题