簡単そうで意外と面倒だったのでメモを残しておきます。
(もしかしたら、もっと簡単な解法があるかもれません)
uGUIのButtonはonClickイベントなら素直に設定できるのですが、マウスオーバー(OnPointerEnter)など他のイベントは同様の方法で追加できない模様。
前段階としてButtonにEvent Triggerコンポーネントを追加します。
スクリプトでAddComponentしても良いですが、今回はInspector上で追加。
// 事前にButtonにEventTriggerコンポーネントを追加しておく var trigger = button.GetComponent<EventTrigger>();
手順1を行ってないとここで、変数triggerがnullになります。
取得したEventTriggerに登録したいイベントの設定を行います。
イベントの設定はEntryクラスを利用します。
// 登録するイベントを設定する
var entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerEnter;
// リスナーは単純にLogを出力するだけの処理にする
entry.callback.AddListener((data) => { Debug.Log("PointerEnter"); });
最後に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