うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Coroutine が動作している間に 特定処理の有効無効を制御したい

コルーチンを呼び出している間中はタップを無効にしたいとか
そういったことがあり、呼び出し毎に無効有効処理を書くのが面倒だったので
一括でできないかと思い作ってみた

コルーチンを利用する場合はこのクラスの StartCoroutine を呼び出すようにする
※今回は Singleton にしなかったが Singleton のが使いやすいとは思う

public class CoroutineManager : MonoBehaviour
{
    /// <summary>
    /// 動いてる間タップ制御を無効にする
    /// </summary>
    public void StartCoroutine(params IEnumerator[] routines)
    {
        StartCoroutine(StartCoroutineAsync(routines));
    }

    private IEnumerator StartCoroutineAsync(params IEnumerator[] routines)
    {
        inputHandler.SetEnable(false);
        foreach (var r in routine)
        {
            yield return r;
        }
        inputHandler.SetEnable(true);
    }
}

呼び出し側では今までとそこまで変わりなく、IEnumerator メソッドを呼び出すだけ
特に意味はないですが複数呼び出せるようにしてあります

public class Sample : MonoBehaviour
{
    [SerializedField]
    private CoroutineManager _coroutine;
    
    private void Start()
    {
        _coroutine.StartCoroutine(
                Method1(),
            Method2()
        );
    }
    
    private IEnumerator Method1()
    {
        yield return null;
    }
    
    private IEnumerator Method1()
    {
        yield return null;
    }
}