簡単そうで意外と面倒だったのでメモを残しておきます。
(もしかしたら、もっと簡単な解法があるかもれません)
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