質問: Physics2D.GetRayIntersectionAll(ray, distance, finalEventMask); ``` ・EventSystemのインスペクターではクリックはとれている模様(クリックすると画像のeligibleForClickはTrueになる)、Objectの検知まではできていない? pointerEnterやpointerPressといったところに通常であればObjectが記載される ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/93d9d6198e8fdd50bbc8280def7f2240.png) ■動作環境 Unity5.6.1 ■追記 理由としましたは、以下速度と汎用性の2点ございます。 ・速度 クリックされてから反応するまでの速度に懸念があるからです。 Buttonコンポーネンの場合、IPointerClickHandlerを実装していますのでこのインターフェイスを継承している点 それをOnPointerClickでEventDataを受け取るところまでは同じなのですが、Buttonの場合Delegateを宣言したクラスのインスタンスに処理を移譲する形でクリックのイベントをとってます。 ですので、Updtateで常にクリック状態をチェックしていたほうが反応は早いと考えました。 ただButtonクラスはvirtualとしてOnPointerClick関数を用意しているのでButtonクラスをそのまま継承したクラスを実装しても同じ結果が得られるかもしれません。 *ただ、ここまでイベントがとれているのであればButtonクラスを使ったものとそうでないもの両方でイベント通知が来なくてはしっくりきませんが。 ・汎用性 ButtonクラスはIPointerClickHandlerしか実装していないため他の通知を取得したい場合に少し不便だと思いました。 具体的には下記のようなものです。この中でドラッグの判定がとれないのは大きいかもしれません。 , IPointerUpHandler , IPointerDownHandler , IPointerEnterHandler , IPointerExitHandler , IDragHandler , IEndDragHandler 以上となります。 よろしくお願いします。 以上です。 よろしくお願いします。
回答: 「汎用性」についてですが、Buttonクラスと同じオブジェクトに以下のようなスクリプトをアタッチするだけで、ドラッグなどの取得が出来るようになります。 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class ButtonEvent : MonoBehaviour, IDragHandler, IPointerUpHandler { public void OnDrag(PointerEventData data) { Debug.Log("OnDrag"); } public void OnPointerUp(PointerEventData data) { Debug.Log("OnPointerUp"); } } ``` また、「速度」についても気になるほどの差は出ないと思います。 「処理を移譲する」といっても、すでに存在するオブジェクトの処理を呼び出すだけなので。 むしろ、処理を追加したことによって、処理が遅くなる可能性すらあります。 Standard Assetsのスマホ向けコントローラーUIでも、UIやEventTriggerの機能を使っているので、Unity公式でそのようなことをしている以上、わざわざ質問文の処理を書く必要性は薄いと思います。