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
34
俺はUniRxで行く
I choose the form of UniRx.
vailKAKO
February 15, 2020
Tweet
Share
More Decks by vailKAKO
See All by vailKAKO
俺はEditor拡張で行く ~ゼロから便利機能を作るまで
vailkako
0
380
Other Decks in Programming
See All in Programming
Ruby Pattern Matching
bkuhlmann
0
920
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
240
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
220
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
110
StreamlitとTerraformでデータカタログを作った話
gussan0223
0
300
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
3
270
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
3
760
Folding Cheat Sheet #1
philipschwarz
PRO
0
210
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
100
Elm 0.19.0 Changes
bkuhlmann
0
480
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
170
Git Rebase
bkuhlmann
11
1.6k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
24
5.8k
Visualization
eitanlees
135
14k
Testing 201, or: Great Expectations
jmmastey
27
6.3k
GraphQLとの向き合い方2022年版
quramy
31
12k
The Language of Interfaces
destraynor
151
23k
Building an army of robots
kneath
300
41k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Debugging Ruby Performance
tmm1
70
11k
Designing with Data
zakiwarfel
95
4.8k
Learning to Love Humans: Emotional Interface Design
aarron
266
39k
Side Projects
sachag
451
41k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
9
8.3k
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さん作 志⿇ひぬこさん作