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 に追加したプロパティ(イベント)が表示されるようになりました。イベントハンドラに対応するスクリプトを作成してイベントを追加します
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";
}
}