単色の図形だけのゲームを「安っぽくない」見た目にする(加算合成を自作)
素材ファイルを使わずに作ったゲームが、単色の図形が並ぶだけの画面になりました。作り直して分かったのは、形ではなく光り方だということ。加算合成のシェーダーを自作するときに踏んだ3つの穴(テクスチャが渡らない・色が白のまま・Webビルドに入らない)を、前後の画面つきで残します。
公開 2026年9月19日
この記事の要点4 points
- 足りなかったのは形ではなく光り方。 ふつうの半透明では、暗い背景に重ねてもかすむだけだった。
- 自作マテリアルにすると、SpriteRenderer は絵のテクスチャを渡してくれない(真っ白な四角になる)。
- SpriteRenderer.color は頂点色ではなく `_RendererColor`。 掛け忘れると色を変えても白いまま。
Shader.Findだけだと Web ビルドにシェーダーが入らない(Always Included Shaders に登録する)。
目次5章
検証した環境最終確認 2026年9月19日
- Windows 11
- Unity 6.6(6000.6.0f1)・URP 2D・WebGL ビルド
- Claude Code(Opus 5 / 思考レベル 高)
書いてあるのは、この環境で実際に試した結果です。ツールの仕様や料金は変わるので、重要な判断の前には公式の情報も確認してください。
画像も音も素材ファイルを1つも使わない方針で4本目を作りました。動いて、テストも通って、公開しました。そして言われました。
「デザインひど過ぎだろ 演出も」
そのとおりでした。下が、言われたときの画面(左)と、作り直したあと(右)です。形はほとんど同じです。


足りなかったのは形ではなく「光り方」
最初の実装は、白い四角と三角に色を付けて置いただけでした。そこに足したのはこれだけです。
足したもの(形は変えていない)
いちばん効いたのは加算合成です。ふつうの半透明で光を重ねても、暗い背景では白っぽくかすむだけで、光って見えません。足し込みにすると、重なったところが明るくなります。
自作シェーダーで踏んだ3つの穴
URP 2D にはそのまま使える加算のスプライトシェーダーが無いので、20行ほどのシェーダーを書きました。ここで3回つまずきました。
真っ白な四角が出る
- 症状
- グローを出したはずの場所に、のっぺりした四角が出る
- 原因
- 自作のマテリアルに替えると、SpriteRenderer は絵のテクスチャを渡してくれない。`_MainTex` が既定の白のままになる
- 対処
- 絵ごとにマテリアルを作り、`mainTexture` に自分で入れる(このゲームでは6枚ぶん・辞書に持って使い回す)
色を変えても白いまま
- 症状
- 敵は赤、弾は青のはずが、光だけ全部白い
- 原因
SpriteRenderer.colorは頂点色ではなく `_RendererColor` に入って来る- 対処
- シェーダーで `_RendererColor` を掛ける(`[PerRendererData]` として宣言する)
エディターでは光るのに、Web ビルドでは光らない
気づかないと「本番だけ見た目が違う」になる- 症状
- ビルドしたページだけ、加算の絵が出ない
- 原因
Shader.Findでしか参照していないシェーダーは、ビルドに含まれない- 対処
- Project Settings の Always Included Shaders に登録する(ProjectSettings に記録され、git にも入る)
Blend SrcAlpha One // 足し込み // ⚠️ SpriteRenderer.color はここに来る(頂点色ではない) float4 _RendererColor; OUT.color = IN.color * _Color * _RendererColor;
演出はゲームの中身に触らせない
演出を足すときに怖いのは、当たり判定や点が変わってしまうことです。分け方はこうしました。
STEP 01
Core:起きたことを置く
撃破・被弾・発射(固定配列)
STEP 02
演出:それを読む
破片・輪・揺れ・音
STEP 03
描画:一覧にして出す
使い回した絵に流し込む
この形にしたので、1フレームあたりの確保は0バイトのまま(自動テストで見張っている)で、演出を足せました。
ついでに直した:終わったあとも時間を進める
ゲームオーバー後に Tick を呼ぶのをやめていたら、「被弾した」という出来事が片づかずに残り、画面が赤いままになりました。終わっていても呼ぶ(中では何もしない)ようにして解決しています。
数字で見た変化
作り直しの前後で、公開したページを自動で撮って数えました(この検査自体の作り方は別の記事に書きました)。
前
- はっきり違う色:1種類
- 撃破・被弾の反応:無し
- 背景:真っ黒
後
- はっきり違う色:4〜5種類
- 撃破:破片+輪+揺れ/被弾:赤い明滅
- 背景:グラデーション+流れる星
ビルドは 6,944,159 バイト(作り直し後)。サイズはほとんど変わりません(図形を計算で作っているので、増えたのはコードだけ)。
まとめ
- 素材を使わないゲームで足りないのは、形ではなく光り方
- 加算合成の自作シェーダーは、テクスチャ・色・ビルド収録の3か所でつまずく
- 演出はゲームの中身に触らせない(起きたことを読むだけにする)
- 🔴 見た目を最後に回さない。あとから足すと描画まわりを書き直すことになる
FAQ
よくある質問
画像素材を使わないゲームを、安っぽく見せないコツは?
形を凝るより、光り方に差をつけるほうが効きます。ぼかした丸(グロー)と輪を加算合成で重ねるだけで、同じ図形が別物に見えます。背景も真っ黒にせず、わずかなグラデーションを敷きます。
加算合成のシェーダーを自作するときの落とし穴は?
3つあります。①自作マテリアルにすると SpriteRenderer が絵のテクスチャを渡さないので、絵ごとにマテリアルを作って mainTexture を自分で入れる ②SpriteRenderer.color は _RendererColor に来るので掛ける ③Shader.Find で使うシェーダーは Always Included Shaders に登録しないと Web ビルドに入らない。
演出を足すと、ゲームの中身に影響しませんか?
分けて作れば影響しません。このゲームでは Core(判定・点)が「この1フレームに起きたこと」を固定配列に置き、描画側がそれを読んで破片や光を出しています。演出を止めても点は同じです。
どのタイミングで見た目を作り込むべきですか?
最初からです。あとから足すと描画まわりを書き直すことになります。4本目では最後に回してしまい、作り直しに2時間かかりました。
この記事は役に立ちましたか?
NEXT
あわせて読む
効果音と画像を素材ファイルなしで作る(Unityでコードから生成)
AI にゲームを作らせると、コードは書けても素材が出てきません。画像も音もファイルを1つも置かず、四角・丸・三角と、計算した波形だけで1本作りました。実装と、増えたビルドサイズ(+111KB)と、この方法でできないことを残します。
毎フレーム作って壊すのをやめる(オブジェクトプールの効き目を実測)
弾と敵が同時に数百個出るゲームを作りました。表示のたびに GameObject を作って壊す書き方と、作ったものを使い回す書き方を、同じ場面で測って比べます。1フレーム 19.06ms が 0.15ms になり、確保するメモリは 0 バイトになりました。
CodexでUnityシューティングを制作:リフレアの設計と改善記録
Claude Code作のムレウチを見せ、Codexに別のシューティングを依頼しました。敵弾の吸収反撃、コードで描いた機体と雲、自動プレイが24秒で負けた原因、ボスの配置と予告の修正まで。リフレアの制作を画面と実測で振り返ります。