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
64
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
俺はUniRxで行く
I choose the form of UniRx.
vailKAKO
February 15, 2020
More Decks by vailKAKO
See All by vailKAKO
俺はEditor拡張で行く ~ゼロから便利機能を作るまで
vailkako
0
470
Other Decks in Programming
See All in Programming
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
Cloudflare is Agents
chimame
0
170
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
300
Flow は今どうなっているか
mizdra
PRO
0
660
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
190
AIを紡ぐPMのお話
swdtkuy
0
120
メールのエイリアス機能を履き違えない
isshinfunada
0
250
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
130
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
Go 1.27 における memory allocation の高速化
andpad
0
290
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
Building a Meta Ray-Ban display app
akkeylab
0
170
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Building Applications with DynamoDB
mza
96
7.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
930
Designing Powerful Visuals for Engaging Learning
tmiket
1
500
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Technical Leadership for Architectural Decision Making
baasie
3
510
Designing for Performance
lara
611
70k
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さん作 志⿇ひぬこさん作