以下の内容はhttps://indie-du.com/entry/2016/09/08/190000より取得しました。


Unity : uGUIのImageなどのタップイベントを検出

ButtonコンポーネントにはデフォルトでClickイベント検出機能がありますが、Imageとかはどうやって検出するのか。

インスペクタから

EventTriggerコンポーネントを追加します。

f:id:sugar_affordance:20160908100910p:plain

Add New Event Type からイベントを選択すると新規追加できるので、イベントを受け取りたいGameObjectをドラッグアンドドロップ
呼び出したいメソッドをリストから選択します。

f:id:sugar_affordance:20160908100453p:plain

スクリプトの関数だけでなく、各種コンポーネントも直接アクセスできますね。

コードで

インペクタでちまちまやってられん! て場合はコードでいじることもできます。

EventTrigger にコールバックを設定する方法と、IPointerDownHandler などのインターフェースを実装する方法があります。

EventTriggerにコールバックを登録

英語ですが下のサイトでサンプルコードがあったので引用。

answers.unity3d.com

EventTrigger.Entryクラスのインスタンスを生成し、検出したいイベントの種類をeventIDプロパティに設定します。(EventTriggerType型)
検出時に呼び出したいメソッドは、callbackプロパティのAddメソッドで追加します。

インスタンスをEventTriggerのtriggerプロパティにAddしてやれば完成です。

using UnityEngine.EventSystems; を加えるのを忘れずに。

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;

public class ClickDetector : MonoBehaviour {

    [SerializeField]
    Image ClickImage;

    void Start () {
        EventTrigger trigger = ClickImage.GetComponent<EventTrigger> ();
        EventTrigger.Entry entry = new EventTrigger.Entry ();

        // なんのイベントを検出するか
        entry.eventID = EventTriggerType.PointerClick;
        // コールバック登録
        entry.callback.AddListener(Clicked);

        // EventTriggerに追加
        trigger.triggers.Add(entry);
    }

    void Clicked(BaseEventData eventData) {
        Debug.Log ("Clicked");
    }
}

docs.unity3d.com

IPointerDownHandler インターフェースを実装する

IPointerDownHandler の他にも IPointerUpHandler、IDragHandler とかいろいろあります。

EventSystems.IPointerDownHandler - Unity スクリプトリファレンス

IPointerDownHandler を実装する場合は IPointerUpHandler も同時に実装する必要がある ので注意。

using UnityEngine;
using UnityEngine.EventSystems;

public class ClickDetector : MonoBehaviour,
IPointerDownHandler,
IPointerUpHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        // ボタンが押された
    }


    public void OnPointerUp(PointerEventData eventData)
    {
        // ボタンが離された
    }

}

EventTriggerと併用するのがいいと思います。

というのもEventTriggerは後ろの要素に イベントが伝播しない ため、
例えばスクロールできるリストビュー内のセルにEventTriggerをつけると、セルを押してそのままドラッグという操作ができないです。

そういう場合はセルに対してEventTriggerではなく上記のインターフェースを実装すればスクロールできます。




以上の内容はhttps://indie-du.com/entry/2016/09/08/190000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14