UnityのUI Buttonのマウスオーバーイベントをスクリプトで追加する

火曜日 , 7, 8月 2018 Leave a comment

 簡単そうで意外と面倒だったのでメモを残しておきます。

 (もしかしたら、もっと簡単な解法があるかもれません)

 

 uGUIのButtonはonClickイベントなら素直に設定できるのですが、マウスオーバー(OnPointerEnter)など他のイベントは同様の方法で追加できない模様。

 

1.EventTriggerをButtonに設定

 

 前段階としてButtonにEvent Triggerコンポーネントを追加します。

 スクリプトでAddComponentしても良いですが、今回はInspector上で追加。

 

2.スクリプト上でEventTriggerを取得

 

// 事前にButtonにEventTriggerコンポーネントを追加しておく
var trigger = button.GetComponent<EventTrigger>();

 

 手順1を行ってないとここで、変数triggerがnullになります。

 

3.登録(Entry)するイベントの作成

 

 取得したEventTriggerに登録したいイベントの設定を行います。

 イベントの設定はEntryクラスを利用します。

// 登録するイベントを設定する
var entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerEnter;

// リスナーは単純にLogを出力するだけの処理にする
entry.callback.AddListener((data) => { Debug.Log("PointerEnter"); });

 

4.EventTriggerにEntryを追加する

 

 最後にEventTriggerにEntryを追加します。

 

// イベントを登録する
trigger.triggers.Add(entry);

 

 マウスオーバーを行いログが出力されれば成功。

 

 

 他にもIPointerEnterHandlerを継承したクラスをアタッチする方法もあるみたいだけど、今回はこちらを選択。

 仕組み的にはButton以外のUIでも使えると思います。

 

 プログラムの全文は以下。

        // EventTriggerテスト
        // 事前にButtonにEventTriggerコンポーネントを追加しておく
        var trigger = button.GetComponent<EventTrigger>();

        // 登録するイベントを設定する
        var entry = new EventTrigger.Entry();
        entry.eventID = EventTriggerType.PointerEnter;
        entry.callback.AddListener((data) => { Debug.Log("PointerEnter"); });

        // イベントを登録する
        trigger.triggers.Add(entry);

 


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です