๐Ÿ”ซUniRX

Why Rx?

๋ณดํ†ต, Unity์—์„œ Network ์ž‘์—…์—๋Š” WWW ์™€ Coroutine ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Coroutine์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ  ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ์ž‘์—…์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  1. Coroutine์€ ๋ฐ˜ํ™˜ ํ˜•์‹์ด IEnumerator ์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  2. Coroutine์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. yield return ๋ฌธ์€ try-catch ๊ตฌ์กฐ๋กœ ๋‘˜๋Ÿฌ ์Œ€ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ์ž‘์—…์ด ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ๊ฑฐ๋Œ€ํ•œ monolithic IEnumerator๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. Rx๋Š” ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ "asychronous blues" ๋ฅผ ๊ณ ์นฉ๋‹ˆ๋‹ค. Rx๋Š” observable ์ปฌ๋ ‰์…˜๊ณผ LINQ ์Šคํƒ€์ผ ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฐ ์ด๋ฒคํ‹ฐ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. game loop(๋ชจ๋“  Update, OnCollisionEnter, ๋“ฑ), sensor data (Kinect, Leap Motion, VR Input, ๋“ฑ)๋Š” ๋ชจ๋“  ์œ ํ˜•์˜ ์ด๋ฒคํŠธ ์ž…๋‹ˆ๋‹ค. Rx๋Š” LINQ ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ support time-base ์ž‘์—…์„ ์ง€์›ํ•˜๋Š” reactive sequences๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค. Unity๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ, UniRx๋Š” join, cancels, accessing GameObject ๋“ฑ์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. UniRx๋Š” uGUI๋กœ UI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋„์™€์ค๋‹ˆ๋‹ค. ๋ชจ๋“  UI ์ด๋ฒคํŠธ(clicked, value changed, etc)๋Š” UniRx event stream ์œผ๋กœ ๋ณ€ํ™˜ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Unity๋Š” C # ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ†ตํ•ด 2017 ๋…„๋ถ€ํ„ฐ async/await๋ฅผ ์ง€์›ํ•˜๋ฉฐ UniRx ์ œํ’ˆ๊ตฐ ํ”„๋กœ์ ํŠธ๋Š” Unity์™€ ๋”์šฑ ๊ฐ€๋ณ๊ณ  ๊ฐ•๋ ฅํ•œ sync/await ํ†ตํ•ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Cysharp / UniTask๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค .

Last updated