SlideShare a Scribd company logo
1 of 40
Download to read offline
俺はガンダム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と併⽤される
• UniTaskはTaskの最適化版
• Taskは⾮同期処理とかそういうの
• ⾮同期処理は⻑くなるのでいつかどこかで誰かが
UniRx is 何
• Reactive Extensions(Rx) のUnity向けC#ライブラリ
• ⾮同期処理、イベント処理が簡単にできる
• https://github.com/neuecc/UniRx (最後に紹介します)
• 今は基本的にUniTaskと併⽤される
• UniTaskはTaskの最適化版
• Taskは⾮同期処理とかそういうの
• ⾮同期処理は⻑くなるのでいつかどこかで誰かが
難しそうに⾒えるけど
UniRx こわくない
*「プルプルッ!
ぼく 悪いReactive Extensionsじゃないよ。
▼
今⽇しゃべること
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 のつかいかた
GameObject:ClapButton
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する
便利なTriggerの例
this.
.Subscribe()
.AddTo(this);
OnCollisionEnterAsObservable()
OnBecameInvisibleAsObservable()
OnMouseDownAsObservable()
OnTriggerExit2DAsObservable()
UniRx のつかいかた
1. イベントを発⾏する
2. イベントを他⼈も⾒れるように公開する
3. イベントをUniTaskに変換する
4. UniTaskをawaitする
便利なTriggerの例
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する
便利なTriggerの例
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する
便利なTriggerの例
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する
便利なTriggerの例
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する
便利なTriggerの例
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する
GameObject:ClapButton
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する
HOKANODAREKA
_clap.ClapAsObservable().ToUniTask(useFirstValue: true);
UniRx のつかいかた
1. イベントを発⾏する
2. イベントを他⼈も⾒れるように公開する
3. イベントをUniTaskに変換する
4. UniTaskをawaitする
AnyAnimal
_clap.ClapAsObservable().ToUniTask(useFirstValue: true);
UniRx のつかいかた
1. イベントを発⾏する
2. イベントを他⼈も⾒れるように公開する
3. イベントをUniTaskに変換する
4. UniTaskをawaitする
AnyAnimal
private async void Start()
{
await UniTask.DelayFrame(1);
Debug.Log(“1フレーム待ったよ!!!");
}
UniRx のつかいかた
何:UniTask ?
1. イベントを発⾏する
2. イベントを他⼈も⾒れるように公開する
3. イベントをUniTaskに変換する
4. UniTaskをawaitする
private async void Start()
{
await _clap.ClapAsObservable()
.ToUniTask(useFirstValue: true);
Debug.Log("起きたよ!");
}
UniRx のつかいかた
GameObject:AnyAnimal
1. イベントを発⾏する
2. イベントを他⼈も⾒れるように公開する
3. イベントをUniTaskに変換する
4. UniTaskをawaitする
private async void Start()
{
await _clap.ClapAsObservable()
.ToUniTask(useFirstValue: true);
Debug.Log("起きたよ!");
}
UniRx のつかいかた
GameObject:AnyAnimal
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 のつかいかた
GameObject:AnyAnimal
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さん作
志⿇ひぬこさん作

More Related Content

What's hot

冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
jubarecommenderの紹介
jubarecommenderの紹介jubarecommenderの紹介
jubarecommenderの紹介JubatusOfficial
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
リリースされたばかりの『Ubuntu 16.04LTS』のすべて
リリースされたばかりの『Ubuntu 16.04LTS』のすべてリリースされたばかりの『Ubuntu 16.04LTS』のすべて
リリースされたばかりの『Ubuntu 16.04LTS』のすべてHiroshi Chonan
 

What's hot (6)

冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
jubarecommenderの紹介
jubarecommenderの紹介jubarecommenderの紹介
jubarecommenderの紹介
 
JubaQLご紹介
JubaQLご紹介JubaQLご紹介
JubaQLご紹介
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
リリースされたばかりの『Ubuntu 16.04LTS』のすべて
リリースされたばかりの『Ubuntu 16.04LTS』のすべてリリースされたばかりの『Ubuntu 16.04LTS』のすべて
リリースされたばかりの『Ubuntu 16.04LTS』のすべて
 

俺はUniRxで行く