[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);
    }
}

実行する

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

補足

IPointerハンドラは全て uGUI と同じように使うことができます。
なんらかの理由で反応させたくない場合は Physics RaycasterEvent MaskNothing にします。

処理速度は Ray より速い、らしい? 必要に応じて各自確認してください。
結局 EventSystems も似たような処理を内部で行っていますが、記述が一か所に集約する分、効率はよさそうです。

また、uGUI と同じインターフェイスが使えるので、覚えることが少ないのはいいですね!

返信を残す

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

CAPTCHA