この記事でのバージョン
Unity 5.3.4f1 Personal
はじめに
uGUIでボタンを作成すると、デフォルトであるイベントはOnClickだけで
そのままではクリックした時(スマホだとタップして指を離した時)にしかメソッドが実行できません。
場合によっては押した瞬間に処理をしたいという事もあると思います。
今回はそんな時のための記事です。
EventTrigger
押した瞬間のイベントを取得したい!みたいな時に使えるのがEventTriggerです。
このEventTriggerをボタンにAddし、Add New Event TypeからPointer Downを追加し、
そこに実行させたいイベントを設定するだけです。
押した瞬間にログを表示すると以下の通り。
ちなみにコードから設定したい場合は以下ような感じになります。
using UnityEngine; using UnityEngine.EventSystems;//忘れずに! using System.Collections; public class NewBehaviourScript : MonoBehaviour { private void Awake (){ //イベント作成 EventTrigger.Entry pressDown = new EventTrigger.Entry(); pressDown.eventID = EventTriggerType.PointerDown; //イベントのタイプ設定 pressDown.callback.AddListener((data)=>{ShowLog();}); //メソッド登録 //イベントトリガーにイベント追加 GetComponent<EventTrigger> ().triggers.Add(pressDown); } //ログを出すだけのメソッド public void ShowLog(){ Debug.Log ("ログ!"); } }
EventTriggerからメソッドが実行されるので、実はButtonクラスがなくても動作します。
その場合、押した時にボタンの色は変わらなくなりますが。
ただし、その場合でもImageなどのRaycast Targetになるコンポーネントは必要です。