Unity URPのライトを使ってプレイヤーを照らしてみる

URPを使って2Dゲームにもライトを導入してみたいと思います。
具体的にはライトを使ってプレイヤーの周りを明るくする方法になります。。
この技を使ってるゲームはこちらで遊べます。

前回似たようなことをマスク処理で行いプレイヤーの周りだけを見えるようにしました。

こちらよりも断然照らさている感があります(ライトなので当然といえば当然ですが。。)。

やることは非常にシンプルです。
ただURPのインポートや設定が慣れないと少しわかりにくいかもしれません。
私もやり方を忘れてしまいます。。
ではUnityを起動させ作業していきましょう。新しい2Dプロジェクトを作成します。
今回は16:9の画面サイズで作っていきます。

プレイヤーを用意する

前回のマスク処理の時と同じようにプレイヤーを用意しましょう。
やることは前回の「プレイヤーを用意し動かす」と同じなのでこちらの記事を参考にしてみて下さい。

プレイヤーを動かすことはできたでしょうか?
それでは次に行きましょう。

パッケージマネージャーからURPをインポート

続いてURPをプロジェクトにインポートします。
下記の手順で行って下さい。

  1. メニューのWindowからPackage Managerを開く
  2. パッケージマネージャー左上プルダウンから「UnityRegistry」を選択
  3. パッケージマネージャー右上の検索に「univer」と入力
  4. Universal RPが左側に出てくるので選択しInstall

Package Managerを開く
UnityRegistry選択
univerと入力
Universal RPのインストール
上の画像のような順番です。
インポートには時間がかかるかも知れませんので終わるまで待ちましょう。
無事にURPはインポートできたでしょうか。

プロジェクトの設定をしていく

では続きをやっていきましょう。
すこしややこしいのですが、キャプチャを参考に順番に行って下さい。
まずはPipelineAssetというものの設定を行います。
Projectの+ボタンをクリックし、Rendering → Universal Render Pipeline → Pipeline Asset (Forward Renderer)と選択してください。

PipelineAssetの選択

すると「UniversalRenderPipelineAsset」と「UniversalRenderPipelineAsset_Renderer」というアセットが生成されると思います。
生成されたアセットの確認

次にプロジェクトの設定を変更していきます。
EditからProject Settings…を選択しセッティング画面を出します。
Project Settings
左側のメニューの「Graphics」を選択、右側の上部にある「Scriptable Render Pipeline Settings」に先程つくった「UniversalRenderPipelineAsset」を設定します。
UniversalRenderPipelineAssetを設定

これができたらProject Settingsの画面は閉じても大丈夫です。
続いてProjectの+ボタンをクリックし、Rendering → Universal Render Pipeline → 2D Renderer (Experimental)と選択してください。
2D Renderer (Experimental)選択
選択すると「New 2D Renderer Data」というアセットが生成されたと思います。
New 2D Renderer Dataアセットの確認
最後にUniversalRenderPipelineAssetを選択しInspectorのRenderer Listに今作成したNew 2D Renderer Dataを設定して下さい。
UniversalRenderPipelineAsset選択
Inspector
New 2D Renderer Dataを設定

これで2Dライトを使う準備ができました。
お疲れさまでした。

グローバルライトを設置してみる

では早速ゲームにライトを設置してみましょう。
Hierarchyを右クリックしLight → 2D → Global Light 2D(Experimental)を選びましょう
Global Light 2D(Experimental)を選択するとGlobal Light 2Dというオブジェクトが生成されました。
Global Light 2D確認これがゲーム全体を照らすライトになります。
ではこれをオフにすると画面が暗くなるんじゃないか?と思いきや何も変化ありません。
それはライトの設定前に作成したPlayerのMaterialがライトに対応していないSprite-Defalutになっているからです。
Sprite-Defaultマテリアルは2Dライトの影響を受けないらしいのです。
そこでライトが影響するSprite-Lit-Defaultに変更しましょう。
PackagesフォルダーからUniversal RP → Runtime → Materials と進むとSprite-Lit-Defaultというマテリアルが見つかると思います。

Sprite-Lit-Defaultマテリアル
それをPlayerのSpreite RendererのMaterialにアタッチして下さい。
Spreite RendererのMaterialにアタッチ

さあこれでGlobal Light 2Dをオフにしたらまっくらになるだろう!と思って実行してみるとプレイヤーだけが真っ黒になりました。
Global Light 2Dをオフ

これはライトの影響を受けるオブジェクトがプレイヤー以外に何も設置されていないのでこのようになってしまいました。
そこで背景になるオブジェクトを設置してみましょう。
Hierarchyから2D Object → Sprites → Square を選択して四角のオブジェクトを作成します。
ライトの設定後に作られたSprite Rendererはデフォルトでライトの影響を受けるSprite-Lit-Defaultマテリアルが最初から設定されています。
このオブジェクトのスケールを調整し画面いっぱいに広げ、地面っぽい色にしてみます。
名前はBakcgroundにでもしておきましょうか。
Bakcgroundを作成

これでGlobal Light 2Dをオフにすると全体のライトが消えて真っ暗な状態になるのがわかるかと思います。
Global Light 2Dをオフにして再確認

最後に今回やりたかったプレイヤーの周りを照らす実装をしていきましょう!

ポイントライトを設置しプレイヤーを照らす

いよいよ本題です。
HierarchyのPlayerを右クリックし、Light → 2D → Point Light 2D(Experimental)を選択しPlayerの子要素にPoint Light 2Dを生成しましょう。
Global Lgiht 2Dオブジェクトがオフになっている状態ですとすでにGameView上でプレイヤーの周りだけがぼんやり明るくなっているのが確認出来るかと思います。
Point Light 2Dの確認
このままだと少し範囲が狭いのでもうちょっと見える部分を広げてみましょう。
Point Light 2Dを選択しInspectorのLight 2D (Experimental)コンポーネントにあるOuter Radiusの値を大きくしてみましょう。
するとプレイヤーを照らしていた円の範囲が広がりました。

他にも設定をいじれるようですので色々いじって試してみて下さい。

また2Dライトの種類はGlobalやPointの他にもFreeform,Sprite,Parametricがあります。
詳しくは英語になりますがUnityの公式ページのリンクを載せておきます。

前回のマスク処理よりも設定は複雑ですが、2Dライトは今回の用途以外でも使いみちはありそうですよね。
是非試して見て下さい。

関連記事

最後までご覧頂いてありがとうございました。