Unityで、Shadow Caster 2D と Light 2D で生成した影が別のGameObject にも表示されてしまうのを防止する手順を備忘録的に投稿します。
屋根にも表示されてしまう影
言葉で書くと難しいですが、こんな感じになる現象です。
建物のように[SpriteRenderer]でブロック(水色)を作って、Shadow Caster 2D コンポーネントで、プレイヤーからの光源で影が発生するようにします。
何もない時には違和感なく影が地面に落ちます。
しかし、屋根に見立てた[SpriteRenderer]ブロック(黄色)を載せると、下に生成された影が透けるように表示されてしまう現象に困っていました。

レイヤーを使って影を非表示
[SpriteRenderer]は影を表示させないレイヤー機能が使えます。
具体的には次の手順でレイヤー機能の設定を行います。
1. 影を表示させたくない[SpriteRenderer]を選択して[インスペクター]画面で[Sorting Layer]設定を選択して表示されたメニューで[Add Sorting Layer]を選択します。
2. 表示された[Tags and Layers]画面で[Sorting Layers]の[+]をクリックして追加されたリストに “Roof” 等の名前を付けて追加します。
3. 再度[SpriteRenderer]を選択して[インスペクター]画面で[Sorting Layer]を選択して、追加したレイヤー[Roof]に変更します。
2. Playerなど影を落とすための[Light 2D]などのコンポーネント[Target Sorting Layers]を選択して表示されたリストから[Roof]を除外(チェックを消す)にします。
3. 実行すると[Sorting Layer]に “Roof” を設定した [SpriteRenderer](黄色のブロック)が光源の対象から除外され影が表示されなくなります。
まとめ
今回はUnityを使って、Shadow Caster 2D と Light 2D で生成した影が別のGameObject にも表示されてしまうのを防止する手順について書きました。
影を受け取る[SpriteRenderer]の[Sorting Layer]と[Light 2D]など光源側の[Target Sorting Layers]に同じレイヤーを設定することで、影を受け取る対象を選択することが可能です。
Unityで光源を受けた際の影を受け取るGameObjectを限定したい場合の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。





