この記事でのバージョン
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)); }