アセットのポータビリティ — 一度作れば全プラットフォームで使える
kaedevn では、背景・キャラクター・音声などのアセットを一度用意すれば、Web でも Android でも Nintendo Switch でも、そのまま使えるように設計されています。
なぜ「どこでも使える」のか
秘密はアセットの仕様をプラットフォーム横断で統一していることにあります。Web でしか使えないような特殊な形式や、Switch でしか扱えないような独自フォーマットは採用していません。さらに、各プラットフォームのエンジンが同じ AssetProvider 抽象を通じてアセットを読み込むため、アセット ID さえ合っていればファイルの置き場所を作者が意識する必要はありません。
アセット制約の設計思想
kaedevn が定めるアセット制約はシンプルですが、すべてマルチプラットフォーム対応から逆算されています。
画像
- 最大辺
2048px— Switch の GPU テクスチャ上限に収まる安全なサイズ - 推奨形式
PNG / JPG / WebP— 全プラットフォームのデコーダーが対応 - 透過
PNG / WebP— キャラクター立ち絵で必須
2048px は「大きすぎず、高品質を維持できる」バランスポイントです。4K 背景のような巨大な画像は、ロード時間やメモリ消費の面でモバイルやコンソールに不利になるため、意図的に上限を設定しています。
ネイティブエンジンでは LRU キャッシュ によるテクスチャ管理が実装されており、使われなくなった画像は自動的にメモリから解放されます。Switch のような限られたメモリ環境でも安定動作します。
アニメーション
- 形式
スプライトシート— 個別フレーム PNG の乱立を防ぎ、ロード効率を確保 - 標準 fps
12-15fps— 滑らかさとファイルサイズのバランス
連番 PNG を個別に読み込む方式は、ファイル数が膨大になりロード時間が爆発します。スプライトシート(1枚の画像にフレームを並べる形式)を採用することで、どのプラットフォームでも効率的にアニメーションを再生できます。
キーフレームアニメーション(Timeline)
ブロック操作で設定できるタイムラインアニメーションは、コード不要で高度な演出を実現します。
- ターゲット — bg / ch / overlay
- 制御プロパティ — x, y, scale, alpha, rotation
- キーフレーム — 時刻、値、イージング関数
- 同時制御 — 複数のプロパティを同時にアニメーション可能
Timeline のデータ形式も Op と同様にプラットフォーム非依存であり、Web でも Switch でも同じ演出が再現されます。
音声
- BGM — 背景音楽(ループ再生)。Web: Web Audio API + GainNode / ネイティブ: SDL_mixer
- SE — 効果音(1回再生、重ね掛け可)。Web: Web Audio API + GainNode / ネイティブ: SDL_mixer
- VOICE — キャラクターボイス(1回再生)。Web: Web Audio API + GainNode / ネイティブ: SDL_mixer
3カテゴリに分離することで、プレイヤーが BGM・SE・VOICE それぞれの音量を独立に調整できます。これはコンソールゲームでは標準的な仕様であり、kaedevn は最初からこの設計を取り入れています。
解像度スケーリング
kaedevn の論理解像度は 1280x720 です。すべてのアセットはこの解像度を基準に配置されます。
実際の画面サイズ(例: 1920x1080)
|
v
スケーリング計算(アスペクト比維持)
|
v
論理解像度 1280x720 の空間にマッピング
|
v
セーフエリア(上下左右 5% = 64px / 36px)を考慮して描画
- PC ブラウザ: ウィンドウサイズに合わせて拡大/縮小
- スマートフォン: 画面サイズに合わせて自動フィット
- Switch (TV): 1080p → 720p にスケーリング、セーフエリアで端が切れても安全
- Switch (携帯): 720p そのまま
作者がアセットを作るときは、1280x720 の画面に収まるようデザインすれば、どの環境でも正しく表示されます。
アセットの配信パス
作品がプレイされる環境によって、アセットの取得方法は自動的に切り替わります。
- Web(ブラウザ) — クラウドストレージ(CDN経由)。技術: fetch API
- Android / PC — アプリにバンドル or ダウンロード。技術: AssetProvider → ファイルパス解決
- Switch — ゲームカード / ダウンロードデータ。技術: AssetProvider → ROM パス解決
作者がこの違いを意識する必要はありません。アセットを一度アップロードすれば、エンジンが環境に応じた最適な方法で配信します。ネイティブエンジンの AssetProvider(41行)がアセット ID からプラットフォーム固有のファイルパスへの変換を担当します。
セーブデータにアセットは含まれない
kaedevn のセーブデータには画像や音声のデータ自体は含まれません。含まれるのはアセット ID(参照)だけです。
{
"save_schema_version": 1,
"work_id": "project_001",
"node_id": "scene_03_line_42",
"vars": { "affection": 15 },
"read": { "scene_01": true },
"timestamp": 1709712345
}
この設計により:
- セーブファイルが軽量(数KB)
- クラウドセーブやプラットフォーム間の同期が容易
- アセットの差し替え・アップデートがセーブデータに影響しない
アセット変換ツール
kaedevn にはアセットの前処理を自動化するツールが同梱されています。
- webp 変換 — PNG / JPG → WebP へ自動変換(ファイルサイズ削減)
- mp4topng — MP4 動画 → PNG フレーム連番(スプライトシート素材に)
- rmbg — 背景の自動除去(立ち絵の切り抜き)
まとめ
- 画像は 2048px 以下: 全プラットフォームの GPU で安全、LRU キャッシュで自動メモリ管理
- アニメーションはスプライトシート: ロード効率が桁違い
- 音声は BGM / SE / VOICE の3カテゴリ: コンソール品質の音量制御
- 1280x720 基準のデザイン: スケーリングで全画面サイズに対応
- セーブに参照 ID のみ: 軽量 + クラウド同期対応
- 変換ツール同梱: WebP 変換、フレーム抽出、背景除去
これらのルールに従ってアセットを用意すれば、プラットフォームごとの作り直しは一切不要です。
関連ドキュメント
- アセット管理ガイド — アセットの種類と管理方法
- マルチプラットフォーム — SDL2 ネイティブエンジン
- エンジンの仕組み — Op 型と共通言語