LoginSignup
20
11

More than 1 year has passed since last update.

[Unity] Button にOnDown/OnReleaseイベントを追加する

Last updated at Posted at 2017-12-20

Buttonクラスを拡張して、onClick(ボタン上で押し、離した)時だけでなく、
Down(ボタン上で押した時)、Release(ボタン上で押し、ボタン外で離した時)のイベントも取得できるようにしてみます。

ButtonEx.cs
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.UI;
#endif

namespace TmLib
{
    public class ButtonEx : Button
    {
        public UnityEvent buttonExDownEvent;
        public UnityEvent buttonExUpEvent;
        public UnityEvent buttonExReleaseEvent;
        bool isInButton;

        public override void OnPointerDown(PointerEventData eventData)
        {
            base.OnPointerDown(eventData);
            isInButton = true;
            buttonExDownEvent.Invoke();
        }
        public override void OnPointerExit(PointerEventData eventData)
        {
            base.OnPointerExit(eventData);
            isInButton = false;
        }
        public override void OnPointerUp(PointerEventData eventData)
        {
            base.OnPointerUp(eventData);
            if (!isInButton) //ボタン外でリリースされたとき
                buttonExReleaseEvent.Invoke();
            else
                buttonExUpEvent.Invoke();
        }
    }

#if UNITY_EDITOR
    [CanEditMultipleObjects, CustomEditor(typeof(ButtonEx), true)]
    public class ButtonExEditor : ButtonEditor
    {
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            this.serializedObject.Update();
            EditorGUILayout.PropertyField(this.serializedObject.FindProperty("buttonExDownEvent"), true);
            EditorGUILayout.PropertyField(this.serializedObject.FindProperty("buttonExUpEvent"), true);
            EditorGUILayout.PropertyField(this.serializedObject.FindProperty("buttonExReleaseEvent"), true);
            this.serializedObject.ApplyModifiedProperties();
        }
    }
#endif
}

Inspector に追加したプロパティ(イベント)が表示されるようになりました。イベントハンドラに対応するスクリプトを作成してイベントを追加します

スクリーンショット 2017-12-20 13.24.56.png

ButtonExCheck.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ButtonExCheck : MonoBehaviour {
    [SerializeField] Text text=null;

    public void OnButtonExDown(){
        text.text = "Push";
    }
    public void OnButtonExRelease(){
        text.text = "Release";
    }
    public void OnButtonExExecute(){
        text.text = "Execute";
    }
}

名称未設定2.gif

20
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
11