テーマ
認証要件
UZU プラットフォームで配信するゲームが満たすべき要件です。YouTube Playables の certification 要件を参考に、creator UX とプラットフォーム品質を担保します。
段階的施行
これらの要件は今後 npx uzu publish 時に自動 lint で検証される予定です。当面は warning レベル、後に MUST 化されます。
ライフサイクル要件
| 要件 | レベル | 説明 |
|---|---|---|
init() 呼出 | MUST | SDK 初期化のため。run() 経由なら自動 |
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 |
検証する基準サイズ
「複数アスペクト比対応」を満たしたと言えるのは、下の 3 つで内容が画面外に出ないことを確認したときです。数字は CSS px(デバイス px ではありません)。
| 何 | landscape | portrait | 何を見るか |
|---|---|---|---|
下限(uzu dev の 1 席) | 780 × 360 | 360 × 780 | 短辺 360。ここで収まれば実機で困ることはまず無い |
| 実機(iPhone 相当) | 844 × 390 | 390 × 844 | 実際に一番多く遊ばれる寸法 |
| 広い(iPad 相当) | 1194 × 834 | 834 × 1194 | 余白が間延びしていないか、最大幅が効いているか |
下限の短辺 360 と比 19.5:9 は、uzu dev の harness が 1 席あたりに保証する最小値と同じです。この 3 つを外れたサイズだけで確認しても、要件を満たした証明にはなりません。
見落としやすいのは高さ
横画面で先に足りなくなるのは幅ではなく高さです。360px の短辺に対し、HUD とホームインジケータ(--uzu-content-inset-top + --uzu-content-inset-bottom、iPhone 横持ちで 73px)だけで約 2 割を持っていきます。文字サイズや余白を px 固定で書いていると、小さい画面でだけ下端が切れます。詳しくは SafeArea と HUD 回避。
グリッドで見るなら、縮小表示が掛かるまでウィンドウを狭めてください。ウィンドウが広いとペインが下限より大きく組まれ、見切れを取りこぼします。 縮小表示では文字が読める大きさか・押せる大きさかは判断できないので、そこまで見るなら単体表示(?player=N)のウィンドウを上の寸法に合わせてください。手順は 開発・テストガイド にあります。
ファイル / パス制約
| 要件 | レベル |
|---|---|
| 相対パスのみ (絶対パス禁止) | 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() |
| プレイ画面を閉じる | finishGame() |
バリデーション項目 (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.