์›๋ฌธ)ใ€Unityใ€‘่ค‡ๆ•ฐใฎ้žๅŒๆœŸๅ‡ฆ็†ใ‚’็›ดๅˆ—ใซๅฎŸ่กŒใ™ใ‚‹ๆฉŸๆง‹ใ‚’ไฝœใ‚‹


์ค‘๊ตญ ๊นƒ ํ—ˆ๋ธŒ ๋ณด๋Š”๋ฐ, ์Šคํ‚ฌ์‹œ์Šคํ…œ ๊ตฌํ˜„์—์„œ ์˜ํ–ฅ๋ฐ›์€ ์ฝ”๋“œ ๋ณด๋Š” ์ค‘์— ์ฐพ์•„์„œ ๊ฐ€์ ธ์™€๋ดค๋‹ค

์ผ๋ณธ์ชฝ ์ฝ”๋“œ ๊ฐ™์€๋ฐ,ย 


๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์‘์šฉ๋ฐฉ๋ฒ•์€ ์ฃผ๋ฌธ ์‹œ์ „์„ ๋‚˜ํƒ€๋‚ด๋Š” ์บ์ŠคํŒ…์„ ํƒœ์Šคํฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ์— ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋˜๊ณ 

์ด๋Ÿฌํ•œ ํƒœ์Šคํฌ๋ฅผ ํƒ€์ด๋ฐ๊ณผ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ, ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ด์„œ ์กฐ์ •ํ•ด์„œ ์‹คํ–‰ํ•ด๋‘๋ฉด


์Šคํ‚ฌ์„ ์„ ์ž…๋ ฅ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?ย 

๋ญ ๋ฌผ๋ก  ๋„ˆ๋„ค๊ฐ€ ์ž˜ ์•Œ๊ฒ ์ง€



์†Œ๊ฐœ

38e5c723abd531a04e81d2b628f1756d8abfb187

(URL ๋ชฉ๋ก์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š”๋ฐ, ํ•œ๊บผ๋ฒˆ์— ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ๊ฐ™์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.)


์ด๋Ÿฌํ•œ '์ง๋ ฌ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜'์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.


์ „์ œ์กฐ๊ฑด


UniTask ์‚ฌ์šฉ

(์—ญ์ฃผ: ์ค‘๊ตญ์• ๋“คํ•œํ…Œ ๋„๋ฆฌ ํผ์ง„ ์Šคํ‚ฌ ์‹œ์Šคํ…œ๋„ Unitask ๋งค๋‹ˆ์ €๋ฅผ ๋งŒ๋“  ํ›„, ์ด ๋น„์Šทํ•˜๊ฒŒ ์“ฐ๋”๋ผ)


๊ตฌํ˜„๋ฐฉ๋ฒ•


Queue ์‚ฌ์šฉ

์šฐ์„  ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ฆด ๋ฐฉ๋ฒ•์€ Queue<T>๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•


https://gdl.space/fuduyuqote.cs


GDL Space - A Space for GDL code.GDL Space - A Space for GDL code.gdl.space



(์—ญ์ฃผ:GDL์— ๊ตฌํ˜„ ๋ณต๋ถ™ํ•ด๋†จ์œผ๋‹ˆ ์จ๋ผ)


Queue๋ฅผ ์ค€๋น„ํ•ด๋‘๊ณ , ๊ทธ๊ฒƒ์„ while์—์„œ ํ•œ ๊ฐœ์”ฉ ๊บผ๋‚ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด ๊ตฌํ˜„์˜ ์žฅ์ ์œผ๋กœ๋Š” Queue๋ฅผ PriorityQueue๋กœ ๋ฐ”๊พธ๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

'์ง๋ ฌ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๋™์‹œ์— N๊ฐœ๊นŒ์ง€ ๋ณ‘๋ ฌ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๊ณ  ์‹ถ๋‹ค'์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๋™์ž‘๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹จ์ ์€ 'Queue์˜ ๋‚ด์šฉ๋ฌผ์ด ๋‹ค ๋–จ์–ด์กŒ์„ ๋•Œ'๋ฅผ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค๋Š” ์ ์ธ๋ฐ, Queue๊ฐ€ ๋น„์›Œ์ง€๋ฉด ๋ฃจํ”„ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—

๋‹ค์Œ ๋ฒˆ ํƒœ์Šคํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ์ ์— ๋‹ค์‹œ ๋ฃจํ”„๋ฅผ ๋ฐœ๋™์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IUniTaskAsyncEnumerable ์‚ฌ์šฉ๋ฒ•


๋Œ€๊ธฐ ๊ฐ€๋Šฅํ•œ Queue<T>๋ฅผ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, '๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ณ , 0์ด๋ฉด ์ƒˆ๋กœ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค'๋Š” ์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด IUniTaskAsyncEnumerable<T>์ด๊ณ , ๊ทธ ๊ตฌํ˜„์œผ๋กœ Channel์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค


https://gdl.space/qupelabiwe.cs


(์—ญ์ฃผ: ์—ญ์‹œ Gdl ์ŠคํŽ˜์ด์Šค์— ์ €์žฅํ•ด๋†จ์œผ๋‹ˆ ๋ณต๋ถ™ํ•ด๋ผ)


์žฅ์ ์€ Queue๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๋‹จ์ ์€ ๊ทธ๋ƒฅ ์Œ“์ธ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Priority ์ง€์ •(์—ญ์ฃผ:์šฐ์„ ์ˆœ์œ„ ์ง€์ •) ๋“ฑ์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์ผ๋‹จ LINQ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ด ์šฉ๋„์˜ ํ™•์žฅ์„ฑ์€ ๊ทธ๋‹ค์ง€ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.


(์—ญ์ฃผ: ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, channelExecutor ๊ตฌํ˜„ํ•˜๋ฉด ๋“ฑ๋ก๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ, ์ด๋Š” ์„ ์ž…์„ ์ถœ(FIFO)๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๋จ ,๋‹ค๋ฅด๊ฒŒ ๋งํ•ด์„œ,

์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ชจ๋‘ ๊ฐ™๋‹ค๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ. ๋‚ด ์ƒ๊ฐ์— ์—ฌ๊ธฐ์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์šฐ์„ ์ˆœ์œ„ ์ˆ˜์ค€์„ ๋‚˜๋ˆ„๊ณ , Func<CancellationToken,UniTask> ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ํ™•์žฅํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ˆ˜๋ฝํ•˜๋„๋ก ๋“ฑ๋ก๋ฐฉ๋ฒ•์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ ๊ฐ™๊ธดํ•จ. ๋ฌผ๋ก  ๋‚˜๋Š” C# 7๊ฐœ์›”์ฐจ๊ธฐ๋•Œ๋ฌธ์— ๋„ˆ๋„ค๊ฐ€ ๋” ์ž˜ ๋งŒ๋“ค๊ฑฐ๋ผ ๋ฏฟ๋Š”๋‹ค)



์š”์•ฝ

Queue<T>๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์กฐ๊ธˆ ๋ฒˆ๊ฑฐ๋กญ์ง€๋งŒ ํ™•์žฅ์„ฑ์ด ์žˆ๋‹ค.

Channel<T>๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด IUniTaskAsyncEnumerable์˜ ์žฅ์ ์„ ์‚ด๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

์žฅ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.


์˜ค๋งˆ์ผ€(ใŠใพใ‘)


์ด๋ฒˆ ์†Œ๊ฐœ์—์„œ ๋‚˜์˜จ ChannelExecutor๋ฅผ ๊ฐ€์ง€๊ณ  ์ ์  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด ๋‚˜๊ฐ€๋‹ค ๋ณด๋‹ˆ ์ด๋ ‡๊ฒŒ ์™„์„ฑ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ชจ์ฒ˜๋Ÿผ์ด๋‹ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ณต๊ฐœํ•ด ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

https://gdl.space/ucudotanid.m

GDL ์ŠคํŽ˜์ด์Šค์— ์ €์žฅํ•ด๋’€์œผ๋‹ˆ ์ฐพ์•„์„œ๋ด๋ผ ใ…‚ใ…‚