Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
俺はUniRxで行く
Search
vailKAKO
February 15, 2020
Programming
69
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
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
290
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
390
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
ActionController meets Protocol Buffers
sorah
0
520
残高管理から台帳サービスへの進化
artoy
1
200
Jetpack Compose Mechanisms
skydoves
3
820
すこし踏み込む CancellationToken
htkym
2
1.7k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
The Curse of the Amulet
leimatthew05
3
16k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
How GitHub (no longer) Works
holman
316
150k
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さん作 志⿇ひぬこさん作