読者です 読者をやめる 読者になる 読者になる

いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU
{スポンサーリンク}

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

Unity uGUI

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

インスペクタから

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

f:id:sugar_affordance:20160908100910p:plain

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

f:id:sugar_affordance:20160908100453p:plain

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

コードで

インペクタでちまちまやってられん! て場合はコードでいじることもできます。
英語ですが下のサイトでサンプルコードがあったので引用。

answers.unity3d.com

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

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

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

Amazon.co.jpアソシエイト