[unity2020]EventSystem で 3D オブジェクトのクリックを検出

3D オブジェクトがクリックされたかどうか検出する方法として、よくあげられているのは Ray を飛ばす方法ですが、実は uGUI と同じ方法でもクリックを判定することが出来ます

unity 4.6 以前は Ray を飛ばす方法しかなかったようです。さすがに今、4.6 を現役で使用しているプロジェクトはないと思いますが…。

EventSystem を配置する

New Input System を使用

カメラに Physics Raycaster を追加する

クリック判定するオブジェクトに、以下のスクリプトを張り付ける

using UnityEngine;
using UnityEngine.EventSystems;

public class ClickObject: MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
    // クリックイベント
    public void OnPointerClick(PointerEventData eventData)
    {
        gameObject.transform.eulerAngles = new Vector3(60, 0 0);
    }

    // マウスカーソルが Cube を差した
    public void OnPointerEnter(PointerEventData eventData)
    {
        gameObject.transform.eulerAngles = new Vector3(0, 30 0);
    }

    // マウスカーソルが Cube から外れた
    public void OnPointerExit(PointerEventData eventData)
    {
        gameObject.transform.eulerAngles = new Vector3(0, 0 0);
    }
}

実行する

マウスカーソルをキューブに合わせたり、クリックすると回転します。

特定の3Dオブジェクトのみ判定しない

uGui の Raycast Target のように、特定の 3D オブジェクトだけ反応させたい場合、Physics RaycasterEvent Mask反応させたいレイヤー のみチェックします。
もちろん、全く反応させたくない場合 None を選べば OK です。

処理速度は Ray より速い、らしい? 必要があれば各自確認してください。

uGUI と同じインターフェイスが 3D で使えるのは便利なので、速度リスクがなければこちらに軍配があがるかな、と(勝手に)思っています。
(昔から unity 使ってる人は、慣れてる Ray を使うだろうとも思う)

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA