【Unity】UIボタンがクリックされた時、マウスのクリック検出をしないようにしたい
マウスのクリック処理(Input.GetMouse関連など)を実装しているとき、UIのボタンイベントを登録しても両方の処理がなされるのを防ぎます
本来、ボタンを押下したときは、マウスの処理はしたくないケースが多いと思いますので、それについての対処を考えていきます
シーンの構成
空のゲームオブジェクトを1つ追加します
MouseClickScriptスクリプトをアタッチします
using UnityEngine;
public class MouseClickScript : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("マウスwoクリック");
}
}
public void ButtonClick()
{
Debug.Log("ボタンをクリック");
}
}
UIボタンを1つ追加します
ボタンのクリックイベントに、GameObjectのオブジェクトにアタッチされているMouseClickScriptスクリプトを登録します
実行結果(想定していない動作)
ボタンをクリックしたにも関わらず、予期しないマウスクリックが取得されているのがわかります
対処
コンポーネントを使う
次のスクリプトは、CanMouseClickプロパティを1つ追加したものです
falseの場合は、すぐにリターンして以降のコードを実行しないようにしています
このスクリプトの他から、このプロパティを操作することによってマウスの操作の有効無効が設定できそうです
using UnityEngine;
public class MouseClickScript : MonoBehaviour
{
public bool CanMouseClick { get; set; } = true;
void Update()
{
if (!CanMouseClick)
{
return;
}
if (Input.GetMouseButtonDown(0))
{
Debug.Log("マウスをクリック");
}
}
// ボタンのクリックイベントハンドラ
public void ButtonClick()
{
Debug.Log("ボタンをクリック");
}
}
ボタンに対してポインターのイベントトリガーを追加する
実行結果
ボタンのクリック時は、マウスクリックが発生しないような動作になりますね
スクリプトで実装
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ButtonHoverEvent : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[SerializeField]
private Button button;
[SerializeField]
MouseClickScript MouseClickScript;
public void OnPointerEnter(PointerEventData eventData)
{
// ボタンにマウスが入った時の処理
MouseClickScript.CanMouseClick = false;
Debug.Log("ボタンに触れている");
}
public void OnPointerExit(PointerEventData eventData)
{
// ボタンからマウスが出た時の処理
MouseClickScript.CanMouseClick = true;
Debug.Log("ボタンに触れていない");
}
}
ButtonHoverEvent
クラスはMonoBehaviour
を継承し、IPointerEnterHandler
とIPointerExitHandler
のインターフェースを実装しています。これにより、ボタンにマウスが入った時とボタンからマウスが出た時のイベントを処理できるようになります。
クラス内にはいくつかのフィールドがあります。private Button button
は、このスクリプトがアタッチされたオブジェクトに関連付けられたボタンを参照します。また、MouseClickScript MouseClickScript
は、別のスクリプトへの参照です。
OnPointerEnter
メソッドは、ボタンにマウスが入った時に呼び出されます。このメソッド内では、MouseClickScript
スクリプトのCanMouseClick
変数をfalse
に設定し、デバッグログを出力しています。
OnPointerExit
メソッドは、ボタンからマウスが出た時に呼び出されます。このメソッド内では、MouseClickScript
スクリプトのCanMouseClick
変数をtrue
に設定し、デバッグログを出力しています。
このスクリプトの役割は、ボタンにマウスが入った時に別のスクリプトの変数を変更し、ボタンからマウスが出た時に元の状態に戻すことです。具体的な処理はMouseClickScript
スクリプトに依存しており、ボタンのホバーイベントに応じた動作を実装するために使用されることが想定されています。
ディスカッション
コメント一覧
まだ、コメントがありません