AI にゲームを作らせるとき、コードは何時間でも書いてくれます。止まるのは素材のほうでした。画像も音も、AI は「用意してください」と言ってくる。
そこで、素材ファイルを1つも置かずに1本作りました。絵は図形、音は計算した波形です。
0個
画像・音声ファイル
プロジェクトに1つも無い
4種
コードで作った効果音
跳ぶ・取る・死ぬ・自己ベスト
+111KB
音と演出を足した増分
7.38MB → 7.49MB
5件
音の壊れ方を見張るテスト
耳を使わない検査
減らせたのは画像・音声ファイルの管理
この試作で確かめたのは、画像・音声ファイルを読み込まずに描画と音を作る実装と、その容量です。
使った図形と波形はコード内に残るため、外部の画像・音声ファイルを集めて管理する作業を減らせました。一方で、日本語フォントや使用するコードなどは配布物に残っています。
「素材の確認がまるごとゼロになる」という以前の説明は広すぎました。今回の実装で、配布物すべての利用条件の確認を不要にできたと検証したわけではありません。
図形と波形で作れた範囲と、別に用意した素材を分けて残す。
絵の作り方:四角・丸・三角をその場で作る
Unity は実行時に Texture2D を作れるので、そこから Sprite を作れば画像ファイルは要りません。四角は 8×8 の白いテクスチャ1枚で足ります。あとは色と大きさで描き分けます。
丸だけは少し手を入れました。ドットのまま丸を描くと、縁がギザギザに見えます。
float dx = x - r, dy = y - r;
float d = Mathf.Sqrt(dx * dx + dy * dy);
// 縁を1px だけぼかす(そのままだとギザギザに見える)
float a = Mathf.Clamp01(r - d);
px[y * size + x] = new Color32(255, 255, 255, (byte)(a * 255));
このゲームに出てくるものは、全部この3種類でできています。

図形だけで描いたもの
色で意味を固定する
図形で作ると決めると、色に意味を持たせるしかなくなります。結果として、初めて遊ぶ人にも「赤は危ない」が伝わりやすくなりました。ここは素材が無いことの副産物です。
音の作り方:波形を計算して AudioClip にする
効果音は、サンプル値の配列を自分で埋めて AudioClip.Create に渡すだけです。音の高さを始点から終点へ動かせば、跳ねる音にも落ちる音にもなります。
for (int i = 0; i < count; i++)
{
float t = (float)i / count; // 0→1
float hz = startHz + (endHz - startHz) * t; // 高さを滑らかに変える
phase += 2.0 * Math.PI * hz / SampleRate;
float v = shape switch
{
Shape.Sine => (float)Math.Sin(phase),
Shape.Square => Math.Sin(phase) >= 0 ? 1f : -1f,
_ => (float)(2.0 / Math.PI * Math.Asin(Math.Sin(phase))),
};
float attackGain = attack <= 0f ? 1f : Math.Min(1f, (i / (float)SampleRate) / attack);
float decay = 1f - t;
data[i] = v * volume * attackGain * decay * decay;
}
4つの音は、この関数の引数だけで決まります。
- 1
跳ぶ
0.09秒・520Hz → 880Hz の矩形波。上がる音にすると「跳んだ」感じになる - 2
コインを取る
988Hz と 1319Hz を続けて鳴らす。2音つなげるだけで「ピロン」になる - 3
死ぬ
0.45秒・420Hz → 70Hz の三角波。下がる音+長めで「終わった」感じ - 4
自己ベスト
784 → 988 → 1319Hz。上がる3音にすると、それだけで祝いの音になる
⚠️ 立ち上がりを 0 にするとプツッと鳴る
波形をいきなり最大音量から始めると、スピーカーが「プツッ」と鳴ります。最初の 0.004秒 だけ音量を 0 から上げる(アタック)と消えます。終わりも同じで、減衰させずに切ると同じ音が出ます。
音は耳で確かめるものだが、壊れ方は自動で検出できる
「いい音かどうか」は聞かないと分かりません。ただ、壊れているかどうかは数字で判定できます。生成した配列を見るだけなので、エンジンも音の再生も要りません。
音のテスト5件(EditMode・耳を使わない)
数字をいじったときに、この5件が壊れたことをすぐ教えてくれます。音を1つずつ聞き直す作業が消えました。
できないこと:文字だけは素材が要る
この方法で1つだけどうにもならなかったのが文字です。
WebGL ビルドを開いたら、画面の日本語が全部消えていました。当時使っていた標準フォントには、必要な日本語の文字が入っていなかったためです。初版ではゲーム内を英数字にし、日本語の説明を紹介ページへ置きました。
2026年9月21日追記:英数字優先の方針を変更
日本語フォントを入れると必ず数MB増える、という以前の説明は不正確でした。その後、Codex制作の3作品で必要文字だけに絞ったTTFを同梱し、圧縮前で39,056〜74,144バイトになりました。これはフォント自体の容量で、配信ビルドの増分とは別です。
紹介ページだけ日本語でも、ゲーム内の操作が読みにくければ足りません。現在の制作ルールは初版から日本語UIを作り、公開Web版で表示を確かめる方針です。抽出スクリプトと3方式のUI設定はUnity WebGLの日本語フォント設定と軽量化にまとめました。この記事のウォールフリップ初版の制作記録と、後から行った3作品の日本語化は区別しています。
まとめ
- 画像・音声ファイル0個で、図形と波形を使ったゲームを実装できた。減らせたのは外部ファイルの管理で、すべての確認がなくなるわけではない
- 絵は四角・丸・三角。丸は縁を1pxぼかすだけで見た目が変わる
- 音は波形を計算して
AudioClip.Createに渡すだけ。高さを動かすと跳ねる音・落ちる音になる - 音の壊れ方(無音・音割れ・プツッ・長さ)はテストにできる。良し悪しだけ耳で決める
- 文字にはフォントを同梱する。固定文言なら必要文字だけに絞り、容量と表示を確かめる