効果音と画像を素材ファイルなしで作る(Unityでコードから生成)
AI にゲームを作らせると、コードは書けても素材が出てきません。画像も音もファイルを1つも置かず、四角・丸・三角と、計算した波形だけで1本作りました。実装と、増えたビルドサイズ(+111KB)と、この方法でできないことを残します。
公開 2026年9月18日
この記事の要点4 points
- 画像ファイルも音声ファイルも0個で、ブラウザで遊べるゲームが1本できた。 素材の権利を確認する作業がまるごと消える。
- 音は波形を計算して AudioClip にする。 跳ぶ・取る・死ぬ・自己ベストの4種で、演出と合わせてビルドは +111KB(+1.5%)だった。
- 音は耳で確かめるものだが、壊れ方(無音・音割れ・出だしのプツッ・長さ違い)は自動で検出できる。
- この方法で唯一どうにもならないのが文字。 日本語を出すにはフォントという素材が要る。
目次6章
検証した環境最終確認 2026年9月18日
- Windows 11
- Unity 6.6(6000.6.0f1)・WebGL ビルド
- Claude Code(Opus 5 / 思考レベル 高)
書いてあるのは、この環境で実際に試した結果です。ツールの仕様や料金は変わるので、重要な判断の前には公式の情報も確認してください。
AI にゲームを作らせるとき、コードは何時間でも書いてくれます。止まるのは素材のほうでした。画像も音も、AI は「用意してください」と言ってくる。
そこで、素材ファイルを1つも置かずに1本作りました。絵は図形、音は計算した波形です。
0個
画像・音声ファイル
プロジェクトに1つも無い
4種
コードで作った効果音
跳ぶ・取る・死ぬ・自己ベスト
+111KB
音と演出を足した増分
7.38MB → 7.49MB
5件
音の壊れ方を見張るテスト
耳を使わない検査
素材が無いと、権利の確認がまるごと残る
素材を使わない理由は容量ではありません。配ったときに責任が残らないことです。
画像や音を1つでも入れると、それがどこから来たもので、商用利用できて、クレジット表記が要るのか要らないのか、あとから全部たどれる状態にしておく必要があります。作ったのが自分でも、生成 AI に出させたものでも、確認は残ります。
図形と波形にはそれがありません。コードの中に数字しか無いからです。
素材ゼロなら、素材の権利を確認する工程もゼロになる。
絵:四角・丸・三角をその場で作る
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 ビルドを開いたら、画面の日本語が全部消えていました。Unity に標準で入っているフォントに、日本語の字が入っていないからです。日本語フォントを積めば出せますが、そこだけ数MBの素材ファイルが増えることになります。
日本語をそのまま出す
- 日本語フォントをプロジェクトに入れる
- ビルドが数MB増える(本体が 7.5MB なので無視できない)
- フォントのライセンス確認が戻ってくる
この版で選んだ方
- ゲーム内の文字は英数字だけにする
- 説明は、ゲームを埋め込むページ側(日本語)に書く
- 素材ゼロを維持する
遊び方の説明をページ側に置けるのは、自分のサイトで配っているからです。外部のサイトに出すときは、ここは考え直すことになります。
まとめ
- 画像・音声ファイル0個でも、ブラウザで遊べるゲームは作れる。消えるのは容量よりも、権利を確認する工程
- 絵は四角・丸・三角。丸は縁を1pxぼかすだけで見た目が変わる
- 音は波形を計算して
AudioClip.Createに渡すだけ。高さを動かすと跳ねる音・落ちる音になる - 音の壊れ方(無音・音割れ・プツッ・長さ)はテストにできる。良し悪しだけ耳で決める
- 文字だけは素材が要る。日本語を出すならフォントを積むか、ゲーム内は英数字にするかを選ぶ
FAQ
よくある質問
画像を使わずにゲームの見た目を作れますか?
図形だけで成立する内容なら作れます。四角・丸・三角を実行時に作り、色と大きさで描き分けます。このゲームは壁・トゲ・プレイヤー・コイン・帯の全部がこの3種類です。写実的な絵やキャラクターが要るなら、素材を用意してください。
効果音をコードで作ると、どれくらい容量が増えますか?
音4種と画面の演出をまとめて足して 111KB(+1.5%)でした。音声ファイルを積むより小さく収まりますが、増えるのは音の長さではなく、生成するコードの分です。
AI に素材を作らせることはできますか?
生成 AI で画像や音を作る方法もありますが、商用利用の条件を素材ごとに確認する必要があります。図形と波形なら、その確認自体が不要です。まず遊べる形にしたい段階では、こちらのほうが速いです。
ブラウザで効果音が鳴りません。
ブラウザは、利用者が1回操作するまで音を鳴らしません。タイトル画面のタップでゲームを始める作りにしておけば、その操作で解禁されます。起動と同時に鳴らそうとすると無音になります。
この記事は役に立ちましたか?
NEXT
あわせて読む
AIに作らせたゲームはなぜ単調になるのか(遊んで直した6つ)
仕様どおりに動き、自動テスト43件も全部通ったのに、遊ぶと退屈でした。実際に遊んで出てきた不満6つと、それぞれ何を直したかを、数字と作業時間つきで残します。AI に「面白くして」と言っても面白くならない理由の記録です。
Unity WebGLビルドの容量を27%削減した方法(10.1MB→7.4MB)
まず設定2つで 10,143,315 → 7,945,839 バイト。次に未使用パッケージ39件を外して 7,374,207 バイト。さらに使っていないシェーダー9本を落として 7,311,364 バイト。合計 −27.9% です。効かなかった施策(スプラッシュ停止)も数字ごと残します。
CLAUDE.mdは目次だけにする(ルールと手順は別ファイルに置く)
AI への指示書に全部書き込むと、すぐ読めなくなり、別の端末では古い内容が残ります。指示書を22行の目次にして、ルール・決定・進捗・手順をそれぞれ別のファイルに分けた構成と、失敗のたびに1行ずつ足していく運用を、実際のファイルの行数つきで残します。