タイトル通りのことがやりたかったので備忘録です。
UniTaskを使用した際のボタンの入力待ちをする方法です。
UniTaskサンプルコード
[SerializeField] private Button _button;
private async UniTask Hoge()
{
// UnityEventを変換
var buttonEvent = _button.onClick.GetAsyncEventHandler(CancellationToken.None);
// ボタンの入力待ち
await buttonEvent.OnInvokeAsync();
Debug.Log("Fuga");
}
コルーチンを使用した場合
ちなみにコルーチンを使用する場合はこんな感じでしょうか。
[SerializeField] private Button _button;
private IEnumerator Hoge()
{
var isOk = false;
_button.onClick.AddListener(() => isOk = true);
yield return new WaitUntil(() => isOk);
Debug.Log("Fuga");
}
キーボードの入力待ちをする場合
補足ですが、ちなみにキーボードの入力待ちをする場合はこちら。
private async UniTask Hoge()
{
await UniTask.WaitUntil(() => Input.GetKeyDown(KeyCode.A));
Debug.Log("Fuga");
}
こちらはUniTask使わずコルーチンでも同じようにできます。
private IEnumerator Hoge()
{
yield return new WaitUntil(() => Input.GetKeyDown(KeyCode.A));
Debug.Log("Fuga");
}
以上、入力待ちあれこれでした。