方法
以下のメソッドを追加する。
/// EventTriggerを取り付けて各種イベントリスナーを設定する private void AddEventTrigger(GameObject obj, params EventTriggerType[] types) { EventTrigger et = obj.GetComponent<EventTrigger>(); if (et == null) { et = obj.gameObject.AddComponent<EventTrigger>(); } AddEventTriggerListener(et, types); } /// 各種イベントリスナーを設定する private void AddEventTriggerListener(EventTrigger et, params EventTriggerType[] types) { foreach (var type in types) { EventTrigger.Entry entry = new EventTrigger.Entry { eventID = type }; switch (entry.eventID) { case EventTriggerType.PointerDown: entry.callback.AddListener((eventData) => { OnPointerDown((PointerEventData)eventData); }); break; case EventTriggerType.PointerUp: entry.callback.AddListener((eventData) => { OnPointerUp((PointerEventData)eventData); }); break; case EventTriggerType.Drag: entry.callback.AddListener((eventData) => { OnDrag((PointerEventData)eventData); }); break; default: throw new NotImplementedException("No souch method name"); } et.triggers.Add(entry); } } private void OnDrag(PointerEventData eventData) { // ドラッグ処理 } private void OnPointerUp(PointerEventData eventData) { // ポインター、マウスのアップ時処理 } private void OnPointerDown(PointerEventData eventData) { // ポインター、マウスのダウン時処理 }
使い方
AddEventTrigger()の第一引数にイベントをアタッチしたいオブジェクトを渡す。
第二引数が可変になっているので、
追加したいオプションを渡していく。
AddEventTriggerListener()内のswitchに無いものはその都度追加する。
AddEventTrigger(_btOpenDebugOption.gameObject, EventTriggerType.PointerDown, EventTriggerType.PointerUp, EventTriggerType.Drag);
ただし、ScrollViewのスクロールが反応しなくなる場合がある。
その場合はこの方法は諦める。
代案として
ハンドラーを継承したスクリプトをアタッチする。
using UnityEngine; using UnityEngine.EventSystems; public class ContentClickListener : MonoBehaviour, IPointerDownHandler { public void OnPointerDown(PointerEventData eventData) { // ポインター、マウスのダウン時処理 } }