Func는 반환값이 있는 Action라고 생각하시면 됩니다.
만약에 그냥 List<UniTask>로 선언하고 외부에서 해당 리스트에 Add해보시면 즉시 실행될겁니다.
하지만 아래처럼 List<Func<UniTask> 로 선언하면 델리게이트처럼 함수들을 외부에서 Add해도
즉시 실행 되지 않고 잘 저장 됩니다.
TestUniTask.cs
public class TestUniTask : MonoBehaviour
{
public List<Func<UniTask>> OnEndEvnt = new List<Func<UniTask>>(); // 비동기 메서드 참조
private async void DetectGameEnd()
{
// OnEndEvnt의 모든 함수가 실행 완료될 때까지 대기
if (OnEndEvnt.Count > 0)
{
foreach (var func in OnEndEvnt)
{
await func();
}
}
}
}
위코드는 OnEndEvnt처럼 리스트에 등록된 비동기 Task들이 모두 await이 끝날 때까지 순차적으로 실행하고 기다리는것입니다.
만약 다 실행하고 각자 다 await하고 싶다면?
-> UniTask.Void(async () => { await func(); })를 해서 하나씩 따로 기다리시면 됩니다.
외부 클래스
ClearStage.cs
public class ClearStage : MonoBehaviour
{
private void Start()
{
TestUniTask.OnEndEvnt.Add(ClearStageTask);
}
public async UniTask ClearStageTask()
{
await UniTask.WaitForSeconds(5);
}
}
꽤나 삽질했으니 알맞는 상황에 사용해보시기 바랍니다.
'유니티 > 유니티 관련 지식' 카테고리의 다른 글
유니티 넷코드 성능 비교 보고서 (0) | 2024.10.18 |
---|---|
유니티 라이트맵 가볍게 굽는 설정 (0) | 2024.10.17 |
유니티 모바일 해상도 (모바일로 플랫폼 바꾸면 보임) (0) | 2024.10.13 |
유니티 화면 보라색 버그 고치기 - 라이트 빛 (0) | 2024.10.08 |