MRが楽しい

MRやVRについて学習したことを書き残す

RaycastTargetの設定を使ってUIへのクリックイベントの取得を制御する

本日は 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 が遮蔽されます。

RaycastTargetの設定箇所

RaycastTarget の設定箇所はコンポーネントによって異なります。
例えば TextMeshPro の Text コンポーネントでは[Extra Settings]欄の中に RaycastTarget の設定があります。