本日は UniRx の小ネタ枠です。
UniRxのToUniTaskを使ってボタンの押下をawaitを使って待機する方法を記事にします。
UniRxのToUniTaskを使ってボタンの押下をawaitを使って待機する
UniRx の OnClickAsObservable メソッドを使うことで Button のクリックイベントを IObservable に変換できます。
更に ToUniTask メソッドを使って IObservable の完了を await で待機できるようになります。
サンプルスクリプト
以下のボタンのクリックイベントを受け取るまで処理の途中で await で待機を行うサンプルスクリプトを作成しました。
・ButtonAwaitTest.cs
using System; using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; using UniRx; public class ButtonAwaitTest : MonoBehaviour { [SerializeField] private Button releaseButton; async void Start() { Debug.Log("ボタンが押されるまで待機します"); // useFirstValue:trueにすると、OnNextでもawaitの待機が解除される // デフォルトまたはuseFirstValue:falseの場合、OnCompleteが来るまで待機が解除されない await releaseButton.OnClickAsObservable().ToUniTask(useFirstValue:true); Debug.Log("ボタンが押されました"); } }
以下のサンプルシーンを用意して Inspector で Button コンポーネントの参照を設定しました。
シーンを再生して動作を確認します。
ボタンを押下すると await が解除され、続きの処理が実行されたログが表示されました。