Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
torisoup
PPTX, PDF
91,199 views
はじめてのUniRx
2015/06/19 UniRx勉強会での発表資料です
Technology
◦
Read more
75
Save
Share
Embed
Embed presentation
Download
Downloaded 230 times
1
/ 94
2
/ 94
3
/ 94
4
/ 94
5
/ 94
6
/ 94
7
/ 94
8
/ 94
9
/ 94
10
/ 94
11
/ 94
12
/ 94
13
/ 94
14
/ 94
15
/ 94
16
/ 94
17
/ 94
18
/ 94
19
/ 94
20
/ 94
21
/ 94
22
/ 94
23
/ 94
24
/ 94
25
/ 94
26
/ 94
27
/ 94
28
/ 94
29
/ 94
30
/ 94
31
/ 94
32
/ 94
33
/ 94
34
/ 94
35
/ 94
36
/ 94
37
/ 94
38
/ 94
39
/ 94
40
/ 94
41
/ 94
42
/ 94
43
/ 94
44
/ 94
45
/ 94
46
/ 94
47
/ 94
48
/ 94
49
/ 94
50
/ 94
51
/ 94
52
/ 94
53
/ 94
54
/ 94
55
/ 94
56
/ 94
57
/ 94
58
/ 94
59
/ 94
60
/ 94
61
/ 94
62
/ 94
63
/ 94
64
/ 94
65
/ 94
66
/ 94
67
/ 94
68
/ 94
69
/ 94
70
/ 94
71
/ 94
72
/ 94
73
/ 94
74
/ 94
75
/ 94
76
/ 94
77
/ 94
78
/ 94
79
/ 94
80
/ 94
81
/ 94
82
/ 94
83
/ 94
84
/ 94
85
/ 94
86
/ 94
87
/ 94
88
/ 94
89
/ 94
90
/ 94
91
/ 94
92
/ 94
93
/ 94
94
/ 94
More Related Content
PPTX
未来のプログラミング技術をUnityで -UniRx-
by
torisoup
PDF
UniRx完全に理解した
by
torisoup
PDF
Observableで非同期処理
by
torisoup
PDF
UniTask入門
by
torisoup
PDF
ObserverパターンからはじめるUniRx
by
torisoup
PDF
インタフェース完全に理解した
by
torisoup
PDF
UniRx の1歩目
by
infinite_loop
PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
未来のプログラミング技術をUnityで -UniRx-
by
torisoup
UniRx完全に理解した
by
torisoup
Observableで非同期処理
by
torisoup
UniTask入門
by
torisoup
ObserverパターンからはじめるUniRx
by
torisoup
インタフェース完全に理解した
by
torisoup
UniRx の1歩目
by
infinite_loop
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
What's hot
PPTX
若輩エンジニアから見たUniRxを利用したゲーム開発
by
Hirohito Morinaga
PPT
【Unity道場】使って覚えるTileMap
by
Unity Technologies Japan K.K.
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
by
Yoshifumi Kawai
PPTX
UniRxでMV(R)Pパターンをやってみた
by
torisoup
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
by
UnityTechnologiesJapan002
PDF
【Unity】Scriptable object 入門と活用例
by
Unity Technologies Japan K.K.
PPTX
UniRxことはじめ
by
Shoichi Yasui
PPTX
大規模ゲーム開発における build 高速化と安定化
by
DeNA
PDF
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
by
Unity Technologies Japan K.K.
PDF
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
PDF
【Unity】 Behavior TreeでAIを作る
by
torisoup
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
PDF
Riderはいいぞ!
by
UnityTechnologiesJapan002
PPTX
【Unity道場 博多スペシャル 2017】Textmesh proを使いこなす
by
Unity Technologies Japan K.K.
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
by
UnityTechnologiesJapan002
PPTX
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
PDF
Unityではじめるオープンワールド制作 エンジニア編
by
Unity Technologies Japan K.K.
PDF
Deep Dive async/await in Unity with UniTask(UniRx.Async)
by
Yoshifumi Kawai
PPTX
UnityでUI開発を高速化した件
by
Grenge, Inc.
PDF
コールバックと戦う話
by
torisoup
若輩エンジニアから見たUniRxを利用したゲーム開発
by
Hirohito Morinaga
【Unity道場】使って覚えるTileMap
by
Unity Technologies Japan K.K.
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
by
Yoshifumi Kawai
UniRxでMV(R)Pパターンをやってみた
by
torisoup
【Unite Tokyo 2019】Understanding C# Struct All Things
by
UnityTechnologiesJapan002
【Unity】Scriptable object 入門と活用例
by
Unity Technologies Japan K.K.
UniRxことはじめ
by
Shoichi Yasui
大規模ゲーム開発における build 高速化と安定化
by
DeNA
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
by
Unity Technologies Japan K.K.
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
【Unity】 Behavior TreeでAIを作る
by
torisoup
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
Riderはいいぞ!
by
UnityTechnologiesJapan002
【Unity道場 博多スペシャル 2017】Textmesh proを使いこなす
by
Unity Technologies Japan K.K.
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
by
UnityTechnologiesJapan002
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
Unityではじめるオープンワールド制作 エンジニア編
by
Unity Technologies Japan K.K.
Deep Dive async/await in Unity with UniTask(UniRx.Async)
by
Yoshifumi Kawai
UnityでUI開発を高速化した件
by
Grenge, Inc.
コールバックと戦う話
by
torisoup
Viewers also liked
PDF
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
by
Toru Nayuki
PDF
Interactive UI with UniRx
by
Yuto Iwashita
PDF
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
by
Yoshifumi Kawai
PDF
Reactive Programming by UniRx for Asynchronous & Event Processing
by
Yoshifumi Kawai
PDF
UniRx - Reactive Extensions for Unity
by
Yoshifumi Kawai
PDF
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
by
Yoshifumi Kawai
PDF
The History of Reactive Extensions
by
Yoshifumi Kawai
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
by
Yoshifumi Kawai
PDF
Reactive extensions入門v0.1
by
一希 大田
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
by
Yoshifumi Kawai
PPTX
20160130 モデリング技術を学ぼう
by
bonjin6770 Kurosawa
PDF
Reactive Extensionsで非同期処理を簡単に
by
Yoshifumi Kawai
PDF
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
by
Unite2017Tokyo
PDF
UniRxでPUNを使いやすくする
by
torisoup
PDF
WebSocketでリアルタイム処理をする
by
龍一 田中
PPTX
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
by
Unity Technologies Japan K.K.
PPTX
50分でわかるブループリントについて
by
Masahiko Nakamura
PDF
【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング
by
Unity Technologies Japan K.K.
PDF
DeclarativeSql
by
Takaaki Suzuki
PPTX
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
by
慎一 古賀
「ずいぶんとダサいライティングを使っているのね」〜UniRxを用いた物理ベースライティング制御〜
by
Toru Nayuki
Interactive UI with UniRx
by
Yuto Iwashita
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
by
Yoshifumi Kawai
Reactive Programming by UniRx for Asynchronous & Event Processing
by
Yoshifumi Kawai
UniRx - Reactive Extensions for Unity
by
Yoshifumi Kawai
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
by
Yoshifumi Kawai
The History of Reactive Extensions
by
Yoshifumi Kawai
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
by
Yoshifumi Kawai
Reactive extensions入門v0.1
by
一希 大田
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
by
Yoshifumi Kawai
20160130 モデリング技術を学ぼう
by
bonjin6770 Kurosawa
Reactive Extensionsで非同期処理を簡単に
by
Yoshifumi Kawai
【Unite 2017 Tokyo】Unityで出来る『見える開発』のススメ 〜スマホゲーム「ららマジ」開発事例〜
by
Unite2017Tokyo
UniRxでPUNを使いやすくする
by
torisoup
WebSocketでリアルタイム処理をする
by
龍一 田中
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
by
Unity Technologies Japan K.K.
50分でわかるブループリントについて
by
Masahiko Nakamura
【Unity道場 2017】PlayMakerによる初めてのUnityプログラミング
by
Unity Technologies Japan K.K.
DeclarativeSql
by
Takaaki Suzuki
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
by
慎一 古賀
More from torisoup
PDF
Doozy UI 使おうぜ! #unity_lt
by
torisoup
PDF
MagicOnion~C#でゲームサーバを開発しよう~
by
torisoup
PDF
MagicOnion入門
by
torisoup
PDF
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
by
torisoup
PDF
ARでVRアバターを表示するシステムを構築しよう
by
torisoup
PDF
Unityでオニオンアーキテクチャ
by
torisoup
PDF
Photon Cloud ことはじめ
by
torisoup
PDF
アバター生放送支援アプリ「アバれぽ」
by
torisoup
PDF
UnityとNCMBでユーザ管理を実装してみた話
by
torisoup
PDF
Task vs Observable
by
torisoup
PDF
Unityでオンラインゲーム作った話
by
torisoup
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
PPTX
みくみくまうすについて&Unity で使えるコーディングノウハウ
by
torisoup
PDF
Unity講習会(初級)
by
torisoup
Doozy UI 使おうぜ! #unity_lt
by
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
by
torisoup
MagicOnion入門
by
torisoup
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
by
torisoup
ARでVRアバターを表示するシステムを構築しよう
by
torisoup
Unityでオニオンアーキテクチャ
by
torisoup
Photon Cloud ことはじめ
by
torisoup
アバター生放送支援アプリ「アバれぽ」
by
torisoup
UnityとNCMBでユーザ管理を実装してみた話
by
torisoup
Task vs Observable
by
torisoup
Unityでオンラインゲーム作った話
by
torisoup
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
みくみくまうすについて&Unity で使えるコーディングノウハウ
by
torisoup
Unity講習会(初級)
by
torisoup
はじめてのUniRx
1.
はじめてのUniRx 2015/06/19 UniRx勉強会 @toRisouP
2.
このプレゼンの内容
3.
UniRxをどう使っていけば 良いかの紹介が中心
4.
ターゲット層
5.
UniRx初~中級者向 (けどかなり中級者より)
6.
このスライドに出てくることは 皆さん知っている前提で話させて下さい
7.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
8.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
9.
自己紹介 • 名前 とりすーぷ(@toRisouP) •
本業はWeb系(最近はScalaを書いてる) • 趣味でC#/Unity開発をやってます
10.
Unityでつく(った|ってる)もの • みくみくまうす – ニコ生配信支援ツール •
みこバト~レ – 東方2次創作ゲーム • YASAI KUDAMONO – 超あほげーで作成 3つともUniRxを使ってます
11.
YASAI KUDAMONO • 超あほげー向けに18時間くらいで作ったゲーム •
UniRxを随所に使った設計になってる • ソースコードを公開しているのでUniRxの参考になれば – https://github.com/TORISOUP/YasaiKudamonoSrc
12.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
13.
Updateを消し去る • Update()をObservableに変換して Awake()/Start()内にまとめて記述する
14.
Observable化していない実装 やりたいことを直列に書く必要があり流れが追いづらい
15.
Observable化した実装
16.
比較(Observable化) やりたいことを並列に書けるので読みやすい
17.
Updateを消し去るメリット • 処理ごとに横に並べて記述ができる可能 – 処理ごとのスコープが明示されるようになる –
機能追加、削除、変更が容易にできるようになる – 記述が宣言的になり処理の意図がわかりやすくなる • Rxのオペレータがロジックの実現に使用可能 – 複雑なロジックがオペレータの組み合わせで実装できる
18.
Observable化する3つの方法 • UpdateAsObservable – 指定したgameObjectに紐づくObservableが作れる –
gameObjectのDestroy時にOnCompletedが発行される • Observable.EveryUpdate – gameObjectから独立したObservableが作れる – MonoBehaviourに関係ない場所でも使える • ObserveEveryValueChanged – Observable.EveryUpdateの派生版 – 値の変動を毎フレーム監視するObservableが作れる
19.
Observable.EveryUpdateの注意点 • Destroy時にOnCompletedが発行されない – UpdateAsObservableと同じ感覚で使うと罠を踏む このgameObjectが破棄されると nullになって例外が飛ぶ
20.
寿命管理の楽な方法 • AddTo – 指定のgameObjectが破棄されたら自動Disposeしてくれる –
OnCompletedが発行されるわけではない AddToに渡したgameObjectが Destroyされると一緒にDisposeされる
21.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
22.
ストリームでつなぐ • コンポーネントをストリームでつなぐことで Observerパターンな設計にしてしまう – 全体がイベント駆動になるようにしてしまう –
ちなみにRxはObserverパターンそのもの
23.
タイマを例にして解説 • タイマのカウントを画面に表示する – UniRxを使わずに実装 –
UniRxのストリームで実装
24.
タイマを使った例 • タイマのカウントを画面に表示する – UniRxを使わずに実装 –
UniRxのストリームで実装
25.
例)ポーリングの例
26.
例)ポーリングの例 毎フレーム、値が更新されたか確認する(ムダが多い)
27.
タイマを使った例 • タイマのカウントを画面に表示する – UniRxを使わずに実装 –
UniRxのストリームで実装
28.
まずタイマ側をストリーム化 ゲームの残り時間(秒数)を表すReactivePropertyを公開 このReactivePropertyをObserverがSubscribeする
29.
まずタイマ側をストリーム化 ゲームの残り時間(秒数)を表すReactivePropertyを公開 このReactivePropertyをObserverがSubscribeする CurrentTimeをReactivePropertyとして公開する (値が更新されるとOnNextでその値が通知される)
30.
タイマを使う側の実装
31.
タイマを使う側の実装 向こうから更新通知が送られてくる そのタイミングで描画を更新するだけ
32.
ストリームでつなぐメリット • Observerパターンが簡単に実装できる – 変化をポーリングする実装が消え去る –
必要なタイミングで必要な処理をするように記述すればよい • 既存のイベント通知機構より簡単 – C#のEventは下準備が面倒で使いたくない – UnityのSendMessageは使いたくなく – RxならObservableを用意すればOK!ラクチン!
33.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
34.
Hot/Coldな性質 Observableは性質により2種類に別けられる • Hotな性質のもの • Coldな性質
のもの
35.
Hotな性質のObservable • Observerがいなくても稼働する • ストリームを枝分かれさせ、メッセージを分配させることができる
36.
Coldな性質のObservable • Observerがいないと動作しない • Subscribeされる度に新しく生成される(枝分かれしない)
37.
例)Cold Observableの複数回Subscribe • intervalStreamを時間をズラして3回Subscribeする –
同じストリームのはずなのにOnNextのタイミングがバラバラ – それぞれ別々のストリームが生成されてしまっているため
38.
図解 intervalStream Coldな性質のintervalStreamを複数回Subscribe
39.
図解 intervalStream intervalStream intervalStream 3つとも別のストリームが生成されてしまう (それぞれ別々のタイマを持っているため時間がバラバラになる)
40.
続き)Hot変換してみる • ObservableはHotな性質に変換できる – Hot変換オペレータを挟むことでHotにすることができる –
さっきのintervalStreamをHot変換してみる
41.
図解 intervalStream Publish Hot変換オペレータを末尾に配置してからSubscribe
42.
図解 intervalStream Publish Hot変換した部分で枝分かれする (1つのタイマを3つのObserverが共有することができた) OnNextのタイミングが全て一致
43.
Hot/Coldのまとめ • Rxのハマりやすい罠の1つ – 型から判別できないので非常にやっかい –
ストリームがHotであるかColdであるか気をつける必要がある – ストリームを外に公開するときはHot変換を挟むと安全 • ほとんどのストリームはColdである – オペレータはほぼ全てColdな性質 – Subjectを内部に持つものが唯一Hotな性質である • Subject,ReactivePropety,Hot変換用オペレータなど
44.
詳しく知りたい人は • Qiitaにまとめたのでこちらを読んでください – http://qiita.com/toRisouP/items/f6088963037bfda658d3 –
http://qiita.com/toRisouP/items/c955e36610134c05c860
45.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
46.
UniRxとuGUIと組み合わせる • uGUIで使えるModel-View-○○パターン – uGUIで有用なMV○パターンが今まで存在しなかった •
MVCパターンはそもそも人によって考え方がバラバラすぎる • MVVMはデータバインディングが無いので使えない – ObservableとReactivePropertyを組み合わせると uGUI周りがスッキリ書ける
47.
Model-View-(Reactive)Presenter • MV(R)Pパターン – Model-View-Presenterパターン
+ UniRx – 3つのレイヤをObservableでシームレスにつなぐ
48.
View Presenter Model MV(R)Pの図 Presenterが ModelとViewを参照する
49.
View Presenter Model MV(R)Pの図 ReactiveProperty 内部状態の変化の通知 Subscribe Viewへ反映 xxxAsObservable ユーザ入力 Subscribe Modelに反映 Presenterが ModelとViewを参照を持つ
50.
MV(R)Pパターンの作り方 1. ModelにReactivePropertyを持たせる 2. Presenterをつくる 3.
PresenterにModelとViewを登録する 4. Presenter内で Viewの Observableと ModelのReactiveProperty をそれぞ れSubscribeしてつなぎこむ
51.
実装例)みくみくまうす • MMDモデルにニコ生のコメントを 読み上げさせるツール • UIをMV(R)Pパターンで実装してある
52.
MV(R)Pな実装例の紹介 • コメントの読み上げタイミングの調整スライダ – SliderとInputFieldが連動する –
入力された数値はConfigComponentが保持する
53.
コンポーネント間の関係図 SpeechTimingSlider Presenter SpeechTimingReactiveProperty (読み上げタイミング調整時間の実体) OnValueChangedAsObservable() スライダが変化した時にその数値を 通知するObservable SpeechTimingInputField Presenter OnEndEditAsObservable() InputFieldの入力が完了した時に その値を通知するObservable View Presenter Model ConfigComponent
54.
Modelの実装 ReactivePropertyを外に公開
55.
Presenterの実装(Slider側) Model → View View
→ Model
56.
Presenterの実装(InputField側) Model → View View
→ Model
57.
uGUIで使うまとめ • MV(R)PパターンでuGUI周りの設計が楽になる – uGUIを使う場合はおそらく現時点での最適解 –
プログラマにとってはやりやすいが、 ノンプログラマの人には触りにくく可能性に注意 • Presenterのベストな作り方はまだ模索中 – PresenterにどうやってModelとViewを登録するか – Presenterを1つにまとめるか、分割して作るか – 動的にPresenterを生成する場合はどうするか
58.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
59.
コルーチンと組み合わせる • UnityのコルーチンとObservableは相互変換可能 – コルーチンと組み合わせることでRxの弱点を補うことができる
60.
コルーチン⇔Observable • コルーチン→Observable – Observable.FromCoroutine •
Observable→コルーチン – StartAsCoroutine
61.
コルーチン⇔Observable • コルーチン→Observable – Observable.FromCoroutine •
Observable→コルーチン – StartAsCoroutine
62.
コルーチン→Observableのメリット • 複雑なストリームを簡単に作成できる – ファクトリメソッドやオペレータチェーンだけでは 作れない複雑なロジックのストリームを作ることができる •
手続き的な処理を隠蔽できる – 煩雑な処理をコルーチンに隠蔽し外からはObservableとして 宣言的に扱えるようにできる
63.
例)コルーチンからObservableを作 る • プレイヤの生死に連動したタイマ – プレイヤが生きている間のみカウントダウン –
プレイヤが死亡している間はタイマを停止する – ファクトリメソッドやオペレータチェーンで作るのは難しい
64.
タイマの定義
65.
コルーチンから変換する
66.
コルーチン中でOnNext
67.
コルーチン⇔Observable • コルーチン→Observable – Observable.FromCoroutine •
Observable→コルーチン – StartAsCoroutine
68.
Observableをコルーチン化する • StartAsCoroutine – OnCompletedが発行されるまでyield
return nullし続ける – 完了時に最後のOnNext値を1つ出力する • 非同期処理を同期処理っぽく書けるようになる – Taskのawaitに近いことをUnityコルーチンで実現できる
69.
実装例 • テキストをWebからダウンロード • ボタンでテキスト送りしながら表示する
70.
実装したコルーチン
71.
テキストのダウンロードを待つ
72.
ボタンが押されるまで待つ
73.
コルーチンと組み合わせるのまとめ • UnityのコルーチンとObservableは相互変換可能 – 複雑なストリームをコルーチンを使って実装可能 –
コルーチン中でイベントの待ち受けが可能 – 非同期処理を同期処理っぽく書くことができるようになる
74.
もくじ • 自己紹介 • UniRxの使いドコロ –
Update()を消し去る – コンポーネントをストリームでつなぐ • (補足)HotとColdについて – uGUIと組み合わせて使う – コルーチンと組み合わせる • おわりに
75.
UniRxを使う上での心得 • 「全てはストリーム」という世界観を持つ – ストリーム化できる所を探してストリームにすると便利になる –
ただしやりすぎは禁物 • Rxは万能ではない知る – やりたいことが宣言的に上手く書けない場合も当然ある – そういった場合はコルーチンと組み合わせると上手くいったりする • 設計を意識する – 行き当たりばったりの設計でUniRxを使うのは非常に危険 – Observerパターンのメリット・デメリットが活かせる
76.
Qiitaにいろいろまとめました • 過去にいくつか記事を書いているので参考になれば – http://qiita.com/toRisouP/items/48b9fa25df64d3c6a392
77.
ありがとうございました @toRisouP
79.
例)Animation同期をキレイに書く • ユニティちゃんがボールを投げる – アニメーションに同期して投げる –
投げるボールのパラメータも指定できる
80.
ボールを投げるアニメーション
81.
ボールを投げるアニメーション このタイミングでボールを生成して射出する
82.
AnimationEvent • このタイミングで「BallThrowEvent」が定義し てある
83.
UniRxを使わずに書くとこうなる
84.
UniRxを使わずに書くとこうなる ここでAnimation再生開始
85.
UniRxを使わずに書くとこうなる ここにコールバック
86.
UniRxを使わずに書くとこうなる 一連の処理なのに 分断されてしまう
87.
UniRxを使わずに書くとこうなる 一時保存用の変数
88.
これをStartAsCoroutineで書くと
89.
これをStartAsCoroutineで書くと AnimationEventをObservable化
90.
これをStartAsCoroutineで書くと コルーチン
91.
これをStartAsCoroutineで書くと Animation開始
92.
これをStartAsCoroutineで書くと コールバックが来るまで yield return
93.
これをStartAsCoroutineで書くと コールバックが混ざった非同期処理を 同期処理っぽく書けた
94.
これをStartAsCoroutineで書くと 一時保存変数も消え去った
Download