前提・実現したいこと
UnityのEventTriggerを使用して、クリックされたゲームオブジェクトの参照を他のクラスへ通知したいと考えております。
試したこと
・ ヒエラルキー上に、EventSystemを追加。
** Cameraオブジェクト: **
・ Physics 2D Raycasterコンポーネントを追加
** 通知される側のゲームオブジェクト: **
・ 以下のスクリプトをアタッチ
C#
1using UnityEngine; 2using UnityEngine.EventSystems; 3 4public class EventTriggerTest : MonoBehaviour 5{ 6 public void Event(PointerEventData data) 7 { 8 Debug.Log($"Clicked:{data.pointerPress.name}"); 9 } 10}
** 通知する側のゲームオブジェクト(Spriteオブジェクト): **
・ コライダーを追加
・ SpriteにEventTriggerをアタッチ
・ Event Typeとして、PointerClickを選択
・ Runtime Onlyの下にあるボックスに、通知される側のゲームオブジェクトをドラッグ&ドロップ
以上の設定後、EventTriggerの関数を、EventTriggerTest.Event(PointerEventData data)を選択しようと思っても、表示されませんでした。
(もちろん、引数なしの関数を作成すると、選択できます。)
以下の画像中に「Pointer Click()」と書かれておりますが、その中には引数がありません。
他の方は、引数があるみたいです。(https://teratail.com/questions/217932)
これが、考えられる原因となりますでしょうか。
(バージョンは、2019.2.6f1を使用しております。)
補足情報
他の方法として、以下の方法は思いついております。
・ 以下のスクリプトを通知する側のゲームオブジェクト(Spriteオブジェクト)にアタッチ。
・ デリゲートを用いて、他のクラスへ通知。
C#
1using System; 2using UnityEngine; 3using UnityEngine.EventSystems; 4 5public class EventTriggerTest1 : MonoBehaviour, IPointerClickHandler 6{ 7 public Action<PointerEventData> OnClick; 8 9 public void OnPointerClick(PointerEventData eventData) 10 { 11 if(OnClick != null) 12 { 13 OnClick(eventData); 14 } 15 } 16}
依存関係を極力作らないために、デリゲートを用いずにEnentTriggerの機能だけで実現できたらと考えております。
大変恐れ入りますが、ご回答お待ちしております。
そもそも考え方が間違えている等あればご指摘いただければ幸いでございます。
何卒よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/02 08:31
退会済みユーザー
2019/11/02 09:29