์ด๋ฒˆ์— UniTask ์•Œ๊ฒŒ๋˜์„œ ๊ณต๊ฒฉ์†๋„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งค๋ฒˆ ๊ณต๊ฒฉํ•ด์•ผ ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ™์€๊ฑฐ ์ฝ”๋ฃจํ‹ด ์“ฐ๋‹ค๊ฐ€ ์œ ๋‹ˆํƒœ์Šคํฌ๋กœ ๋Œ€์ฒดํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฑด๋ฐ...


์œ ๋‹ˆํƒœ์Šคํฌ ์ ์šฉํ•ด์„œ ์—๋””ํ„ฐ์—์„œ ๋Œ๋ ค๋ณด๋‹ˆ CPU๋ž‘ FPS๊ฐ€ ๋„ˆ๋ฌด ๋Š๊ฒจ์„œ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ํ™•์ธํ•ด๋ณด๋‹ˆ ํ”„๋ ˆ์ž„๋งˆ๋‹ค GC๊ฐ€ ๋„ˆ๋ฌด ๋‚˜์˜ค๋”๋ผ๊ณ ...


๊ทธ๋ž˜์„œ UniTask ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋ ค๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค๋ดค๋Š”๋ฐ Deep ํ”„๋กœํŒŒ์ผ ํ•ด๋ณด๋‹ˆ ๊ฒฐ๊ณผ๊ฐ€ ์ €๋ž˜...


์™œ ์ด๋Ÿด๊นŒ? ๊ณ ์ˆ˜๋‹˜๋“ค ๋„์™€์ค˜....


์œ ๋‹ˆํ‹ฐ ๋ฒ„์ „์€ 2022.3.25f1์ด๊ณ , UniTask๋Š” ์ œ์ผ ์ตœ์‹  ๋ฒ„์ „ 2.5.4์•ผ.

์ด๋ฒˆ์— ์ƒˆ๋กœ ๊ฒŒ์ž„ ๋งŒ๋“œ๋Š”๊ฑฐ๋ผ ๊ทธ๋ƒฅ ์œ ๋‹ˆํ‹ฐ LTS ์ตœ์‹ ๋ฒ„์ „ ๋‚˜์˜ค๋ฉด ๋ฐ”๊พธ๊ณ  ์žˆ๋Š”๋ฐ ์œ ๋‹ˆํ‹ฐ ๋ฒ„์ „ ๋•Œ๋ฌธ์ผ๊นŒ?



using System.Threading;

using Cysharp.Threading.Tasks;

using Sirenix.OdinInspector;

using UnityEngine;

ย 

public class CoroutineUniTaskTest : MonoBehaviour

{

ย  ย  float _duration = 1f;

ย  ย  private CancellationTokenSource _cts = new();

ย  ย  private void Start()

ย  ย  {

ย  ย  ย  ย  ObjectRotateUniTaskByToken().Forget();

ย  ย  }

ย  ย  private async UniTask ObjectRotateUniTaskByToken()

ย  ย  {

ย  ย  ย  ย  while (true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  transform.Rotate(Vector3.one * Time.deltaTime * 60);

ย  ย  ย  ย  ย  ย  await UniTask.Yield(_cts.Token);

ย  ย  ย  ย  }

ย  ย  }


ย  ย  [Button]

ย  ย  public void EndToken()

ย  ย  {

ย  ย  ย  ย  _cts.Cancel();

ย  ย  ย  ย  _cts.Dispose();

ย  ย  }

}


a04424ad2c06782ab47e5a67ee91766dc28ff1ecd7acc7cabf10d7c75cd4d021424b487fcd0756931dc6514ff4d95c