Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
俺はUniRxで行く
Search
vailKAKO
February 15, 2020
Programming
0
55
俺はUniRxで行く
I choose the form of UniRx.
vailKAKO
February 15, 2020
Tweet
Share
More Decks by vailKAKO
See All by vailKAKO
俺はEditor拡張で行く ~ゼロから便利機能を作るまで
vailkako
0
430
Other Decks in Programming
See All in Programming
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
150
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
320
Navigating Dependency Injection with Metro
zacsweers
3
960
The Past, Present, and Future of Enterprise Java with ASF in the Middle
ivargrimstad
0
120
Cache Me If You Can
ryunen344
2
1.4k
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
160
Ruby Parser progress report 2025
yui_knk
1
440
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
180
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
500
OSS開発者という働き方
andpad
5
1.7k
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
Designing Experiences People Love
moore
142
24k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
We Have a Design System, Now What?
morganepeng
53
7.8k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Statistics for Hackers
jakevdp
799
220k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
112
20k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Transcript
Զ ΨϯμϜ UniRxͰߦ͘ I choose the form of Gundam UniRx
Speaker : Kako Time : about 9.5m
Kakoɺ͓લͩΕͩ Ճݹ(26͏গ͠Ͱ27) ݽߴͷUnityઓ࢜(ϑϦʔϥϯε) ؔδϟχͷਪؙ͠ࢁ͘Μ ෑ͔Βདྷͯ·͢
͜͏͍͏ͷΛָʹΓ͍ͨ͜ͱͬͯ͋Γ·ͤΜ͔? ͳʹ͔͠ΒͷΞΫγϣϯͰɺ ঢ়گʹԠͯ͡ෳͷର͕ ֤ʑͷԠΛ͢Δ ͱ͜ΖͰ
ͳʹ͔͠ΒͷΞΫγϣϯͰɺ ঢ়گʹԠͯ͡ෳͷର͕ ֤ʑͷԠΛ͢Δ ԶUniRx+UniTaskͰߦ͘
UniRx is Կ • Reactive Extensions(Rx) ͷUnity͚C#ϥΠϒϥϦ • ඇಉظॲཧɺΠϕϯτॲཧ͕؆୯ʹͰ͖Δ •
https://github.com/neuecc/UniRx (࠷ޙʹϦϯΫ͋Γ) • ࠓجຊతʹUniTaskͱซ༻͞ΕΔ • UniTaskTaskͷ࠷దԽ൛ • Taskඇಉظॲཧͱ͔ͦ͏͍͏ͷ • ඇಉظॲཧ͘ͳΔͷͰ͍͔ͭͲ͔͜Ͱ୭͔͕
UniRx is Կ • Reactive Extensions(Rx) ͷUnity͚C#ϥΠϒϥϦ • ඇಉظॲཧɺΠϕϯτॲཧ͕؆୯ʹͰ͖Δ •
https://github.com/neuecc/UniRx (࠷ޙʹհ͠·͢) • ࠓجຊతʹUniTaskͱซ༻͞ΕΔ • UniTaskTaskͷ࠷దԽ൛ • Taskඇಉظॲཧͱ͔ͦ͏͍͏ͷ • ඇಉظॲཧ͘ͳΔͷͰ͍͔ͭͲ͔͜Ͱ୭͔͕ ͦ͠͏ʹݟ͑Δ͚Ͳ UniRx ͜Θ͘ͳ͍ ˎʮϓϧϓϧο ΅͘ѱ͍3FBDUJWF&YUFOTJPOT͡Όͳ͍Αɻ ˝
ࠓ͠ΌΔ͜ͱ 1. UniRxͷೖΕํ 2. Πϕϯτॲཧͱ͔ͷ͍ํ • ͬͱศརͳ͍ํ͕େྔʹ͋Γ·͢ • UpdateΛݟ্͔͚ ͔͍ͭ·ͤΜ
• UniTaskͪΐͬͱ͚ͩΓ·͢ • interfaceΓ͚ɺDI؆୯ͷͨΊʹΓ·ͤΜ
ࠓΔ͜ͱ ԻΛฉ͍ͯ……
ࠓΔ͜ͱ ى͖Δ
1.UniRxͷ͍Ε͔ͨ ~UniTaskͦ͑ͯ~
UniRx ͱUniTaskͷ͍Ε͔ͨ 1. GitHub͔Βμϯϩʔυ 1. UnityPackageΛD&D 2. Ҏ্ 2. AssetStore͔Βimport
1. Ҏ্
2.Πϕϯτॲཧͱ͔ͷ͍ํ
UniRx ͷ͔͍͔ͭͨ εΫϦϓτʹ͏४උ using UniRx; using UniRx.Triggers; Using UniRx.Async;//͜ΕUniTask using
UnityEngine;
UniRx ͷ͔͍͔ͭͨΠϕϯτॲཧฤ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
using System; using UniRx; using UniRx.Triggers; using UnityEngine; public class
ClapButton : MonoBehaviour { private Subject<int> _clapSubject = new Subject<int>(); private int _numOfClap = 0; } UniRx ͷ͔͍͔ͭͨ (BNF0CKFDU$MBQ#VUUPO 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
_clapSubject.Subscribe(x=>{}); _clapSubject.OnNext(_numOfClap); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ
4. UniTaskΛawait͢Δ ൃߦ ߪಡ
_clapSubject .Subscribe(x => { Debug.Log(x.ToString()); }); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ
2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ߪಡ
_clapSubject .Subscribe(x => { Debug.Log(x.ToString()); }); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ
2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ߪಡ
_clapSubject .Subscribe(x => { Debug.Log(x.ToString()); }) .AddTo(this); UniRx ͷ͔͍͔ͭͨ 1.
ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ߪಡ
private void Start() { _clapSubject .Subscribe(x => { Debug.Log(x.ToString()); })
.AddTo(this); } UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ߪಡ
OnCollisionEnterAsObservable() OnBecameInvisibleAsObservable() OnMouseDownAsObservable() OnTriggerExit2DAsObservable() UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ
3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ศརͳ5SJHHFSͷྫ UIJT 4VCTDSJCF "EE5P UIJT
OnCollisionEnterAsObservable() OnBecameInvisibleAsObservable() OnMouseDownAsObservable() OnTriggerExit2DAsObservable() UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ
3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ศརͳ5SJHHFSͷྫ
this.OnMouseDownAsObservable().Subscribe(_ => { _numOfClap++; _clapSubject.OnNext(_numOfClap); MyAnimator.SetTrigger("Echo"); var etmp = Instantiate(echo);
etmp.SetActive(true); Destroy(etmp, 1); }).AddTo(_disposable); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ศརͳ5SJHHFSͷྫ
this.OnMouseDownAsObservable().Subscribe(_ => { _numOfClap++; _clapSubject.OnNext(_numOfClap); MyAnimator.SetTrigger("Echo"); var etmp = Instantiate(echo);
etmp.SetActive(true); Destroy(etmp, 1); }).AddTo(_disposable); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ศརͳ5SJHHFSͷྫ
this.OnMouseDownAsObservable().Subscribe(_ => { _numOfClap++; _clapSubject.OnNext(_numOfClap); MyAnimator.SetTrigger("Echo"); var etmp = Instantiate(echo);
etmp.SetActive(true); Destroy(etmp, 1); }).AddTo(_disposable); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ศརͳ5SJHHFSͷྫ
this.OnMouseDownAsObservable().Subscribe(_ => { _numOfClap++; _clapSubject.OnNext(_numOfClap); MyAnimator.SetTrigger("Echo"); var etmp = Instantiate(echo);
etmp.SetActive(true); Destroy(etmp, 1); }).AddTo(_disposable); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ ศརͳ5SJHHFSͷྫ
using System; using UniRx; using UniRx.Triggers; using UnityEngine; public class
ClapButton : MonoBehaviour { public IObservable<int> ClapAsObservable() { return _clapSubject; } } UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ (BNF0CKFDU$MBQ#VUUPO
using System; using UniRx; using UniRx.Triggers; using UnityEngine; public class
HOKANODAREKA : MonoBehaviour { private ClapButton _clap => FindObjectOfType<ClapButton>(); private void Start() { _clap.ClapAsObservable().Subscribe(x =>{/*NANIKA*/}).AddTo(this); } } UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ )0,"/0%"3&,"
_clap.ClapAsObservable().ToUniTask(useFirstValue: true); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ
4. UniTaskΛawait͢Δ "OZ"OJNBM
_clap.ClapAsObservable().ToUniTask(useFirstValue: true); UniRx ͷ͔͍͔ͭͨ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ
4. UniTaskΛawait͢Δ "OZ"OJNBM
private async void Start() { await UniTask.DelayFrame(1); Debug.Log(“1ϑϨʔϜͬͨΑ!!!"); } UniRx
ͷ͔͍͔ͭͨ Կ6OJ5BTLʜ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
private async void Start() { await _clap.ClapAsObservable() .ToUniTask(useFirstValue: true); Debug.Log("ى͖ͨΑ!");
} UniRx ͷ͔͍͔ͭͨ (BNF0CKFDU"OZ"OJNBM 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
private async void Start() { await _clap.ClapAsObservable() .ToUniTask(useFirstValue: true); Debug.Log("ى͖ͨΑ!");
} UniRx ͷ͔͍͔ͭͨ (BNF0CKFDU"OZ"OJNBM 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
private async void Start() { await _clap.ClapAsObservable() .SkipWhile(x => x
< sleepLevel) .ToUniTask(useFirstValue: true); Debug.Log(sleepLevel.ToString() + ”ճզຫͯ͠ى͖ͨΑ!”); } UniRx ͷ͔͍͔ͭͨ (BNF0CKFDU"OZ"OJNBM 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
UniRx ͷ͔͍͔ͭͨΠϕϯτॲཧฤ 1. ΠϕϯτΛൃߦ͢Δ 2. ΠϕϯτΛଞਓݟΕΔΑ͏ʹެ։͢Δ 3. ΠϕϯτΛUniTaskʹม͢Δ 4. UniTaskΛawait͢Δ
ͨ͠ͷ͕ͪ͜ΒͰ͢
·ͱΊ • 10(ϓϩδΣΫτ੍࡞30)Ͱࠓͷ͕Ͱ͖Δ • UniRx͜Θ͘ͳ͍ • UniTaskා͘ͳ͍ • ͰέʔεόΠέʔε
ࢀߟ • ͬͱͪΌΜͱΓ͍ͨํ • https://qiita.com/toRisouP/items/3ced60a755ab297eb463#unirx---unitask • @toRisouP͞Μͷهࣄ(ܝࡌڐՄ͋Γ͕ͱ͏͍͟͝·͢) • UniRx •
https://github.com/neuecc/UniRx • UniTask(UniRx.Async) • https://github.com/Cysharp/UniTask
Thanks! RDAGさん作 むじさん作 ムッシュさん作 えんぺるさん作 阿宗さん作 アルコさん作 だー1さん作 志⿇ひぬこさん作
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ RDAGさん作 むじさん作 ムッシュさん作 えんぺるさん作 阿宗さん作 アルコさん作 だー1さん作 志⿇ひぬこさん作