本日は Unity の小ネタ枠です。
RaycastTargetの設定を使ってUIへのクリックイベントの取得を制御する方法について記事にします。
RaycastTarget
RaycastTarget 設定は Unity の凡その UI コンポーネントで設定可能なレイキャストの受け取り可否です。
本設定が有効な UI コンポーネントはポインターなどのレイキャストを受け取ることが可能になります。
docs.unity3d.com
サンプルコード
レイキャストの受け取りを確認するため、以下のサンプルコードを用意しました。
IPointerClickHandler を実装することで、オブジェクトにクリックイベントが渡ったことをログ出力するだけのコンポーネントです。
・RaycastTargetTest.cs
using UnityEngine; using UnityEngine.EventSystems; public class RaycastTargetTest : MonoBehaviour, IPointerClickHandler { public void OnPointerClick(PointerEventData eventData) { Debug.Log($"Clicked {this.gameObject.name}"); } }
RaycastTargetが有効な場合
適当な Image オブジェクトを新規作成してサンプルコードを設定します。
デフォルトの Image オブジェクトは RaycastTarget の設定が有効になっています。
この状態でシーンを再生して Image オブジェクトの箇所をクリックすると、以下の通りクリックイベントが発生します。
RaycastTargetが無効な場合
次に RaycastTarget の設定を無効にした場合を試してみます。
この状態でシーンを再生した場合、Image オブジェクトの箇所をクリックしてもクリックイベントが発生しません。
Raycastの遮蔽
RaycastTarget が有効な場合、そのオブジェクトで Raycast を遮蔽するようになります。
例えば、以下のような2つの RaycastTarget が有効な重なった Image オブジェクトを用意します。
このとき、重なった部分をクリックすると前面に表示されている Image オブジェクトでのみクリックイベントが発生します。
次に、前面の Image オブジェクトの RaycastTarget を無効にしてみます。
こうすると、重なった部分をクリックすると後ろ側に表示されている Image オブジェクトのクリックイベントが発生します。
このように RaycastTarget が有効な場合はそこで Raycast が遮蔽されます。