๊ฑ Action ๋์ ์ฐ๋ฉด ๋จ
Action on๋ฒํผํด๋ฆญ;
on๋ฒํผํด๋ฆญ += ()=>{๋ฒํผ ํด๋ฆญ์ ์คํํ ์ฝ๋...} ์ด๋ ๊ฒ ํด๋์ผ๋ฉด ๋์ค์ ๊ตฌ๋ ํด์ ๊ฐ ๋๊ฐํด์ง๋๊น
void Handle() ์ด๋ฐ ํธ๋ค๋ฌ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์
{
๋ฒํผ ํด๋ฆญ์ ์คํํ ์ฝ๋...
}
๋ฒํผ์์ฑ();
on๋ฒํผํด๋ฆญ += Handle;
๋ฒํผ์ ๊ฑฐ();
on๋ฒํผํด๋ฆญ -= Handle;
์ด๋ ๊ฒ ๋ถํธํ๊ฒ ์จ์ผ ํ๋๊ฑธ
Subject<Unit> ๋ฒํผํด๋ฆญ์คํธ๋ฆผ;
๋ฒํผ์์ฑ();
IDisposable handle = ๋ฒํผํด๋ฆญ์คํธ๋ฆผ.Subscribe(_=> {๋ฒํผ ํด๋ฆญ์ ์คํํ ์ฝ๋...๊ฐํธํ๊ฒ ๋๋ค๋ก});
๋ฒํผ์ ๊ฑฐ();
handle.Dispose(); <๊ตฌ๋ ํด์ ๋จ
๋ฑ ์ด๊ธฐ๋ฅ๋ง ์จ๋ R3 ๊ฐ ํจ
์ฌ๊ธฐ์ ํ๋ฒ ๋๋๊ฐ๋ฉด
๋ฒํผํด๋ฆญ์คํธ๋ฆผ.ThrottleFirstFrame(5) // ํ๋ฒ ๋ฐ๋ํ๋ฉด 5ํ๋ ์ ๋์ ๋ ์๋ ๋ฌด์. ๊ดํด ์ต์ ๋ฑ์ ์ข์
.Subscribe(_=> {์ด์ ์ด๊ฑด ๋ฒํผ์ด ์ค๋ณต์ผ๋ก ๋ง์ด ํด๋ฆญ ๋๋ 5ํ๋ ์๋ง๋ค ํ๋ฒ์ฉ๋ง ๋ฐ๋});
์ ๋๋ง ์จ๋ ๋จ
๋ญ RX ๋ผ๊ณ ์ด๋ ต๊ฒ ์๊ฐํ ๊ฑฐ ์์ ๊ฑ Action์ ํธํ ๊ธฐ๋ฅ ์ด๊ฑฐ์ ๊ฑฐ ๋ฃ์ ํธ์ ์ ํธ์ย
์ฌ๊ธฐ์ ๋ ๋๊ฐ๋ฉด
ReactiveProperty๋ก ๋ง์ง๋ง๊ฐ ์บ์ฑ,
๋จธ์ง๋ก ์๋ก ๋ค๋ฅธ ์ ๋ ฅ ๋ฌถ๊ธฐ,
์ปด๋ฐ์ธ ๋ ์ดํฐ์คํธ๋ก ๋ง์ง๋ง ์ด๋ฒคํธ๋ค ์ทจํฉ,
using var ๋ก ํน์ ๋ฉ์๋ ์์์๋ง ํ์ฑํ,
PairWise๋ก ์ด์ ๊ฐ ์ป๊ธฐ ๋ฑ๋ฑ ์ธ๋งํ ๊ธฐ๋ฅ์ด ๋ง์๋ฐ,
์ ๋ฌธ์ ๊ฑ IDisposable ๊ตฌ๋ ํด์ ๋ ์ฐ๋กํ ๋๊ฐ์ ๋๋ง ์จ๋ ์ถฉ๋ถย
๊ณ ๋ง์ด! ์ง๊ธ์ ๋ฑ ์ ์๋ง ์ฐ๊ณ ์๋๋ฐ, ๋ชจ๋ ธ๋นํค์ด๋น์ด ์๋ช ์ด๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ AddTo this๋ก awake์์ ์จ์ disposable ์ ๊ฒฝ ์์จ์ฃผ๊ณ ์์. ๋ชจ๋ธ์ reactiveproperty๋ก ์จ์ฃผ๋๊น ์ฝ๋๊ต์ฅํ ๊ฐ๊ฒฐํด์ง. ํ์คํ ๋๋ค์ฐ๋ฉด ๊ตฌ๋ ํด์ ๋๊ฐํด์ง๋๊ฒ ๋ถํธํ๋๋ฐ ํธํ๋ค. ๋จธ์ง๊ฐ ๋ชน์ ํธํ๊ณ . disposable bag ๋ ์กฐ์๋ณด์. UI์ชฝ์ ํ์ด๋จธ๊ธฐ๋ฅ์ด๋ ๊ฐ์ด ์จ๋ณผ ๊ฒ ๊ฐ์๋ฐ ๋งํด์ค ์์๋ค๋ ์ฒดํฌํด๋ณผ๊ฒ ๊ณ ๋ง์ด!
๊ตฟ๊ตฟ AddTo(this) ๋ง ์จ๋ r3 ๊น์ ๊ฐ ๊ฑด์ง๋๊ฑฐ๋ผ๊ณ ๋ด ใ ใ
๋งํด์ค ๊ธฐ๋ฅ๋ค ํ์ธํด๋ดค๋๋ฐ ๋ค ๊ธ๋ฐฉ ์จ๋ณผ ๋ฏ? using var ์ฐ๋ฉด unitask์์ unitaskcompletionsource ์ธ ๋ ๋๋ค๋ก ๋ณ์ ๋ด๊ณ ๊ตฌ๋ ํ๊ณ ํด์ ํ๋๊ฒ ์์ ์์ด์ง ๊ฒ ๊ฐ๊ณ ...
@ํ๋ณด๋ฏธ ์ ๋ง์ผ๋ฉด MessagePipe ๋ ์จ๋ณด์ R3๋ง๋ ์ฌ๋์ด ๋ง๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์. ์ด๊ฑด await PublishAsync ๋ก ๊ตฌ๋ ์๋ค์ด ์๋ฃํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋๊ฒ๋ ๊ฐ๋ฅํจ. R3๋ ๋ฐํ์๊ฐ ๊ตฌ๋ ์๋ค์ด ์๋ฃ๋๋์ง ๊ธฐ๋ค๋ฆด ๋ฐฉ๋ฒ์ด ์์
@ํ๋ณด๋ฏธ ๊ทธ๋ฆฌ๊ณ R3์ FirstAsync() ์ฐ๋ฉด unitaskcompletionsource ์์ฒด๊ฐ ํ์์์ ๊ฑ ์ด๋ฒคํธ๊ฐ ๋ฐ๋ก ๊ฐ์ ๋๋ ค์ค
messagepipe๋ r3์ต์ํด์ง๋ฉด ์จ๋ด์ผ๊ฒ ๋ค. ์ฝ๊ฐ ์ด๋ฒคํธ์ฑ๋ ๋น์ทํ๊ฑด๊ฐ? vcontainer๋ ์จ๋ณผ ์๊ฐ์ด๋ผ. === unitaskcompletionsource ๊ฐ์ง๊ณ ๋ฌผ์ด๋ณด๋๊น ํด๋ก๋๋ firstasync์ฐ๋ฉด ํ์์๋ค๊ณ ํ๋๋ผ๊ณ . ์งฑ๊ณ ๋ง์
UniRx ๋ง์ด ์จ ๋ดค์ง๋ง ๋น๋๊ธฐ๋ UniTask ์ฌ์ฉํ๋๊ฒ ๋ ์ง๊ด์ ์ด๊ณ , ๊ฒฐ๊ตญ ๋์ค์ ์ ์ง๋ณด์๊ฐ ๋ง์ด ํ๋ค์ด์ ธ์ ๋ฐ์ํ UI ์๋ง ์ฐ๋ค๊ฐ ๋์ค์๋ ๊ทธ๋ฅ ์์ฐ๊ฒ ๋๋๋ผ.
๋ Rx๋ฅผ UniTask ๋ ๊ฒฝ์๊ด๊ณ๋ผ๊ณ ์๊ฐํด ๋ณธ์ ์ด ์๋๋ฐ... ๋น๋๊ธฐ๋ UniTask๊ณ Rx๋ ์ด๋ฒคํธ ๊ด๋ฆฌํ๋๊ฑฐ๋๊น ์๋ก ๋ค๋ฅธ๋๊ตฌ๋ผ๊ณ ๋ด ์ ๋ํ์คํฌ๋ ์ฝ๋ฃจํด์ ๋์ฒดํ๋๊ฑฐ๊ณ rx๋ event๋ Action์ ๋์ฒดํ๋๊ฑด๋ฐ ๋ถ์ผ๊ฐ ๋ค๋ฅด์ง ์๋
๋๋ ๋์ ๋ค๋ฅธ ์ฌ์ฉ์ฒ ๊ฐ์. ๊ทธ๋ฆฌ๊ณ unirx์์ r3๋ก ์ ๊ธ๋์ ๊ฐ๋ ฅํด์ก์!
@๊ธ์ด Indie(112.146)
https://tech.lonpeach.com/2022/10/29/2022-unirx/#unirx์-asyncawait์-unitask
3๋ ์ ์ธ๊ฐ
์ฐ๋๊ฑฐ๋ผ ๊ฐ๋ฌผ๊ฐ๋ฌผํ๋ฐ,
๋๋ Photon ์ด๋ Playfab ๊ฐ์ ๊ณณ์์ ๋ค์ด์ค๋ ์ฝ๋ฐฑ์ ๋ฐ์์ IObservable ๋ก ๋ฟ๋ ค์ฃผ๊ณ ,
ํด๋น ๊ฐ์ฒด์ ๊ตฌ๋ ํด์ ๊ธฐ๋ค๋ฆฌ๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ์๋๋ฐ, ๊ทธ๊ฒ ์ข ๋ง์ ์ง๋ค๋ณด๋๊น ์ ์ง๋ณด์๊ฐ ์ ์ ํ๋ค์ด์ง๋ค๋ ๋๋์ด ๋ค๊ณ ,
๋์ค์ Task ๊ธฐ๋ฐ์ ํจ์๋ก ๋ค ๊ฑท์ด๋ธ ๊ธฐ์ต์ด ๋๋ค. ์ ์ฐ๊ณ ์์ผ๋ฉด ์ ์ฐ๋ฉด ๋๊ณ , ๋ด ๊ฒฝํ์ ๊ทธ๋ฌ์ ใ ใ
์ฌ๊ธฐ์๋ ๋ฑ์ฅํด๋ฒ๋ฆฐ messagepipe... ์ผ๋จ ์ฌ์ฉ์ฒ ํ์ ํด์ ์ต์ํด์ ธ์ผ๊ฒ ๋ค.
@Indie1(1.245) ์ด ๊ธ์ ์ด๋ฒคํธ์ ์์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ก ์ฌ์ฉํ๋๊ฒ ์ ์ ๊ฑด๊ฐ์ ์ข์ง ์์๊น ์ถ์ต๋๋ค.<๋ผ๊ณ ์จ์๋๋ฐ ๋ ์ฒ์๋ถํฐ ์ด๋ ๊ฒ๋ง ์๊ฐํด์ ๋น๋๊ธฐ๋ฅผ Rx๋ก ํ ์๊ฐ์ ์ ์ด๋ถํฐ ์ํ๋๋ฏ ์ข๋ ๊ด๋ฒ์ํ๊ฒ ์ ๊ทผํ๋ค๋ฉด ๋ฌ๋์์ง๋