언제 끝날 지 모르는 코루틴 여러개를 동시에 실행하되, 모든 코루틴이 끝날때까지 기다리는 기능이 필요해서 만들어 보았다. 개념으론 Task.WhenAll과 동일한데, Task와 달리 코루틴 여러개를 기다리는 기능은 유니티가 기본으로 제공해주지 않는다.
.
using System.Collections;
using UnityEngine;
public class WaitForCoroutines : CustomYieldInstruction
{
public override bool keepWaiting => _remainCount > 0;
private int _remainCount;
public WaitForCoroutines(MonoBehaviour runner, params IEnumerator[] coroutines)
{
IEnumerator WaitingCoroutine(IEnumerator coroutine)
{
yield return coroutine;
_remainCount--;
}
_remainCount = coroutines.Length;
for (var i = 0; i < _remainCount; i++)
{
runner.StartCoroutine(WaitingCoroutine(coroutines[i]));
}
}
}
사용은 간단히 다음과 같은 형식으로 하면 된다.
IEnumerator Test1()
{
yield return new WaitForSeconds(1);
}
IEnumerator Test2()
{
yield return new WaitForSeconds(3);
}
IEnumerator Test3()
{
yield return new WaitForSeconds(5);
}
IEnumerator WaitAll()
{
yield return new WaitForCoroutines(this, Test1(), Test2(), Test3());
}
'Unity > 코드' 카테고리의 다른 글
C#에서 데이터를 압축하는 코드 (0) | 2024.02.29 |
---|