{"id":2596,"date":"2026-09-30T02:57:33","date_gmt":"2026-09-30T02:57:33","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2596"},"modified":"2026-10-04T03:02:27","modified_gmt":"2026-10-04T03:02:27","slug":"unitask-%ec%82%ac%ec%9a%a9%eb%b2%95-unity","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2596","title":{"rendered":"UniTask \uc0ac\uc6a9\ubc95 #Unity"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Unity\uc5d0\uc11c <code>UniTask<\/code>\ub294 <strong>Unity\uc758 \ube44\ub3d9\uae30 \uc791\uc5c5\uc744 <code>async\/await<\/code> \ubc29\uc2dd\uc73c\ub85c \ub2e4\ub8e8\uae30 \uc704\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac<\/strong>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 Unity\uc5d0\uc11c\ub294 <code>Coroutine<\/code>\uacfc <code>UniTask<\/code>\uc758 \uc5ed\ud560\uc774 \uacb9\uce58\ub294 \ubd80\ubd84\uc774 \ub9ce\uc9c0\ub9cc, <code>UniTask<\/code>\ub294 <strong>C#\uc758 <code>async\/await<\/code> \ubb38\ubc95\uc744 \uadf8\ub300\ub85c \ud65c\uc6a9\ud558\uba74\uc11c Unity\uc758 PlayerLoop\uc640 \uacb0\ud569<\/strong>\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc774 \ud575\uc2ec\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask\ub780?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>UniTask<\/code>\ub294 Cysharp\uc5d0\uc11c \ub9cc\ub4e0 Unity\uc6a9 \ube44\ub3d9\uae30 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uae30\ubcf8\uc801\uc73c\ub85c \uc774\ub7f0 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uac8c \ud574\uc900\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask StartGameAsync()\n{\n    await UniTask.Delay(1000);\n\n    Debug.Log(\"1\ucd08 \ud6c4 \uc2e4\ud589\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Coroutine\uc73c\ub85c \uc791\uc131\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IEnumerator StartGame()\n{\n    yield return new WaitForSeconds(1f);\n\n    Debug.Log(\"1\ucd08 \ud6c4 \uc2e4\ud589\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub458\uc758 \ubaa9\uc801\uc740 \ube44\uc2b7\ud558\uc9c0\ub9cc <code>UniTask<\/code>\uc5d0\uc11c\ub294 C#\uc758 <code>async\/await<\/code>\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Coroutine\n    \u2193\nyield return\n\nUniTask\n    \u2193\nasync \/ await<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uc124\uce58<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unity Package Manager\uc5d0\uc11c Git URL\uc744 \uc0ac\uc6a9\ud558\uac70\ub098 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc800\ub97c \ud1b5\ud574 \uc124\uce58\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc124\uce58 \ud6c4\uc5d0\ub294 \ubcf4\ud1b5 \ub2e4\uc74c \ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Cysharp.Threading.Tasks;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \uc0ac\uc6a9\ubc95<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">UniTask \ubc18\ud658<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \ube44\ub3d9\uae30 \uba54\uc11c\ub4dc\ub294 \ub2e4\uc74c\ucc98\ub7fc \ub9cc\ub4e0\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadGameAsync()\n{\n    await UniTask.Delay(1000);\n\n    Debug.Log(\"\uac8c\uc784 \ub85c\ub4dc \uc644\ub8cc\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud638\ucd9c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await LoadGameAsync();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e8, \ud638\ucd9c\ud558\ub294 \ucabd \uc5ed\uc2dc <code>async<\/code>\uc5ec\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask StartGameAsync()\n{\n    await LoadGameAsync();\n\n    Debug.Log(\"\uac8c\uc784 \uc2dc\uc791\");\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask\uc640 UniTaskVoid<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c \uc911\uc694\ud55c \ucc28\uc774\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">UniTask<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadAsync()\n{\n    await UniTask.Delay(1000);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ub3d9\uae30 \uc791\uc5c5 \uc790\uccb4\ub97c \ubc18\ud658\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \ud638\ucd9c\uc790\uac00 \uae30\ub2e4\ub9b4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await LoadAsync();<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">UniTaskVoid<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTaskVoid StartGame()\n{\n    await UniTask.Delay(1000);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\ud658\uac12\uc774 \uc5c6\ub294 \ube44\ub3d9\uae30 \uc791\uc5c5\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc8fc\ub85c Unity \uc774\ubca4\ud2b8\ucc98\ub7fc <strong>\ubc18\ud658\uac12\uc744 \uc694\uad6c\ud560 \uc218 \uc5c6\ub294 \uacf3<\/strong>\uc5d0\uc11c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTaskVoid OnClick()\n{\n    await UniTask.Delay(1000);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc77c\ubc18\uc801\uc778 \ube44\ub3d9\uae30 \uba54\uc11c\ub4dc\uc5d0\uc11c\ub294 <code>UniTaskVoid<\/code>\ubcf4\ub2e4 <strong><code>UniTask<\/code>\ub97c \uc6b0\uc120 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\ub2e4.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask OnClickAsync()\n{\n    await ...\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4\ub450\uace0 \ud544\uc694\ud560 \ub54c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OnClickAsync().Forget();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\ub294 \ubc29\uc2dd\uc774 \uc77c\ubc18\uc801\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Forget()<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unity\uc5d0\uc11c \uad49\uc7a5\ud788 \uc790\uc8fc \ubcf4\uac8c \ub418\ub294 \ud328\ud134\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadAsync()\n{\n    await UniTask.Delay(1000);\n\n    Debug.Log(\"\uc644\ub8cc\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub97c \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \uc2e4\ud589\ud558\ub824\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LoadAsync().Forget();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await\n\u2192 \uc791\uc5c5\uc774 \ub05d\ub0a0 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bc\n\nForget()\n\u2192 \uc2e4\ud589\ub9cc \ud558\uace0 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uc74c<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ubc84\ud2bc \ud074\ub9ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public void OnClick()\n{\n    LoadAsync().Forget();\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask.Delay<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \ub300\uae30\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(1000);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">1000ms = 1\ucd08\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(3000);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">3\ucd08 \ub300\uae30.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud504\ub808\uc784 \ub2e8\uc704 \ub300\uae30<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.DelayFrame(1);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c \ud504\ub808\uc784\uae4c\uc9c0 \uae30\ub2e4\ub9b0\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Debug.Log(\"A\");\n\nawait UniTask.DelayFrame(1);\n\nDebug.Log(\"B\");<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Unity\uc758 TimeScale\uacfc \uad00\uacc4<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>UniTask.Delay<\/code>\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Unity\uc758 PlayerLoop \uae30\ubc18\uc73c\ub85c \ub3d9\uc791\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2dc\uac04 \uae30\ubc18 \ub300\uae30\uc5d0\uc11c\ub294 <code>Time.timeScale<\/code>\uc758 \uc601\ud5a5\uc744 \ubc1b\uc744\uc9c0 \uc5ec\ubd80\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \uac8c\uc784\uc774 \uc77c\uc2dc\uc815\uc9c0\ub418\uc5b4\ub3c4 \uc2e4\uc81c \uc2dc\uac04 \uae30\uc900\uc73c\ub85c \uae30\ub2e4\ub9ac\uace0 \uc2f6\ub2e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(\n    1000,\n    ignoreTimeScale: true\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac8c\uc784 \uc2dc\uac04 \uae30\uc900\uc73c\ub85c \ub3d9\uc791\uc2dc\ud0a4\uace0 \uc2f6\ub2e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(\n    1000,\n    ignoreTimeScale: false\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac8c\uc784\uc758 \uc77c\uc2dc\uc815\uc9c0\/\uc2dc\uac04 \ubc30\uc18d \uc2dc\uc2a4\ud15c\uc744 \ub9cc\ub4e4 \ub54c \uc0c1\ub2f9\ud788 \uc911\uc694\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask.Yield<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\ub9e4 \ud504\ub808\uc784 \uc591\ubcf4\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Yield();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask TestAsync()\n{\n    Debug.Log(\"A\");\n\n    await UniTask.Yield();\n\n    Debug.Log(\"B\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud604\uc7ac \uc2e4\ud589\uc744 \uc7a0\uc2dc \uc911\ub2e8\ud558\uace0 \ub2e4\uc74c PlayerLoop\uc5d0\uc11c \uc774\uc5b4\uc11c \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask.NextFrame<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\uc74c \ud504\ub808\uc784\uc744 \uba85\ud655\ud558\uac8c \uae30\ub2e4\ub9ac\uace0 \uc2f6\ub2e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.NextFrame();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.NextFrame();\n\nDebug.Log(\"\ub2e4\uc74c \ud504\ub808\uc784\");<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ube44\ub3d9\uae30 \ub85c\ub529<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unity\uc5d0\uc11c UniTask\ub97c \uc0ac\uc6a9\ud558\ub294 \uac00\uc7a5 \ud070 \uc774\uc720 \uc911 \ud558\ub098\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 Addressables\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask&lt;GameObject&gt; LoadAsync(string address)\n{\n    var handle = Addressables.LoadAssetAsync&lt;GameObject&gt;(address);\n\n    return await handle.ToUniTask();\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask StartGameAsync()\n{\n    GameObject player = await LoadAsync(\"Player\");\n\n    Debug.Log(\"Player Loaded\");\n\n    Instantiate(player);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac8c \uc0c1\ub2f9\ud788 \uac15\ub825\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Coroutine \ubc29\uc2dd\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Addressables\n\u2193\nAsyncOperationHandle\n\u2193\nyield return\n\u2193\n\uacb0\uacfc \ud655\uc778<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2dd\uc73c\ub85c \uc791\uc131\ud574\uc57c \ud558\ub294 \ubc18\uba74,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await\n\u2193\n\uacb0\uacfc<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub77c\ub294 \ud750\ub984\uc73c\ub85c \ud45c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Unity AsyncOperation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unity\uc758 <code>AsyncOperation<\/code>\ub3c4 <code>ToUniTask()<\/code>\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadSceneAsync(string sceneName)\n{\n    await SceneManager.LoadSceneAsync(sceneName).ToUniTask();\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc52c \ub85c\ub529:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await LoadSceneAsync(\"Game\");<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Resources \ub85c\ub529\uacfc\ub294 \ub2e4\ub974\ub2e4<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Resources.Load()<\/code> \uc790\uccb4\ub294 \ub3d9\uae30 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var prefab = Resources.Load&lt;GameObject&gt;(\"Player\");<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac78 UniTask\ub85c \uac10\uc2fc\ub2e4\uace0 \uc2e4\uc81c \ub85c\ub529\uc774 \ube44\ub3d9\uae30\uac00 \ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SceneManager.LoadSceneAsync(...)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 Unity\uc758 \ube44\ub3d9\uae30 API\ub97c <code>UniTask<\/code>\uc640 \uacb0\ud569\ud558\uba74 \uc758\ubbf8\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">CancellationToken<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\ub97c \uc81c\ub300\ub85c \uc0ac\uc6a9\ud558\ub824\uba74 <strong>CancellationToken\uc744 \uc774\ud574\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadAsync(CancellationToken cancellationToken)\n{\n    await UniTask.Delay(\n        5000,\n        cancellationToken: cancellationToken\n    );\n\n    Debug.Log(\"\uc644\ub8cc\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 5\ucd08\ub97c \uae30\ub2e4\ub9ac\ub294 \ub3c4\uc911 \uc624\ube0c\uc81d\ud2b8\uac00 \ud30c\uad34\ub41c\ub2e4\uba74?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GameObject Destroy\n       \u2193\n\uc791\uc5c5\uc740 \uacc4\uc18d \uc2e4\ud589?\n       \u2193\n\uc798\ubabb\ub41c \uc811\uadfc \uac00\ub2a5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c Unity\uc5d0\uc11c\ub294 \uac1d\uccb4\uc758 \uc0dd\uba85\uc8fc\uae30\uc640 \ube44\ub3d9\uae30 \uc791\uc5c5\uc744 \uc5f0\uacb0\ud558\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">GetCancellationTokenOnDestroy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\uac00 Unity\uc5d0\uc11c \uac15\ub825\ud55c \uc774\uc720 \uc911 \ud558\ub098\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadAsync()\n{\n    var token = this.GetCancellationTokenOnDestroy();\n\n    await UniTask.Delay(\n        5000,\n        cancellationToken: token\n    );\n\n    Debug.Log(\"\uc644\ub8cc\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">GameObject\uac00 Destroy\ub418\uba74 CancellationToken\uc774 \ucde8\uc18c\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MonoBehaviour\n    \u2502\n    \u251c\u2500\u2500 Async Task\n    \u2502\n    \u2514\u2500\u2500 Destroy\n          \u2193\n    Cancellation\n          \u2193\n    Async Task \uc885\ub8cc<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \uad6c\uc870\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">CancellationToken\uc744 \uc9c1\uc811 \uad00\ub9ac\ud558\ub294 \ubc29\ubc95<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>private CancellationTokenSource _cts;\n\nprivate void Awake()\n{\n    _cts = new CancellationTokenSource();\n}\n\nprivate void OnDestroy()\n{\n    _cts.Cancel();\n    _cts.Dispose();\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask TestAsync(CancellationToken token)\n{\n    await UniTask.Delay(5000, cancellationToken: token);\n\n    Debug.Log(\"\uc644\ub8cc\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud638\ucd9c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TestAsync(_cts.Token).Forget();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc MonoBehaviour \uc0dd\uba85\uc8fc\uae30\uc640 \uc5f0\uacb0\ud558\ub294 \uacbd\uc6b0\ub77c\uba74 \ub300\ubd80\ubd84:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>this.GetCancellationTokenOnDestroy()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00 \ud6e8\uc52c \uac04\ub2e8\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Cancellation \uc608\uc678 \ucc98\ub9ac<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Cancellation\uc740 \uc77c\ubc18\uc801\uc778 \uc624\ub958\uc640 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try\n{\n    await UniTask.Delay(\n        5000,\n        cancellationToken: token\n    );\n}\ncatch (OperationCanceledException)\n{\n    Debug.Log(\"\ucde8\uc18c\ub428\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ub294 UniTask\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(\n    5000,\n    cancellationToken: token\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\ub7fc \ucde8\uc18c \uac00\ub2a5\ud55c \uc791\uc5c5\uc744 \uad6c\uc131\ud558\uace0 \uc0c1\uc704\uc5d0\uc11c cancellation\uc744 \uad00\ub9ac\ud558\ub294 \ubc29\uc2dd\ub3c4 \ub9ce\uc774 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uc5ec\ub7ec \uc791\uc5c5\uc744 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\uc758 \ub610 \ub2e4\ub978 \ud575\uc2ec \uae30\ub2a5\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await LoadPlayerAsync();\nawait LoadEnemyAsync();\nawait LoadMapAsync();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 \uc21c\ucc28 \uc2e4\ud589\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Player\n \u2193\nEnemy\n \u2193\nMap<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01\uac01 2\ucd08\ub77c\uba74 \ub300\ub7b5 6\ucd08\uac00 \uac78\ub9b0\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\uba74 \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud558\ub824\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.WhenAll(\n    LoadPlayerAsync(),\n    LoadEnemyAsync(),\n    LoadMapAsync()\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Player \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\nEnemy  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2192 \uc644\ub8cc\nMap    \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00\uc7a5 \uc624\ub798 \uac78\ub9ac\ub294 \uc791\uc5c5\ub9cc\ud07c \uc2dc\uac04\uc774 \uac78\ub9b0\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uacb0\uacfc\ub97c \ubc1b\uc744 \uc218\ub3c4 \uc788\ub2e4<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask&lt;int&gt; GetPlayerLevelAsync()\n{\n    await UniTask.Delay(1000);\n\n    return 50;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int level = await GetPlayerLevelAsync();\n\nDebug.Log(level);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989 \uc77c\ubc18\uc801\uc778 C#\uc758 <code>Task&lt;T&gt;<\/code>\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uc5ec\ub7ec \uacb0\uacfc \ubc1b\uae30<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>var (player, enemy, map) = await UniTask.WhenAll(\n    LoadPlayerAsync(),\n    LoadEnemyAsync(),\n    LoadMapAsync()\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01\uac01 \uacb0\uacfc\ub97c \ubc18\ud658\ud558\ub3c4\ub85d \ub9cc\ub4e4\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UniTask&lt;Player&gt; LoadPlayerAsync()\nUniTask&lt;Enemy&gt; LoadEnemyAsync()\nUniTask&lt;Map&gt; LoadMapAsync()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7ec\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var (player, enemy, map) = await UniTask.WhenAll(\n    LoadPlayerAsync(),\n    LoadEnemyAsync(),\n    LoadMapAsync()\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \ud615\ud0dc\uac00 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask.WaitUntil<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\uc815 \uc870\uac74\uc774 \ub9cc\uc871\ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9b4 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.WaitUntil(() =&gt; player.IsReady);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc989:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>player.IsReady == false\n        \u2193\n\uacc4\uc18d \ub300\uae30\n        \u2193\nplayer.IsReady == true\n        \u2193\n\ub2e4\uc74c \ucf54\ub4dc \uc2e4\ud589<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.WaitUntil(() =&gt; GameManager.Instance.IsInitialized);\n\nStartGame();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac8c\uc784 \ucd08\uae30\ud654 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc0c1\ub2f9\ud788 \uc720\uc6a9\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">WaitWhile<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\ub300\ub85c \uc870\uac74\uc774 true\uc778 \ub3d9\uc548 \uae30\ub2e4\ub9b0\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.WaitWhile(() =&gt; player.IsLoading);<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uc870\uac74 + CancellationToken<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc804\uc5d0\uc11c\ub294 \uc774\ub7f0 \ud615\ud0dc\uac00 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask WaitForGameAsync(CancellationToken token)\n{\n    await UniTask.WaitUntil(\n        () =&gt; GameManager.Instance.IsReady,\n        cancellationToken: token\n    );\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask\ub97c \uc774\uc6a9\ud55c \ubc18\ubcf5<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Coroutine\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IEnumerator UpdateLoop()\n{\n    while (true)\n    {\n        yield return null;\n\n        UpdateSomething();\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask UpdateLoopAsync()\n{\n    while (true)\n    {\n        await UniTask.Yield();\n\n        UpdateSomething();\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \uc774\uac83\uc740 \ubc18\ub4dc\uc2dc <strong>Cancellation<\/strong>\uc744 \uace0\ub824\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask UpdateLoopAsync(CancellationToken token)\n{\n    while (!token.IsCancellationRequested)\n    {\n        await UniTask.Yield(token);\n\n        UpdateSomething();\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub610\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask UpdateLoopAsync(CancellationToken token)\n{\n    while (true)\n    {\n        await UniTask.Yield(token);\n\n        UpdateSomething();\n    }\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">UniTask\ub97c Coroutine\ucc98\ub7fc \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\ub2e4<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\uc5d0\ub294 Unity\uc758 PlayerLoop\uc640 \uc5f0\uacb0\ub41c \ub2e4\uc591\ud55c \ub300\uae30 \ubc29\ubc95\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.NextFrame();\nawait UniTask.DelayFrame(10);\nawait UniTask.WaitForSeconds(1f);\nawait UniTask.WaitUntil(...);\nawait UniTask.WaitWhile(...);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c Coroutine\uc5d0\uc11c \ud558\ub358 \uc791\uc5c5 \ub300\ubd80\ubd84\uc744 <code>async\/await<\/code> \ud615\ud0dc\ub85c \ud45c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Coroutine\uacfc UniTask\uc758 \ucc28\uc774<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\ud575\uc2ec\ub9cc \ube44\uad50\ud558\uba74 \uc774\ub807\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th>Coroutine<\/th><th>UniTask<\/th><\/tr><\/thead><tbody><tr><td>\ubb38\ubc95<\/td><td><code>yield<\/code><\/td><td><code>async\/await<\/code><\/td><\/tr><tr><td>\ubc18\ud658\uac12<\/td><td>\uc81c\ud55c\uc801<\/td><td>\uac00\ub2a5<\/td><\/tr><tr><td>\uc608\uc678 \ucc98\ub9ac<\/td><td>\ubd88\ud3b8<\/td><td><code>try\/catch<\/code><\/td><\/tr><tr><td>Cancellation<\/td><td>\uc9c1\uc811 \uad6c\ud604<\/td><td><code>CancellationToken<\/code><\/td><\/tr><tr><td>\uc5ec\ub7ec \uc791\uc5c5 \uc870\ud569<\/td><td>\ubd88\ud3b8<\/td><td><code>WhenAll<\/code> \ub4f1<\/td><\/tr><tr><td>C# \ube44\ub3d9\uae30 \ucf54\ub4dc\uc640 \uacb0\ud569<\/td><td>\uc81c\ud55c\uc801<\/td><td>\uc88b\uc74c<\/td><\/tr><tr><td>Unity API\uc640 \uacb0\ud569<\/td><td>\ub9e4\uc6b0 \uc88b\uc74c<\/td><td>\ub9e4\uc6b0 \uc88b\uc74c<\/td><\/tr><tr><td>\ucf54\ub4dc \ud750\ub984<\/td><td>\ubd84\uc0b0\ub418\uae30 \uc26c\uc6c0<\/td><td>\uc77c\ubc18\uc801\uc778 \ucf54\ub4dc\ucc98\ub7fc \ud45c\ud604 \uac00\ub2a5<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uc911\uc694\ud55c \uc810: UniTask\ub294 &#8220;\ubc31\uadf8\ub77c\uc6b4\ub4dc \uc2a4\ub808\ub4dc&#8221;\uac00 \uc544\ub2c8\ub2e4<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \ubd80\ubd84\uc744 \uc798\ubabb \uc774\ud574\ud558\uba74 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(1000);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud55c\ub2e4\uace0 CPU \uc791\uc5c5\uc774 \ubcc4\ub3c4\uc758 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub418\ub294 \uac83\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">UniTask\uc758 \uae30\ubcf8\uc801\uc778 Unity \uc791\uc5c5\uc740 <strong>Unity PlayerLoop\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589<\/strong>\ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.Delay(1000);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\uac83\uacfc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await Task.Run(() =&gt; HeavyCalculation());<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc740 \uc644\uc804\ud788 \ub2e4\ub978 \uac1c\ub150\uc774\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">CPU \uc791\uc5c5\uc744 \ubcc4\ub3c4 \uc2a4\ub808\ub4dc\uc5d0\uc11c \uc2e4\ud589<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc815\ub9d0 CPU \uc791\uc5c5\uc744 \ub2e4\ub978 \uc2a4\ub808\ub4dc\uc5d0\uc11c \ucc98\ub9ac\ud558\uace0 \uc2f6\ub2e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.RunOnThreadPool(() =&gt;\n{\n    HeavyCalculation();\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask CalculateAsync()\n{\n    int result = await UniTask.RunOnThreadPool(() =&gt;\n    {\n        return HeavyCalculation();\n    });\n\n    Debug.Log(result);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc8fc\uc758\ud574\uc57c \ud560 \uac83\uc740 <strong>Unity API \ub300\ubd80\ubd84\uc740 \uba54\uc778 \uc2a4\ub808\ub4dc\uc5d0\uc11c \ud638\ucd9c\ud574\uc57c \ud55c\ub2e4\ub294 \uac83<\/strong>\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>await UniTask.RunOnThreadPool(() =&gt;\n{\n    Instantiate(prefab); \/\/ \uc704\ud5d8\n});<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub7f0 \ucf54\ub4dc\ub97c \ubb34\uc791\uc815 \uc791\uc131\ud558\uba74 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uc2e4\uc804 \uad6c\uc870<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uac8c\uc784 \uac1c\ubc1c\uc5d0\uc11c\ub294 \ubcf4\ud1b5 \uc774\ub7f0 \uad6c\uc870\ub85c \uac00\uc838\uac00\uba74 \uae54\ub054\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class GameLoader : MonoBehaviour\n{\n    async UniTaskVoid Start()\n    {\n        await InitializeAsync();\n    }\n\n    private async UniTask InitializeAsync()\n    {\n        await LoadDataAsync();\n        await LoadAssetsAsync();\n        await InitializeSystemsAsync();\n\n        StartGame();\n    }\n\n    private async UniTask LoadDataAsync()\n    {\n        await UniTask.Delay(500);\n    }\n\n    private async UniTask LoadAssetsAsync()\n    {\n        await UniTask.Delay(1000);\n    }\n\n    private async UniTask InitializeSystemsAsync()\n    {\n        await UniTask.Delay(500);\n    }\n\n    private void StartGame()\n    {\n        Debug.Log(\"Game Start\");\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud750\ub984\uc774 \ub9e4\uc6b0 \uba85\ud655\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Initialize\n   \u2193\nLoad Data\n   \u2193\nLoad Assets\n   \u2193\nInitialize Systems\n   \u2193\nStart Game<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Coroutine\uc744 \uc5ec\ub7ec \uac1c \uc5f0\uacb0\ud558\ub294 \uac83\ubcf4\ub2e4 \uad6c\uc870\ub97c \uc77d\uae30\uac00 \uc27d\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\uac1c\uc778\uc801\uc73c\ub85c \uac00\uc7a5 \uc911\uc694\ud55c UniTask \uc0ac\uc6a9 \uc6d0\uce59<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unity \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c UniTask\ub97c \uc4f4\ub2e4\uba74 \ub2e4\uc74c \uc815\ub3c4\ub97c \uae30\uc900\uc73c\ub85c \uc7a1\uc73c\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ube44\ub3d9\uae30 \uba54\uc11c\ub4dc\n        \u2193\n    UniTask \ubc18\ud658\n        \u2193\n    \ud544\uc694\ud55c \uacf3\uc5d0\uc11c await\n        \u2193\n\uae30\ub2e4\ub9b4 \ud544\uc694 \uc5c6\uc73c\uba74 Forget()\n        \u2193\nUnity \uac1d\uccb4 \uc0dd\uba85\uc8fc\uae30\n        \u2193\nCancellationToken \uc5f0\uacb0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \uc774\uac83\uc774 \ud575\uc2ec\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async UniTask LoadAsync(CancellationToken token)\n{\n    await SomethingAsync(token);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 MonoBehaviour\ub77c\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var token = this.GetCancellationTokenOnDestroy();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub97c \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d <strong>UniTask\uc758 \ud575\uc2ec\uc740<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>async\/await<\/code> + Unity PlayerLoop + CancellationToken + \ube44\ub3d9\uae30 Unity API + \uc5ec\ub7ec \ube44\ub3d9\uae30 \uc791\uc5c5 \uc870\ud569<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc744 \ud558\ub098\uc758 \ucf54\ub4dc \uad6c\uc870\ub85c \ubb36\ub294 \ub370 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unity\uc5d0\uc11c UniTask\ub294 Unity\uc758 \ube44\ub3d9\uae30 \uc791\uc5c5\uc744 async\/await \ubc29\uc2dd\uc73c\ub85c \ub2e4\ub8e8\uae30 \uc704\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub2e4. \ud2b9\ud788 Unity\uc5d0\uc11c\ub294 Coroutine\uacfc UniTask\uc758 \uc5ed\ud560\uc774 \uacb9\uce58\ub294 \ubd80\ubd84\uc774 \ub9ce\uc9c0\ub9cc, UniTask\ub294 C#\uc758 async\/await \ubb38\ubc95\uc744 \uadf8\ub300\ub85c \ud65c\uc6a9\ud558\uba74\uc11c Unity\uc758 PlayerLoop\uc640 \uacb0\ud569\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc774 \ud575\uc2ec\uc774\ub2e4. UniTask\ub780? UniTask\ub294 Cysharp\uc5d0\uc11c \ub9cc\ub4e0 Unity\uc6a9 \ube44\ub3d9\uae30 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \uc774\ub7f0 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uac8c \ud574\uc900\ub2e4. Coroutine\uc73c\ub85c \uc791\uc131\ud558\uba74: \ub458\uc758 \ubaa9\uc801\uc740 \ube44\uc2b7\ud558\uc9c0\ub9cc UniTask\uc5d0\uc11c\ub294 C#\uc758 async\/await\ub97c \uc0ac\uc6a9\ud560 \uc218 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[],"class_list":["post-2596","post","type-post","status-publish","format-standard","hentry","category-game"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2596"}],"version-history":[{"count":1,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2596\/revisions"}],"predecessor-version":[{"id":2597,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2596\/revisions\/2597"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}