์ฝ”๋ฃจํ‹ด ์ž์ฃผ ๊ป์ผฐํ•˜๋ฉด GC๊ฐ€ ์‹ฑ๊ธ€๋ฒ™๊ธ€ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ด๋ฒˆ ์—ฐ์Šต์ž‘๋ถ€ํ„ฐ๋Š” UniTask๋กœ ๊ต์ฒดํ•ด์„œ ์“ฐ๊ณ  ์žˆ์Œ



๊ทธ๋Ÿฐ๋ฐ ์ง€๊ธˆ ์“ฐ๊ณ  ์žˆ๋Š” ํŒŒํŠธ๊ฐ€

ํŠน์ • ์กฐ๊ฑด์—์„œ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์ ๋ฉธ์‹œ์ผœ์•ผ ํ•˜๋Š” ๊ฑด๋ฐ ๊ทธ ์กฐ๊ฑด์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด ์Šคํ”„๋ผ์ดํŠธ ์ž์ฒด๊ฐ€ ๊บผ์ง€๋ฉด์„œ ๋‹น์—ฐํžˆ ์ ๋ฉธํ•˜๋Š” ํ˜„์ƒ๋„ ์‚ฌ๋ผ์ง€๊ณ 

๊ทธ ์กฐ๊ฑด์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค์‹œ ์Šคํ”„๋ผ์ดํŠธ๊ฐ€ ์ ๋ฉธ๋จ

๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์ƒํƒœ์—์„œ ์ง„์ž…ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์Šคํ”„๋ผ์ดํŠธ๊ฐ€ ์ˆ˜์‹œ๋กœ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ ๋ฉธํ•˜๋Š” ์ž‘์—…์„ ๋ฉˆ์ท„๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ •์ด ์ƒ๋‹นํžˆ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š”๋ฐ

์›๋ž˜๋ผ๋ฉด ํด๋ž˜์Šค ๋‚ด์—์„œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ์ค‘๋‹จ์šฉ ํ† ํฐ ๋งŒ๋“ค์–ด๋‘๊ณ  ๊ทธ๊ฑธ ์ด์šฉํ•˜๋ ค๊ณ  ํ–ˆ์Œ

์ฐพ์•„๋ณด๋‹ˆ๊นŒ ํ•œ ๋ฒˆ ์บ”์Šฌ ๋ช…๋ น ์š”์ฒญํ•œ ํ† ํฐ์€ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ชจ์–‘์ž„

๊ทธ๋ž˜์„œ ์ผ๋‹จ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ์งœ๊ธด ํ•จ



ย  ย  private async UniTaskVoid BlinkMark(Sprite[] swapSprite)

ย  ย  {

ย  ย  ย  ย  CancellationTokenSource stopTaskToken = new CancellationTokenSource();ย  ย  ย  //๋งˆํฌ ๊นœ๋นก์ด๊ฒŒ ํ•˜๋Š” ์ค‘๋‹จ์šฉ ํ† ํฐ

ย  ย  ย  ย  int i = 0;


ย  ย  ย  ย  while (taskWorkManage)ย  ย //taskWorkManage๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์„ ์–ธ๋˜์–ด true false๊ฐ€ ๋ฐ”๋€๋‹ค

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  await UniTask.Delay(TimeSpan.FromSeconds(1), cancellationToken: stopTaskToken.Token);ย  ย //1์ดˆ๋งˆ๋‹ค ๋งˆํฌ ๊ต์ฒด

ย  ย  ย  ย  ย  ย  i = (i + 1) % 2;

ย  ย  ย  ย  ย  ย  mark.sprite = swapSprite[i];

ย  ย  ย  ย  }


ย  ย  ย  ย  stopTaskToken.Cancel();

ย  ย  ย  ย  stopTaskToken.Dispose();

ย  ย  }



์—ฌ๊ธฐ์„œ ์งˆ๋ฌธ


์ €๊ฑฐ ๋งค๋ฒˆ new() ํ•˜๊ฒŒ ํ•ด๋„ ๋˜๋Š” ๊ฑฐ ๋งž์Œ? ๋ฉ”๋ชจ๋ฆฌ ์ชฝ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ ์ง€ ์•ˆ ๋ ์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ๋„ค

๋ญ ๊ทธ๊ฑฐ ์•ˆ ํ•˜๋ฉด ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ๋‚˜ ์‹ถ๊ธด ํ•˜์ง€๋งŒ

๋‚˜์ค‘์— ํ”„๋กœํŒŒ์ผ๋ง ํ•˜๋ฉด ํ™•์‹คํ•ด์ง€๊ฒ ์ง€๋งŒ ์ผ๋‹จ ํ˜น์‹œ๋‚˜ ์‹ถ์–ด์„œ ๋ฌผ์–ด ๋ด„

์•„๋‹ˆ๋ฉด ๋” ๋‚˜์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์„์ง€๋„ ์กฐ๊ธˆ ๊ถ๊ธˆํ•จ