baobao
1/20/2017 - 9:19 AM

ParallelCoroutine.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParallelCoroutine : MonoBehaviour 
{
    public Coroutine CurrentParallelCoroutine{ get; private set;}

    public void StartParallelCoroutine(IEnumerator[] coroutines, System.Action onComplete)
    {
        CurrentParallelCoroutine = StartCoroutine(_StartParallelCoroutine(coroutines, onComplete));
    }

    IEnumerator _StartParallelCoroutine(IEnumerator[] coroutines, System.Action onComplete)
    {
        var parallel = new List<Coroutine>();

        foreach(var c in coroutines)
            parallel.Add(StartCoroutine(c));

        // 全てのコルーチンが終了するのを待機
        foreach(var c in parallel) 
            yield return c;

        CurrentParallelCoroutine = null;

        if (onComplete != null)
            onComplete();
    }
}