C#
Unity

[Unity] uGUIのボタンイベントを他のボタンに流す

More than 3 years have passed since last update.


何がしたいのか

モーダルとか出す時に、後ろに半透明のパネル引いて暗くしたりしますよね?

そこタップしてもボタンタップと同じ処理したいなーとか思うわけですよ。

閉じるとか、シナリオシーンの「次へ」とかね。

要するに、別のオブジェクトから他のボタンを押したいという事


どしたらいいか

uGUIのButtonはSelectableと、IPointerClickHandler, ISubmitHandler継承していてます。

Selectableは以下のインターフェイスを継承しています。


  • IMoveHandler

  • IPointerDownHandler

  • IPointerUpHandler

  • IPointerEnterHandler

  • IPointerExitHandler

  • ISelectHandler

  • IDeselectHandler

これらのInterfaceで定義されたイベントを受け流して上げれば良いのです。


コード

using UnityEngine;

using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;

public class BypassButtonEvent : MonoBehaviour,
IPointerClickHandler, ISubmitHandler,
IMoveHandler,
IPointerDownHandler, IPointerUpHandler,
IPointerEnterHandler, IPointerExitHandler,
ISelectHandler, IDeselectHandler
{
public Button target;

public void OnPointerClick(PointerEventData eventData)
{
target.OnPointerClick(eventData);
}
public void OnSubmit(BaseEventData eventData)
{
target.OnSubmit(eventData);
}

public void OnDeselect(BaseEventData eventData)
{
if (target != null)
target.OnDeselect(eventData);
}

public void OnMove(AxisEventData eventData)
{
if (target != null)
target.OnMove(eventData);
}

public void OnPointerDown(PointerEventData eventData)
{
if (target != null)
target.OnPointerDown(eventData);
}

public void OnPointerEnter(PointerEventData eventData)
{
if (target != null)
target.OnPointerEnter(eventData);
}

public void OnPointerExit(PointerEventData eventData)
{
if (target != null)
target.OnPointerExit(eventData);
}

public void OnPointerUp(PointerEventData eventData)
{
if (target != null)
target.OnPointerUp(eventData);
}

public void OnSelect(BaseEventData eventData)
{
if (target != null)
target.OnSelect(eventData);
}
}


結果


普通の状態

2395503194b6df757f592adcbf61032c.gif


半透明パネルにスクリプトを付け、targetにボタンを設定した

ec120f01624a7bd7494cffa05fa24d18.gif


備考

ボタンを押した時のTransitionが不要なら、Selectable側のInterface実装は不要です

というか、その場合もう直接イベント叩こうよと。