強火で進め

このブログではプログラム関連の記事を中心に書いてます。

【Unity】 Shadow Caster 2D について

動作検証環境

  • Unity 2021.3.12f1
  • Universal RP 12.1.7

Shadow Caster 2D について

Shadow Caster 2D は URP で2D向けのライトを使った時に影を付けたい時に使うコンポーネントです。

Shadow Caster 2D の Inspector の項目について解説します。

前提として影を出す為には以下の準備が必要です。

  1. シーンにライト(Lighit 2D コンポーネントの付いた Game Object )を置く。
  2. Light 2D コンポーネントの Shadows の Strength にチェックを付ける。

特に 2. は忘れがちなので注意して下さい。

Use Renderer Silhouette

有効な時、スプライトのシルエットを元に影が表現されます。

この説明だけだと分かりづらいと思うので、チェックした時にどの様に違いが出るかを説明します。

Casts Shadows にチェックをした時に使える Edit Shape を使って、

Shape の設定をこの様にした時の挙動を説明します。なお、編集作業をした後に Casts Shadows のチェックは外しています(外した後も Shape の形状情報は継続して保持されています)。

Self Shadows がチェックされている時

Use Renderer Silhouette にチェックがされていないので Shape で指定した範囲のみ影が描画され、一部の Shape からはみ出ている部分が影の対象外となっている為に明るくなっているのが確認できます。 Shape の中に含まれているキャラクターの頭部も影の対象となっている事が確認できます。

Self ShadowsUse Renderer Silhouette がチェックされている時

Use Renderer Silhouette にもチェックをすると Shape は使われず、スプライトのレンダリング部分に影が落ちる形となります。全体に綺麗に影が付いているのが確認できます。また、頭部はスプライトの透過部分である為、影の処理の対象外となっています。

まとめると Use Renderer SilhouetteSelf Shadows にチェックがされている時のみに効果が有るパラメータです。その為、頭の中ではこの様な UI になっていると思っていると分かりやすいです。

Castes Shadows

有効な時、 Shape の形状による光の遮蔽により作られる影が描画されます。

Use Renderer Silhouette にチェックが付いていた場合でも Shape の形状により影が描画されます。

Self Shadows

有効な時、スプライトへの影を描画します。有効な時のレンダリング結果は Use Renderer Silhouette で紹介済みなのでそちらを参照下さい。

Target Sorting Layers

スプライトが存在するレイヤーを指定します。ここで選択したレイヤーが Light 2DTarget Sorting Layers で指定選択されているレイヤーに含まれている場合にはスプライトは影響を与える対象として扱われます。

Target Sorting Layers の活用例

ここで例としてプレイヤーのキャラクターの影だけを背景に落としたいというシーンを作る方法を解説します。

まず、準備としてこの様にレイヤーを準備します。

スプライトを準備し、以下の様にレイヤーを設定します。

  • 背景のスプライト → Background レイヤー
  • プレイヤーのスプライト → Player レイヤー
  • 敵のスプライト → Enemy レイヤー

シーンにライト( Light 2D )を追加し、 Light TypeGlobal 以外(※)を選択します。 Target Sorting LayersBackgroundPlayer をチェックします。

※ Light Type が Global の場合にはここの設定は考慮されず、常にすべてのレイヤーに対して影響を与えます。

プレイヤーのスプライトには Shadow Caster 2D を追加し、 Target Sorting LayersBackgroundPlayer をチェックします。

するとこの様に背景に影が落ちる描画となります。

ここで「Shadow Caster 2D の Target Sorting Layers の設定は Player にだけチェックをするので良いのでは?」とも思いますがその場合にはこの様なレンダリング結果になります。影が上手く出ない場合には背景のレイヤーにちゃんとチェックが入っているか確認して下さい。

表現例

画面の手前から奥にライトが照らされている表現

スプライトに手前からライトが当たっているのでスプライト自身には影を出させたくないので Self Shadows にはチェックをしていません。

画面の奥から手前にライトが照らされている表現

自分自身も影の中に入っている状態になるので Self Shadows にチェックを付けます。

なお、 Use Renderer Silhouette のチェックを外した場合にはこの様なレンダリング結果となります。一見、問題無いようにも見えますが今回のスプライトでは頭部が透過しています。その為、チェックをしている状態の方が正しいレンダリング結果となります。

【Unity】 Light Blend Styles について

動作検証環境

  • Unity 2021.3.12f1
  • Universal RP 12.1.7

Light Blend Stylesについて

Light Blend Styles はライトがシーン内のスクリプトにどの様に影響を与えるかを指定します。定義は Renderer 2D Data のアセットに記述されています。検索で見つけたい場合には Project ビューの検索窓で t:Renderer2DData を入力。

設定する項目は以下となります。

Property Function
Name Light2D のブレンド スタイルを選択するときに表示される名前。
Mask Texture Channel このブレンドスタイルをスプライトに適用するときに使用するマスクチャネルを指定。
Render Texture Scale このブレンドスタイル用に作成された内部レンダリングテクスチャのスケール。値を小さくするとパフォーマンスが向上するが見た目のクオリティは下がります。
Blend Mode このブレンドスタイルが選択されたときに Light2D が使用するブレンド モード。

ここで定義したものが Light 2D の Blend Style の項目で選択できます。

Blend Mode

Blend Mode には以下のものが設定可能です。

■ Multiply(乗算)

■ Additive(加算)

色の加算が行われるので白色に近づく変化が出ているのが確認できます。

■ Subtractive(減算)

色の減算が行われるので黒色に近づく変化が出ているのが確認できます。 このモードは照らすと暗くなるという通常とは逆の挙動をするライトを使ったゲームを作りたい時などに使うと良いでしょう。

【Unity】 Light 2D について

動作検証環境

  • Unity 2021.3.12f1
  • Universal RP 12.1.7

Light 2D について

Light 2D は URP の環境で 2D ライトを使いたい時に使うコンポーネントです。

Light 2D の Inspector の項目について解説します。

Light Type

Freemform/Sprite/Spot/Global のいずれかを設定可能。

Freeform

頂点を編集して、自由な形状設定できるライトです。

Sprite

指定したスプライトのアルファ値で形状を作るライト。

この様なスプライトを準備して、

この様なライトを作る事ができます。

Spot

懐中電灯やスポットライトの様な形状のライト。照らす範囲を角度で指定可能。

新規作成時にはこの様に全方向を照らす設定に成っていますが、

照らす範囲を調整する事で懐中電灯を持ったキャラクターを上から見ている様な表現も可能です。

Global

全体を照らすライトです。

Radius Inner

内側の半径を指定。この半径内の光は Intensity で設定した値の強さで光ります。

Radius Outer

外側の半径を指定。内側の半径( Radius Inner の値)からここで指定した値に近づくにつれて光の強さは徐々に減衰し、外側の半径の位置ではゼロとなります。

Inner / Outher Spot Angle

内側の角度と外側の角度を指定。内側の角度内の光は Intensity で設定した値の強さで光る。外側の角度内の光の強さ外側に向かうにつれて徐々に減衰し、外側の角度の部分でゼロとなります。

Color

ライトの色を指定。

Intensity

光の強さ。

Falloff

このライトの減衰領域を調整します。減衰値が大きいほど減衰範囲が広くなります。

Falloff Stength

フォールオフ カーブを調整して、このライトの境界の柔らかさを制御します。値が小さいほど境界がくっきりと出ます。大きいほど、境界は柔らかくなります。

Target Sorting Layers

Sorting Layers の中から光の影響を与えるレイヤーを指定。現在の Sorting Layers の状態はEdit Layers…から遷移できる画面で確認できます。

活用例はこちらの動画の5:20分辺りが参考になります。

なお、 Light TypeGlobal の場合にはこの設定は無視され、常にすべてのレイヤーに影響を与えます。

Blending

Blend Style

Blend Style は Renderer 2D Data というアセット内の Light Blend Styles という項目に定義されている値(※)を選択し、ライトがシーン内のスクリプトにどの様に影響を与えるかを指定します。詳しくはこちらを確認下さい。

※赤枠の部分で設定されています。

Light Order

ライトがレンダリングされる順番を設定。数値が小さいものが先にレンダリングされます。

次に紹介する Overlap Operation の設定が Alpha Blend の時に違いが出ます。

■青いライトの方が Light Order の数値が小さい時

■青いライトの方が Light Order の数値が大きい時

Overlap Operation

このライトが他のライトのレンダリングに重なる時のレンダリング方法を設定。

AdditiveAlpha Blendのいずれかを設定。

扇形のスポットライトを2色用意して、両方に同じ設定をした時の描画結果。

■ Additive

■ Alpha Blend

Shadow

Strength

影の強さを設定。

スプライトに Shadow Caster 2D コンポーネントを追加し、Castes Shadows を有効にすると影が描画されます。その時の影の強さに影響します。

設定可能な値は0(光が遮断されない)から1(すべての光を遮断)。

Volumetric

Intensity

このライトの上に追加でブレンドされるライトボリュームの強さを調整します。

Intensity にチェックをしていない時。

Intensity にチェックをした時。

Shadow Strength

ライトボリュームによる影の強さを設定。

Normal Map

Quality

Disable(無効)、Fast(高速)、Accurate(正確)のいずれかを設定。

扇形のスポットライトを当てた時のレンダリング結果。

■ Disable

■ Fast

■ Accurate

Distance

Tooltips には

Adjusts the z-axis distance of this light and the lit Sprite(s). このライトと点灯しているスプライトのZ軸方向の距離を調整します。

Do note that this distance does not Transform the position of this light in the Scene. この距離により、シーン内のこのライトの位置を変えないことに注意してください。

と有りますが、実際の挙動としては 0 を設定した時にライトの影響をスプライトが受けない距離となっている様です。そして、数値を大きくするほど、ライトの影を受ける様です。

【Unity】 URP での 2D ライト

動作検証環境

  • Unity 2021.3.12f1
  • Universal RP 12.1.7

URP での 2D ライトについて

URP( Universal Render Pipeline )を使っている時に使う 2D ライト周りについて解説をします。
docs.unity3d.com

URP で 2D ライトを使いたい場合には Light 2D というコンポーネントを使います。こちらは URP のパッケージがインストール済みで有れば既に利用可能な状態になっています。

途中から URP に変更した場合には色々と作業が発生するので取り敢えず試してみたい場合には 2D (URP) のテンプレートを使ってプロジェクトを新規作成する事をオススメします。

Light 2D についてはこちらで解説します。

影(陰)の表現を使いたい場合にはライトとは別に影のための Shadow Caster 2D というコンポーネントを使う必要が有ります。
Shadow Caster 2D についてはこちらで解説します。

公式の情報

サンプルプロジェクト

github.com

Tails of Iron というゲームの開発者による解説

resources.unity.com
www.youtube.com

Unity公式が PLATEAU のチュートリアルを公開

PLATEAU は国土交通省が主導している日本全国の3D都市モデルの整備・オープンデータ化プロジェクトです。

PLATEAU [プラトー] | 国土交通省が主導する、日本全国の3D都市モデルの整備・オープンデータ化プロジェクト
https://www.mlit.go.jp/plateau/

この PLATEAU のデータを Unity で使うチュートリアルが公開されました。

www.youtube.com

www.youtube.com

www.youtube.com

Unity Hub の CLI (コマンドラインでの処理)の使い方

Unity Hub はバージョン 2.1 以降は CLI で様々な処理が使えます。
f:id:nakamura001:20211105181128p:plain
unity3d.com

ヘルプの確認方法

どんな事ができるのかはヘルプで確認できます。
Windows の場合
Unity Hub がインストールされているフォルダに移動して以下のコマンドを実行。

"Unity Hub.exe" -- --headless help

デフォルトの場所にインストールしている場合は以下のコマンド。

"C:\Program Files\Unity Hub\Unity Hub.exe" -- --headless help

Mac の場合
以下のコマンドを実行。

/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless help

Unity Hub 2.4.5 でヘルプコマンドを実行した場合の結果はこちら。

Commands:
	editors
		description: list the releases and installed editors
		alias: e
		example: Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless editors -r
		options:
			[default]		list of available releases and installed editors on your machine combined
			--releases|-r 	only list of available releases promoted by Unity
			--installed|-i 	only list of installed editors on your machine

	install-path
		description: set/get the path where the Unity editors will be installed
		alias: ip
		example: Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless ip -s /Applications/Unity/Hub/Editor/
		options:
			--set|-s <path> 	set the install path to the given path
			--get|-g 			returns the install path

	install
		description: installs a new editor either from the releases list or archive
		alias: i
		example: Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install --version 2019.1.11f1 --changeset 9b001d489a54
		options:
			--version|-v <version> 		editor version to be installed (e.g. 2019.1.11f1) - required
			--changeset|-c 	<changeset> changeset of the editor if it is not in the release list (e.g. 9b001d489a54)
										- required if the version is not in the releases. see editors -r
			--module|-m <moduleid>		see install-modules for more information

	install-modules
		description: download and install a module (e.g. build support) to an installed editor
		alias: im
			example: Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install-modules --version 2019.1.11f1 -m ios -m android
		options:
			--version|-v <version> 	version of the editor to add the module to - required
			--module|-m  <moduleid> the module id. The followings are the available values depending on version. You can specify multiple values.
									Documentation: documentation
									Standard Assets: standardassets
									Example Project: example
									Android Build Support: android
									iOS Build Support: ios
									tvOS Build Support: appletv
									Linux Build Support: linux-mono
									SamsungTV Build Support: samsung
									Tizen Build Support: tizen
									WebGL Build Support: webgl
									Windows Build Support: windows
									Facebook Gameroom Build Support: facebook-games
									MonoDevelop / Unity Debugger: monodevelop
									Vuforia Augmented Reality Support: vuforia-ar
									Language packs: language-ja, language-ko, language-zh-cn, language-zh-hant, language-zh-hans
									Mac Build Support (IL2CPP): mac-il2cpp
									Windows Build Support (Mono): windows-mono
									Android SDK & NDK Tools: android-sdk-ndk-tools
									OpenJDK: android-open-jdk
									Lumin OS (Magic Leap) Build Support: lumin
			--childModules|--cm     automatically installs all child modules of selected modules

使い方

使い方としては先程のヘルプを表示する時のコマンド文の help の部分を実行したいコマンドに差し替える事で希望するコマンドを実行できます。

Windows の場合
Unity Hub がインストールされているフォルダに移動して以下のコマンドを実行。

"Unity Hub.exe" -- --headless (ここに実行したいコマンド)

Mac の場合
以下のコマンドを実行。

/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless (ここに実行したいコマンド)

ここでは例としてインストール済みの Unity 一覧を取得してみます。

先程のヘルプを確認するとコマンドは editorsエイリアスe 。オプションは --installed で、短縮の場合は -i だと分かります。

そのため、実行すべきコマンドはこちらになります。
Windows の場合
Unity Hub がインストールされているフォルダに移動して以下のコマンドを実行。

"Unity Hub.exe" -- --headless e -i

Mac の場合
以下のコマンドを実行。

/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless e -i

「Unknown managed type referenced: [UnityEditor.CoreModule] UnityEditorInternal.Profiling.CPUProfilerModule」というエラーが出た時の対処法

該当する Issue Tracker のページはこちら。

Unity Issue Tracker - An error is thrown after re-building a library of previous Editor version project when the Profiler of 2020.2 project is opened
https://issuetracker.unity3d.com/issues/an-error-is-thrown-after-re-building-a-library-of-previous-editor-version-project-when-the-profiler-of-2020-dot-2-project-is-opened

修正済みの様なので修正済みのバージョンを使用するかコメント欄に有る「Library フォルダに有るファイル "CurrentLayout-default.dwlt" を削除して Unity エディタを再起動」で対応。