public class CoroutineHelper : MonoBehaviour
{
private static MonoBehaviour monoInstance;
[RuntimeInitializeOnLoadMethod]
private static void Initializer()
{
monoInstance = new GameObject($"[{nameof(CoroutineHelper)}]").AddComponent<CoroutineHelper>();
DontDestroyOnLoad(monoInstance.gameObject);
}
public new static Coroutine StartCoroutine(IEnumerator coroutine)
{
return monoInstance.StartCoroutine(coroutine);
}
public new static void StopCoroutine(Coroutine coroutine)
{
monoInstance.StopCoroutine(coroutine);
}
}
{
private static MonoBehaviour monoInstance;
[RuntimeInitializeOnLoadMethod]
private static void Initializer()
{
monoInstance = new GameObject($"[{nameof(CoroutineHelper)}]").AddComponent<CoroutineHelper>();
DontDestroyOnLoad(monoInstance.gameObject);
}
public new static Coroutine StartCoroutine(IEnumerator coroutine)
{
return monoInstance.StartCoroutine(coroutine);
}
public new static void StopCoroutine(Coroutine coroutine)
{
monoInstance.StopCoroutine(coroutine);
}
}
์ฌ์ฉ๋ฒ :
CoroutineHelper.StartCoroutine(์ฝ๋ฃจํด_ํจ์());
CoroutineHelper.StopCoroutine(์ฝ๋ฃจํด);
๊ทธ๋ฅ ์ ๋ํฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง ํ ์ฑ๊ธํค ๊ฐ์ฒด์ ์ฝ๋ฃจํด ์คํ์ ๋ชฐ์์ฃผ๋ ๋ฐฉ์
๊ฐ๋ MonoBehaviour ์์ ์ ๋ฐ๊ณ ์ฝ๋ฃจํด ์คํํ๊ณ ์ถ์ ๋๊ฐ ์๋๋ฐ ๊ทธ๋ด๋ ์ฌ์ฉํ ์ ์์๋ฏ..
์์ ์ unirx(MainThreadDispatcher)ํ ๋ฒ ์ฌ์ฉํด๋ณธ์ ์์๋๋ฐ ๊ฑฐ๊ธฐ์ ์์ด๋์ด ์ป์
์๋ ์ด๊ฑด unirx๋์ ๋ ๋ค๋ฅธ๊ฑด๊ฐ? MVPํจํด ๋ฐฐ์์ ์ฃผ์๋ก์ง์ ๋ค์ดํธ๋ธ์ธ ๋ชจ๋ธ์ ๋นผ๋๋๋ฐ ์๊ฐ๊ฐ๋ ๋๋งค ํ๋ช... ์์์ฒ๋ผ ํ๋ฉด ์ฝ๋ฃจํดํฌํผ์ ์ก๋คํ ๋ก์ง์ด ๋ค ๋๋ ค๋ฐ์์ง๊ฑฐ๊ฐ์ ์ ์์ฃผ ๋ก๊ธฐ์ง ์๋ค.. Unirx๋ฅผ ๋ฐฐ์ฐ๊ณ ์ถ์๋ฐ ๋๋ ์ด๋ ต๋ค ์์ํ๊ธฐ๊ฐ
unirx์์ ๊ฐ์ฒด ๋ช ์นญ์์ ์ ์ ์๋ฏ์ด ์ ๋ํฐ ์ ๋ฐ์ดํธ ์ฌ์ดํด ๋ด์์ ๋๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ฏ. ๋น๊ตํด์ ๋ค๋ฅด๋ค ๋ณด๋ค๋ ๋น๊ตํ๊ธฐ๊ฐ ์์ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ผ ๋ด์ผํ ๊ฑฐ๊ฐ์. ์๊ฐ ์ข ๋ ์ ์์ค์ธ๊ฑฐ๊ณ .. ์ฝ๋ฃจํดํฌํผ์ ์ก๋คํ ๋ก์ง ์คํ์ ์ ๊ฐํ๊ฒ ์ง๋ง ์ด๊ฑธ๋ก ์ธํด์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด ์ฝ๋ฃจํดํฌํผ ์ชฝ์ด ์๋๋ผ ๋ค๋ฅธ ์ชฝ์ด ๋ฌธ์ ์ผ๊ฑฐ๊ฐ์ ์๊ฐ๊ฐ๋ ๋์ ํ๋ค๋ฉด unirx๊ฐ ์ข์ ๋์์ผ๋ฏ
๊ณ ๋ง์ ํ ๋ฉฐ์น ์จ๋ณผ๊ป ๊ฐ๋จํ์ฝ๋ฃจํด ์คํ๋ ํจ ํด๋ด์ผ๊ฒ ๋ค ์.... ํน์ ์์ ์ฝ๋ฃจํด ํจ์๋ฅผ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ก ๋ง๋ค๊ณ ์ฝ๋ฃจํดํฌํผ์ ์ ๊ทผํ๋ ค๋ ๋ด ๊ธฐ์กด ๋ค์ดํฐ๋ธ์์ ๋ฑ๋กํ๊ณ ์คํํ๋๊ฑด ์๋๊ฒ ์ง.. ๋ก์ง์ด ์ฝ๋ฃจํดํฌํผ๊ฐ ์๋ ๊ธฐ์กด ๋ชจ๋ธ์ ์๊ฒ ํด์ฃผ๊ณ ์ถ์๋ฐ
์ฝ๋ฃจํด ์์ฒด๊ฐ MonoBehaviour๋ด์์ ๋๋๊ฑฐ๋ผ ์ ๋ํฐ ๊ฐฑ์ ์ฃผ๊ธฐ์ ๋ง์ถ๋ ค๋ฉด ์ด์ฉ์์์. unirx๋ ๋น์ทํ ์ด์ ๋ก ์ด๋ ๊ฒ ์ฌ์ฉํ์๋ฏ. ๋จ์ํ ๋๊ธฐํ๋ ํ์์๊ณ ์๊ฐ ์ฐจ๋ง ์ฃผ๊ณ ์ถ๋ค๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์์๋ฏํ๊ธด ํ๋ฐ.. ๋ธ๋ฆฌ๊ฒ์ดํธ๋ก ๋ง๋ค๊ณ ๋ค์ดํฐ๋ธ์์ ๋ฑ๋กํ๊ณ ์คํํ ๋ ค๊ณ ํ๋ฉด ๊ฒฐ๊ตญ ์ ๋ํฐ ๋ฉ์ธ ๋ก์ง ๊ฐฑ์ ์ฃผ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋๋ฐ (์ด๊ฒ ํ์์๋ค๋ฉด System.DateTime๊ฐ์๊ฑฐ ์ฐ๋ฉด ๋จ. ์ด๊ฑธ๋ก ์คํํ๋ ๋ฃจํด์ด ๊ฒ์ ๋ก์ง์ ์ฐ๊ด ์์ด์ผํ ํ ์ง๋ง) ๊ทธ๋ผ ๋ค์ ์ ๋ํฐ ์ฝ์ด์ ์ ๊ทผํด์ผํ๊ณ ์ฝ.. ์๋ฌดํผ ์ ๋ํฐ์ ์์ผ๋ ค๋ฉด ๋ค์ดํฐ๋ธ๋ก ๋ถ๋ฆฌํ๋ ์๋ฏธ๊ฐ ์์
์๋ฏ๋ง๋ฏ ํ๋ค์ฌใ ์ฌํผ ์ฑ๊ธํด์ธ ์ฝ๋ฃจํดํฌํผ์ ๋ก์ง์ ์ฎ๊ฒจ์ผ ๋๋ค๋ก ์ดํด ๋ฉ๋๋ค... ํ ใ ํจํด์ ์์๊ฒ ๋ง์ถฐ๋จ๋๋ฐ ์ฌ๊ธฐ์ ๊ธฐ์ ์ฑ๊ธํด์ ์ ๊ทผํด์ผ๋๋๊ฒ ๊ทธ๋ ๋ค์ ์๋ ํ๋ ์ด์ด์ฝ๋ฃจํดํฌํผ, ์๋๋ฏธ์ฝ๋ฃจํดํฌํผ ์ด๋ฐ์์ผ๋ก 1๊ฐ ๋ค์ดํฐ๋ธ ํด๋์ค๋ง๋ค ์ง์ง์ด์ค๋ ๊ด์ฐฎ๊ฒ ์ด์ค
์ ์๋ monobehavior์ ์์๋ฐ์ง ์์ผ๋ ค๋ ์ด์ ๊ฐ ๋ชฌ๊ฐ์?
์์ ์ ์๋์ด ์๋๋ผ ์ง๋ฌธ์์ง๋ง ์๋๋๋ก๋.. ๋ชจ๋ ธ๋นํค์ด๋น์ด๋ก ๋ง๋ ๊ฐ์ฒด๊ฐ ๋ ๋ง์ ๋น์ฉ์ ์ด๋ค ์๊ณ ์์ New๋ก ๋ชป๋ง๋ค๊ณ ๋๋๊ทธํด์ ๋ฃ์ด์ค์ผ๋จ(์์กด์ฑ์ ์ฝ๋์์๋ณผ์์๊ณ ์ ๋ํฐ ์ธ์คํํฐ์์ ์ฃผ๋ ์ฃผ๋ ๋ฌ๋ ค์๋ ํด๋์ค๋ค ์ฐพ์๋ค๋ ์ผํจ
๊ทธ๋ฅ ๊ทธ๋ด๋ ์์๋์ scriptable object์์ ๋ญ๊ฐ ์ฒ๋ฆฌํ๊ณ ์ถ์๋๋ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ ์ ์์ค์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๊ณ ์ถ์๋
ํผํฌ๋จผ์ค ์ฐจ์ด๊ฐ ๊ธ์ผ ์ฌํ๊ฐ?? scriptable object๋ ์์กด ๊ณต๊ฐ