【Unity入門】プレイヤーの周りだけ常時光を照らす仕組みを作ろう(導入〜実装まで)

Unity2D実装

こんにちは!夜の街2Dアクションゲームを制作中の怪獣です🦖
今回は、URP(Universal Render Pipeline)の2Dライトを使って、背景全体を暗くしつつ、プレイヤーの周りだけを明るく照らす方法を解説します。
導入~実装までそこまで難しくはないのですが、導入方法や光を照らすまでの前提など個人的に色々ハマったので、その点も合わせて最後に紹介しようと思います。

実際に実装出来るようになると夜のステージやダンジョン探索っぽい雰囲気が一気に出るので、演出としてかなりおすすめです!


この記事でできるようになること

  • URP(Universal Render Pipeline)を導入し、背景全体を暗く調整することができる
  • プレイヤーの周りだけ常時照らす仕組みを作ることができる

前提(確認ポイント)

  • Unity 2021.3 LTS / 2022.3 LTS だと安定(他でもOK)
  • 2Dプロジェクトでも導入可能
  • この記事は URP 2Dライト(Light 2D) を使います

①URPを導入する

まず初めにURP(Universal Render Pipeline)をインストールする必要があります。

URPとは?

URP(Universal Render Pipeline)とは、Unityで「画面をどう描画するか」を決める仕組みのようなものです。
Unityを新規作成した直後は、Built-in Render Pipeline(旧方式) が使われています。
Built-in(初期状態)と URP の決定的な違いは以下です。

Built-in Render Pipeline(Unity初期状態)について

  • 昔からある方式
  • 「3D向けの光」が前提(Built-in には 2D専用ライト が存在しない)
  • 2Dは Spriteを貼っているだけ という扱い

つまり、

  • キャラや背景は
    「ただの画像」
  • 光は
    「3D空間用のもの」

なので、

  • 2D用の Global Light
  • 2D用の Point / Spot Light

という概念自体が 存在しないため、2D専用ライトが用意されていません。


URP(Universal Render Pipeline)について

URPでは

  • 2D Renderer という専用描画ルートがある
  • Spriteを
    「光を受ける物体」として扱える。
  • 2D用のライト計算が最初から組み込まれている

つまり、

URPは「2Dも3Dも、ちゃんと光のある世界として扱う」仕組み

です。

「URPを導入すると何が増えるのか?」を具体的に説明すると、
Unity内部で次のものが有効になります。

Light2D という新しいコンポーネント

Built-in(Unity初期状態):

  • Light(3D用)がデフォルトで用意されている

URP 2D:

  • Light2D
    • Global Light 2D 追加
    • Point Light 2D 追加
    • Spot Light 2D 追加

➡️ 2D専用のリアルな光と影を追加するための専用コンポーネントが使えるようになります


Sprite が「光を受けるかどうか」を選べるようになる

URPでは Sprite に対して:

  • 光を無視する(Unlit)
  • 光を受ける(Lit)

Material で明確に分けます

  • Sprites-Default
    → 光を無視(常に同じ色)
  • Sprite-Lit-Default
    → Light2D の影響を受ける

「光が0なら黒になる」という、当たり前の世界になる

Built-inでは👇

  • 光がなくてもSpriteは見える

URP 2Dでは👇

  • 光がなければ見えない

これは、

現実世界と同じルールを2Dにも持ち込んだ

ということになります。

実際にURPをインストールする

前置きが長くなりましたが、実際にURPをインストールしていきましょう!

  • Window → Package Manager
  • 左上のプルダウンを Unity Registry に切り替える
  • Universal RP を探して Installをします


「Install」⇒「Remove」に切り替わったらインストール完了です!


②URP 2D Renderer を作成する

次に、「URP Asset (with 2D Renderer)」を作っていきます。

これは、Unityで「2Dライトを使うために必ず必要な設定」 です。
Unityの初期状態では、2Dゲームであっても
描画の仕組みは 3D向け(Universal Renderer) のままになっています。
そのため、2Dゲームで光の演出をしたい場合は、必ず “2D Renderer” を使うURP Assetを作成する必要があります。
手順は以下の通りです。

  1. Assets → Create → Rendering
  2. URP Asset (with 2D Renderer) を選択する

すると、2つ自動で生成されます。

① Pipeline Asset(URPの本体)

1つ目は Pipeline Asset です。

これは、プロジェクト全体の「描画ルール」をまとめた本体ファイルになります。

具体的には、

  • URP を使うかどうか
  • どの Renderer(2D / 3D)を使うか
  • ライトや描画の基本方針

といった、プロジェクト全体に影響する設定を管理しています。
この Pipeline Asset を
Project Settings → Graphics / Quality に設定することで、
「このプロジェクトは URP(2D Renderer)で描画する」という宣言になります。

② Renderer(2D Renderer 用の設定アセット)

もう1つ作られるのが、
2D Renderer 用の Renderer アセット です。

これは Pipeline Asset とは別物で、2D専用の描画処理・ライト計算を担当する設定ファイルになります。

この Renderer では、

  • Global / Spot / Point Light 2D の計算方法
  • 2Dライトのブレンド設定
  • 影や減衰の処理

といった、「2D描画の中身」 を管理しています。

Pipeline Asset の中から
「この Renderer を使う」と指定されることで、
初めて URP 2Dライトが有効 になります。

名前を以下等に変更します:

  • URP_2D.asset(Pipeline Asset:本体)
  • URP_2D_Renderer.asset(Renderer 2D Data:2Dレンダラー)

これにより、

  • 2Dライトが使えるようになる
  • スプライトが光の影響を受けるようになる
  • 夜の表現や雰囲気作りが簡単にできる

といった、2Dゲーム向けの描画環境 が整います。

⚠️「with Universal Renderer」を選ぶと3D向けになり、2D Light が正しく働かないことがあるので注意!


③Project Settings に URP を適用する(Graphics / Quality)

作っただけでは反映されないので、適用が必要です。
以下の手順で行っていきます。

Graphics に適用

  1. Edit → Project Settings → Graphics
  2. Scriptable Render Pipeline Settings
    URP_2D.asset (Pipeline Asset本体)をドラッグ&ドロップする

    以下のメッセージが表示される場合は「Continue」を選択します。

Quality に適用

  1. Edit → Project Settings → Quality
  2. 上にある Quality Level(Very Low / Low / Medium / High / Very High / Ultra など) を1つずつクリックして3を行う
  3. それぞれの Render Pipeline Asset に 生成したURP_2D.asset (Pipeline Asset:本体)を1つずつ設定する

✅ ここを揃えないと「環境によってライトが効いたり効かなかったり」します!


④背景画像を用意する

2D ライトは 描画されているものにしか影響しません
そのため、ここでは「暗さの基準になる仮背景」を用意します。
(※既に背景を用意してある場合は、Material の設定以降だけ確認します)

仮背景オブジェクトの作成

  1. Hierarchy → Create Emptyを追加する
  2. 名前を Background等 にする
  3. Add ComponentでSprite Renderer を追加
  4. 適当な四角い Sprite を設定
    (白1pxでもOK、拡大して画面全体を覆うようにする)

Material の設定

Sprite Renderer
Material:Sprite-Lit-Defaultに変更する(重要)

※ Sprites-Default のままだと
URP 2D Light が一切効かないため、変更します。


仮背景のおすすめ設定

  • Color:少し暗いグレー or 紺
  • Sorting Layer:BG(なければ Default でもOK)
  • Order in Layer:-10 など

⑤全体の暗さ設定をする

全体を暗くする(Global Light 2D)

  • Hierarchy で
    GameObject → Light → 2D → Global Light 2Dを追加します
  • Inspector で調整(例)
    • Color:黒ではなく濃い紺(夜っぽく)
    • Intensity:0.2〜0.4 くらい

💡黒 (#000000) にすると見えなくなりすぎるので、濃い青が扱いやすいです。

⑥プレイヤー周りだけ照らす

  1. Player の子オブジェクトとして
    Light → 2D → Spot Light 2Dを追加します
  1. 調整例
    • Intensity:0.5〜1
    • Inner Radius:0.5〜2
    • Inner / Outer Spot Angle :360〜360(光が円形になります)
    • Color:白〜少し黄み

💡子にしておけば、プレイヤーが動いても常に追従します(スクリプト不要)。

⑦動作確認

➡️プレイヤーの周りだけ常時光を照らすことが出来ました!


個人的にハマった点

URPもインストール済、背景も用意した、プレイヤーの周りだけ照らす処理も作成したのに何も変化がない、、🫠
以下は個人的にハマった点です。
上手くいかない場合は以下を確認してみてください。


Sprite の Material が Sprites-Default のまま

先ほど「④背景画像を用意する」の章でも触れましたが、ライトを受けるにはSpriteを光の影響を受けるようにする必要があります。

背景スプライト(SpriteRenderer)の Material が

  • Sprites-Default(光を無視する)
  • Sprite-Lit-Default(光の影響を受ける)

で挙動が変わります。

やること

背景オブジェクトを選択 → Sprite Renderer → Material

  • Sprite-Lit-Default(URP 2D)

に変更します。


Sprite-Lit-Default にしたら真っ暗になった

これはバグではなく 正常挙動です。

Sprite-Lit-Default は “光がないと黒” になります。
つまり:

  • Global Light をOFFにした
  • そもそもLight 2Dが置かれていない
    光源ゼロ
    全部真っ暗

という状態です。

対処

  • Global Light をONにして、Intensityを弱めに
  • プレイヤーのPoint Lightの範囲を広げる
  • (必要なら)背景専用に弱いGlobal Lightを追加する

まとめ

URPの2Dライトを使うと、

  • 夜の雰囲気
  • プレイヤー中心の視界演出
  • 探索・緊張感

が一気に作れます💡

この記事では、URP(Universal Render Pipeline)の2Dライトを使って、背景全体を暗くしつつ、プレイヤーの周りだけを明るく照らす方法を解説しました。
最後まで読んでいただきありがとうございました。

この記事が少しでもゲーム制作に役立てたら嬉しいです🦖

コメント

タイトルとURLをコピーしました