(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

ボタンを押した瞬間にメソッド実行【Unity】【uGUI】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.3.4f1 Personal


はじめに

uGUIでボタンを作成すると、デフォルトであるイベントはOnClickだけで

そのままではクリックした時(スマホだとタップして指を離した時)にしかメソッドが実行できません。


場合によっては押した瞬間に処理をしたいという事もあると思います。

今回はそんな時のための記事です。


EventTrigger

押した瞬間のイベントを取得したい!みたいな時に使えるのがEventTriggerです。

このEventTriggerをボタンにAddし、Add New Event TypeからPointer Downを追加し、

そこに実行させたいイベントを設定するだけです。


f:id:kan_kikuchi:20160705133322j:plain


押した瞬間にログを表示すると以下の通り。


f:id:kan_kikuchi:20160705134449g:plain


ちなみにコードから設定したい場合は以下ような感じになります。

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になるコンポーネントは必要です。