(:3[kanのメモ帳]

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

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


uGUIのButtonをプログラムから押す方法【Unity】【uGUI】


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

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


はじめに

UnityのuGUIではButtonというコンポーネントを使う事で、

押した時に処理が実行できるボタンを簡単に実装出来ます。


今回はそのButtonをプログラムから押す方法の紹介です!

なお、「タッチ(マウス)操作とゲームパッド操作に両方に対応したい」

「コントローラーで決定した時もボタンを押したように見せたい」みたいな時に役立つかと思います。


なお、記事中では以下のアセットを使っています。

Clean & Minimalist GUI Pack - Unity Asset Store



uGUIのButtonをプログラムから押す方法

早速ですがButtonを押した状態にするにはOnPointerDown

それを解除するにはOnPointerUpを使います。

using System.Threading.Tasks;//Task使うのに必要
using UnityEngine.EventSystems;//PointerEventData使うのに必要
using UnityEngine.UI;//Button使うのに必要
private async void Push() {
  //ボタンのコンポーネントを取得
  var button = GetComponent<Button>();

  //ボタンを押した状態にする
  button.OnPointerDown(new PointerEventData(EventSystem.current));
    
  //1秒待ってから戻す
  await Task.Delay(1000);
    
  //ボタンを戻す
  button.OnPointerUp(new PointerEventData(EventSystem.current));
}


ただし、これだとButtonのonClickに登録した処理は実行されないので、

処理を実行したい場合はOnPointerClickも実行します。

private async void Push() {
  //ボタンのコンポーネントを取得し、押した時の処理登録
  var button = GetComponent<Button>();
  button.onClick.AddListener(() => {
    Debug.Log("ボタンを押した");
  });

  //ボタンを押した状態にする
  button.OnPointerDown(new PointerEventData(EventSystem.current));

  //ボタンを押した時の処理を実行する
  button.OnPointerClick(new PointerEventData(EventSystem.current));
    
  //1秒待ってから戻す
  await Task.Delay(1000);
    
  //ボタンを戻す
  button.OnPointerUp(new PointerEventData(EventSystem.current));
}