テーマ
認証要件
UZU プラットフォームで配信するゲームが満たすべき要件です。YouTube Playables の certification 要件を参考に、creator UX とプラットフォーム品質を担保します。
段階的施行
これらの要件は今後 npx uzu publish 時に自動 lint で検証される予定です。当面は warning レベル、後に MUST 化されます。
ライフサイクル要件
| 要件 | レベル | 説明 |
|---|---|---|
init() 呼出 | MUST | SDK 初期化のため。run() / sync() 経由なら自動 |
firstFrameReady() 呼出 | (予定) SHOULD | ゲーム splash 描画完了時。ホストの spinner を消す |
gameReady() 呼出 | (予定) SHOULD | ユーザー操作可能になった時。広告タイマー・分析開始 |
| バックグラウンド時の停止 | SHOULD | document.visibilityState 監視 or 将来の onPause() API |
バンドルサイズ制約
| 項目 | 上限 | 推奨 |
|---|---|---|
| 初期バンドル (起動時 DL) | 30 MB | < 10 MB |
| 総バンドル (全アセット合計) | 250 MB | < 100 MB |
| 個別ファイル | 30 MB | < 512 KB |
| 総ファイル数 | 8,000 | < 2,000 |
lazy load
初期 10 MB に収めて 5 秒以内に gameReady() を発火、残りはステージ進行で順次ロードする設計を推奨します。
レスポンシブ要件
| 要件 | レベル |
|---|---|
| 縦/横の複数アスペクト比対応 | MUST |
| viewport 変更時に state 維持 | MUST |
| device orientation lock 禁止 | MUST |
| タッチ + マウス両入力対応 | MUST |
| Safe Area (iOS notch) 対応 | SHOULD |
ファイル / パス制約
| 要件 | レベル |
|---|---|
| 相対パスのみ (絶対パス禁止) | MUST |
ファイル名は英数字 + _, -, . のみ | MUST |
| HTTPS 経由でのみアセット読込 | MUST |
パフォーマンス要件
| 項目 | 上限 |
|---|---|
| JS heap 上限 (iOS Safari 制約) | 512 MB |
初回起動 → gameReady() まで | 5 秒 |
| プレイ中の安定 FPS | 30 fps 以上 |
禁止事項
| 項目 | 理由 |
|---|---|
| in-game の exit / quit ボタン | プラットフォーム側 UI と競合 |
| 外部サイトへの直接リンク | コンテンツ統制 |
| プラットフォーム同様のアイコン (例: 戻るボタン風) | UI 混乱 |
| 外部 ad SDK の組み込み | プラットフォーム経由で配信 |
| 個人情報の自前収集 | privacy ポリシー違反 |
SDK 統制下の要素
ゲームは以下を SDK 経由でホスト (UZU app) に委ねる必要があります:
| 要素 | SDK API |
|---|---|
| 効果音再生 | playSound() |
| BGM 再生 | playBgm() / stopBgm() |
| ボイチャ mic 制御 | setMicEnabled() |
| ボイチャルーム移動 | changeRoom() |
バリデーション項目 (npx uzu publish で自動チェック予定)
bash
$ npx uzu publish
✓ manifest.json 正常
✓ initial bundle: 18MB (limit: 30MB)
✓ total bundle: 87MB (limit: 250MB)
✓ files: 1,234 (limit: 8,000)
✓ SDK init 呼出 detected
✗ DOM API detected: document.body.innerHTML (line 42 in main.ts)
→ engine-2d ノードを使ってください
✗ Orientation lock detected: screen.orientation.lock("portrait")
→ manifest.orientation で宣言してください
Publish aborted. Fix 2 errors and retry.