프로젝트 작업중에 순차적으로 처리할 코드를 줄이다 보니 아래의 테스트코드를 작성하게 되었음.

왜 싱글턴을 사용했는지가 중요한게 아니므로 넘어가고 흐름만 보도록 하자.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
IEnumerator Start()
{
yield return null;
bool checkSum = false;
for (int i = 0; i < 10; i++)
{
checkSum = false;
Test1.Instance.CallBackTest((success) => { checkSum = success; });
yield return new WaitUntil(()=>checkSum);
}
}
}
public class Test1 : MonoBehaviour
{
#region singleton
private static volatile Test1 instance;
private Test1() { }
public static Test1 Instance
{
get
{
if (instance == null)
{
GameObject go = new GameObject();
instance = go.AddComponent<Test1>();
}
return instance;
}
}
#endregion
Action<bool> mCB;
public void CallBackTest(Action<bool> _cb)
{
mCB = _cb;
StopCoroutine("StartCallBack");
StartCoroutine("StartCallBack");
}
IEnumerator StartCallBack()
{
yield return new WaitForSeconds(UnityEngine.Random.Range(0.5f, 3f));
if (mCB != null)
mCB.Invoke(true);
}
}

흐름은 Test 클래스 Start 함수에서 반복문으로 시작.

이후 지역변수 checkSum을 이용해 Test1쪽 콜백을 받으면 true로 변경되기 전까지 waituntil에서 대기하고,

checksum이 true로 되면 다음으로 진행되는 구조.


뭐 팁이랄것도 없이 아주 간단한 구조이긴한데, 눈으로 봐야 직성이 풀리는 성격이기도 하고 생존기록으로 남기고자..'ㅅ';


WRITTEN BY
빨강꼬마

,