Table of Contents
전에 비동기 세이브, 로드 제작기에서
async콜백 안에서는 UnityEngine API속에있는 함수들을 사용하면 async에서 에러없이 팅겨져 나온다고 작성했었다.
그래서 나름 꼼수를 써가며 피해갔었는데
어떻게해도 aysnc안에서 그 타이밍에 호출을 해야할 경우가 생기기 마련이다.
그래서 검색을 좀 해보니
public class MainThreadWorker : MonoBehaviour
{
// singleton pattern
public static MainThreadWorker Instance;
// added actions will be executed in the main thread
ConcurrentQueue<Action> actions = new ConcurrentQueue<Action>();
private void Awake()
{
if (Instance)
{
this.enabled = false;
return;
}
Instance = this;
}
private void Update()
{
// execute all actions added since the last frame
while (actions.TryDequeue(out var action))
{
action?.Invoke();
}
}
public void AddAction(Action action)
{
if(action != null) actions.Enqueue(action);
}
}
이런 싱글톤 클래스를 만들어서 꼼수를 쓸수있다.
Action에 담아서 호출하는거고 업데이트에 Action리스트를 체크하고 이벤트가 있으면 실행한다.
업데이트에서 체크하기 때문에 Action에 추가한 다음프레임에 호출이 되겠지만은
이정도 우회법 만으로 상당히 많은걸 할 수 있을것 같다.
나는 async콜백 안에서 이런식으로 람다함수를 집어넣어 사용했다.
코드 출처 :
'Unity > C#' 카테고리의 다른 글
[C#] params 가변인자 매개변수 (0) | 2022.01.17 |
---|---|
Unity 3D 모바일 터치이펙트 만들기 (0) | 2021.12.08 |
C# Enum Count 가져오는 방법 (0) | 2021.11.02 |
(C#, Unity) Property(프로퍼티)를 인스펙터에 노출시키기 (0) | 2021.11.02 |
C# 확장메소드, List 셔플 (0) | 2021.10.25 |