Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

4

Share

Download to read offline

UniRxHandsOnVol1

Download to read offline

UniRxHandsOnVol1の資料です

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

UniRxHandsOnVol1

  1. 1. Copyright © 2018 TIS Inc. All rights reserved. 戦略技術センター 大島昇時 緩く触って覚える ゼロからしっかり覚える
  2. 2. Copyright © 2018 TIS Inc. All rights reserved. 自己紹介 名前 : 大島昇時 ハンドル : さんすうP @Sansuusetto 所属 : TIS株式会社 戦略技術センター 1
  3. 3. Copyright © 2018 TIS Inc. All rights reserved. ・三菱のグループ会社で、組み込み系エンジニア約4年 ・映像系の中小で、マネージャ、映像制作、VRゲーム制作約3年 ・TISに2018/02入社。xRの研究開発を行う 2 経歴
  4. 4. Copyright © 2018 TIS Inc. All rights reserved. Agenda 導入編 ・UniRxとは ・UniRxで出来ること 基本編 ・Subject, OnNext, Subscribe ・Lesson_01 ・ストリーム ・オペレータ ・Lesson_02 応用編 ・Lesson_03 ・Lesson_04 3
  5. 5. Copyright © 2018 TIS Inc. All rights reserved. 導入編 4
  6. 6. Copyright © 2018 TIS Inc. All rights reserved. はじめに UniRxは非常に便利なライブラリです。 ただし、銀の弾丸的な効果を期待しないでください。 突然設計がきれいになったり、生産性が上がったりは しません。 UniRxを使いこなし、有効なパターンを学ぶことで、きれい な設計で高い生産性を発揮することが出来るようになります。 とても便利なライブラリなので、まずはUniRxで出来ること を知り、興味を持って触ってみましょう! 5
  7. 7. Copyright © 2018 TIS Inc. All rights reserved. ハンズオン資料 イベントページ https://techcircle.connpass.com/event/96518/ パワポ資料 HandsOnのProject https://github.com/sansuu/UniRxHandsOnVol1 6
  8. 8. Copyright © 2018 TIS Inc. All rights reserved. UniRxとは neueccさんが作成された(現在もアップデート中)Unity向けの ReactiveExtensions (*1) ライブラリ。 UnityAssetStoreにて、無料でダウンロード可能。 *1:Rx(ReactiveExtensions) C#向けの非同期処理ライブラリ。 Rx ≒ event 機能的にはeventの上位互換。 7
  9. 9. Copyright © 2018 TIS Inc. All rights reserved. UniRxで出来ること 下記は、UniRxでできることのほんの一部です。 ・メソッドチェーンでイベントに対する処理を美しく書ける ・PureClass(*1)でUpdate処理を実行できる ・PureClassでCoroutineを実行できる ・Coroutine使わなくてもTimer処理ができる ・変数を触っている感覚でイベントの配信が実装できる ・uGUIのイベント処理が非常に簡潔に書ける ・イベントの購読側で、イベントに対するフィルタをかけるのが 得意(Where,Skip,Repeat,Select...) ・複数のイベントを合成したり、一つのイベントを 分岐させたりできる *1:MonoBehaviourを継承していないClass 8
  10. 10. Copyright © 2018 TIS Inc. All rights reserved. UniRxでコードが簡潔に書ける例 9 <お題> アプリ立ち上げた5秒後以降、毎秒ログを出力する。 15秒経過後はログ出力を停止する。
  11. 11. Copyright © 2018 TIS Inc. All rights reserved. UniRxを使わない記述例 10
  12. 12. Copyright © 2018 TIS Inc. All rights reserved. UniRxでの記述例 11
  13. 13. Copyright © 2018 TIS Inc. All rights reserved. 12 どうでしょうか? 無駄なメソッドが減って、コードが簡潔になりましたね。 まずは、なんかUniRx便利そうだなーというのを 感じていただけると嬉しいです。
  14. 14. Copyright © 2018 TIS Inc. All rights reserved. 基本編 ― Subject, OnNext, Subscribe ― 13
  15. 15. Copyright © 2018 TIS Inc. All rights reserved. イベントの基本 UniRxはイベントの拡張です。 以下の図は基本的なイベントの概念なので覚えておきましょう 14 Subject Subscribe 観察者A (Observer) 観察者B 観察者C Subject Notify 観察者A (Observer) 観察者B 観察者C
  16. 16. Copyright © 2018 TIS Inc. All rights reserved. 単語を覚えよう 15 単語 直訳 Subject 主題 Observable 観察可能 Observer 観察者 Subscribe 購読する UniRxを覚える上で、避けては通れない頻出単語がありま す。とりあえずこれだけは覚えておきましょう。
  17. 17. Copyright © 2018 TIS Inc. All rights reserved. eventとUniRx 16 結果は同じ 基本的な書き方は、大きく変わらない event UniRx
  18. 18. Copyright © 2018 TIS Inc. All rights reserved. UniRxの基本構文(SubscribeとOnNext) 17 Subjectの定義 Subjectの購読+受信時の振る舞い定義 Observerにメッセージを流す
  19. 19. Copyright © 2018 TIS Inc. All rights reserved. Subjectってなに? 18 IObserverとIObservableを実装したClass。 SubjectにOnNext等で値を渡すことで、 Subjectの購読者(Observer)にメッセージを通知する。 OnCompleted OnError OnNext Subscribe Subject IObserver IObservable 図で表すとこう
  20. 20. Copyright © 2018 TIS Inc. All rights reserved. Subjectってなに? 19 Subject Subscribe 観察者A (Observer) 観察者B 観察者C Subject OnNext OnError OnCompleted 観察者A (Observer) 観察者B 観察者C 前述の図で表すと以下のようになる。
  21. 21. Copyright © 2018 TIS Inc. All rights reserved. とりあえず自分で作ってみよう 20 SubjectがUniRxの基本と説明しましたが、深堀すると実は 結構難しい概念です。(Hot,Cold,スケジューラ等) 今回はその辺りすっ飛ばして、とりあえず触ってみましょう。
  22. 22. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01 21 以下をSubjectとObserverの2つのClassに分解する。 「Assets/UniRxHandsOn/Projects/02_Lesson/01_Lesson_01」 以下にScene及びClassが格納されているので、それを利用すること
  23. 23. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01― 解答例 ― 22
  24. 24. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01― 解説 ― 23 Subjectそのものを外部に公開した場合、 外部からSubjectそのものを触れてしまう ので、ちゃんとカプセル化しましょう
  25. 25. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01― Betterな解答例 ― 24 Point Subjectは外部に公開せず、 IObservableのInterfaceを公開する
  26. 26. Copyright © 2018 TIS Inc. All rights reserved. OnCompletedとOnError 25 OnCompleted OnError OnNext Subscribe Subject IObserver IObservable IF 役割 OnCompleted ストリームの停止及び完了通知 OnError ストリームの停止及びエラー通知 OnNext メッセージの変化通知
  27. 27. Copyright © 2018 TIS Inc. All rights reserved. OnCompletedの挙動 26 OnCompleted, OnErrorを通知した場合、 以降のOnNextは通知されない
  28. 28. Copyright © 2018 TIS Inc. All rights reserved. OnCompleted, OnErrorの振る舞いを定義す る 27
  29. 29. Copyright © 2018 TIS Inc. All rights reserved. SubscribeIFの定義 28
  30. 30. Copyright © 2018 TIS Inc. All rights reserved. 基本編 ― ストリーム ― 29
  31. 31. Copyright © 2018 TIS Inc. All rights reserved. ストリームって? 30 Rxで扱うメッセージの流れのこと。 メッセージは後述のオペレータによって加工され、 Subscribeした際に登録した処理を行う。 メッセージ Subject 加工 処理 上記メッセージの流れをストリームという
  32. 32. Copyright © 2018 TIS Inc. All rights reserved. ストリームって?(コードで) 31 ①メッセージをストリームに流す ②Subscribe時に登録した処理を行う
  33. 33. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース 32 メッセージを発行するソースとなる物をストリームソースと 呼ぶ。 Rxではストリームソースを用意しないと何も始まりません。 以下はUniRxにおけるストリームソースの一部です。 ・Subject ・ReactiveProperty ・UniRx.Triggers~
  34. 34. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース ―ReactiveProperty― 33 変数にSubjectの機能を追加したもの。 値の変更を通知してくれる変数みたいなもの。 非常に使い勝手が良いので、覚えておきましょう。
  35. 35. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース ―ReactiveProperty― 34 ReactivePropertyのValueを変更した時点で ストリームにメッセージが流れる Subject→ReactiveProperty IObservable→IReadOnlyReactiveProperty に変更しただけ 購読側は基本的に変わらない
  36. 36. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース ―ReactiveProperty― 35 先ほどのコードを実行すると、実行結果は下記のようになり ます。 ReactivePropertyは、Subscribe時に必ず値をPushする 設計となっているため注意が必要です。 これを無視したい場合、後述のオペレータが活躍します
  37. 37. Copyright © 2018 TIS Inc. All rights reserved. 基本編 ― オペレータ ― 36
  38. 38. Copyright © 2018 TIS Inc. All rights reserved. オペレータって? 37 ストリームに流れるメッセージを加工するための機能。 UniRxにはオペレータが大量に用意されています。 以下はほんの一部。 オペレータ できること Where 条件を満たすメッセージを通す Select メッセージを変換する Skip メッセージを指定数スキップする Take ストリームを先頭から指定した件数までで切る
  39. 39. Copyright © 2018 TIS Inc. All rights reserved. オペレータとメソッドチェーン 38 オペレータは下記の様にメソッドチェーンで繋ぐ事ができま す。 それは、下記の様にすべてのオペレータが、IObservable の拡張メソッドとして定義され、IObservableを返す設計 となっているからです。 上記の記法により、Where<T>が、 IObservableの拡張メソッドとして定義される
  40. 40. Copyright © 2018 TIS Inc. All rights reserved. IObservableのIF 39 つまり、IObservableのIFはSubscribeだけでなく 実体としては大量のオペレータIFを定義しているということ OnCompleted OnError OnNext Subscribe Where Select Skip Take ・ ・ ・ Subject IObserver IObservable OnCompleted OnError OnNext Subscribe Subject IObserver IObservable
  41. 41. Copyright © 2018 TIS Inc. All rights reserved. Lesson_02 40 以下のストリームから、偶数(0を除く)の2乗をログ出力す るObserverをオペレータを用いて作成する 「Assets/UniRxHandsOn/Projects/02_Lesson/02_Lesson_02」 以下にScene及びClassが格納されているので、それを利用すること 実行結果 (以降も続く)
  42. 42. Copyright © 2018 TIS Inc. All rights reserved. Lesson_02― 解答例 ― 41
  43. 43. Copyright © 2018 TIS Inc. All rights reserved. 休憩 42
  44. 44. Copyright © 2018 TIS Inc. All rights reserved. 応用編 43
  45. 45. Copyright © 2018 TIS Inc. All rights reserved. uGUIイベントをストリームに変換する 44 下記の様にして、uGUIイベントをストリームに変換するこ とができる。 IObservable同様にUnityEventの拡張メソッドとして定義されている onClick(UnityEvent)をストリームに変換
  46. 46. Copyright © 2018 TIS Inc. All rights reserved. Lesson_03 45 uGUIイベントをストリームに変換し、下記の機能を作成す る。 Sliderの値を表示する DropDownListで選んだColorを 表示する タイマーログ停止 タイマーログ開始 「Assets/UniRxHandsOn/Projects/02_Lesson/03_Lesson_03」 以下にScene及びClassが格納されているので、それを利用すること
  47. 47. Copyright © 2018 TIS Inc. All rights reserved. Lesson_03 ― 解答例 ― 46 各UnityEventをストリームに変換 してuGUIに対する処理を行う
  48. 48. Copyright © 2018 TIS Inc. All rights reserved. Lesson_03 ― 補足 ― 47 1秒ごとにストリームに メッセージを流すストリームソース Timer停止のため、 ストリームを解放する
  49. 49. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 48 UniRxを利用して、プレイヤーのコントロール機能を作成す る。 プレイヤーコントロールの仕様 ・アローキーで前後左右移動する(走る) ・スペースキーでジャンプする ・「C」キーでしゃがむ(しゃがみ歩き可能) ・LeftShiftキーで歩く 「Assets/UniRxHandsOn/Projects/02_Lesson/04_Lesson_04」 以下にScene及びClassが格納されているので、それを利用すること
  50. 50. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 49 参考動画
  51. 51. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 ― 前提 ― 50 本演習では、StandardAssetsのClassをUniRx化したClass にて、キャラクターの移動処理(Model)を行う。 移動量及び、状態を受け取 るIFとなっている 毎フレーム移動量及び、状態を投げる仕様のため、 Inputの状態を常に最新に更新する必要がある
  52. 52. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 ― 解答例 ― 51
  53. 53. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 ― 解説 ― 52 UpdateAsObservableは毎フレーム ストリームにメッセージを流す ストリームソース Select内でInputを取得することで true/false何れの場合でもストリー ムにメッセージを流せる
  54. 54. Copyright © 2018 TIS Inc. All rights reserved. まとめ 53 ・ストリームに流れるメッセージの種類は下記の3種類 OnNext, OnError, OnCompleted ・ストリームにオペレータを挟むことで、メッセージを 加工できる ・IObservableはIFの拡張により、メソッドチェーンで 繋げることができる ・上記をうまく使うことで、どの様な条件で何をしたいか 明確なコードとなり、可読性が向上する
  55. 55. Copyright © 2018 TIS Inc. All rights reserved. 参考資料 54 敬称略 • neue cc blog(neue cc) • UniRx入門シリーズ 目次(torisouP)
  56. 56. THANK YOU
  • ktaka2

    Sep. 7, 2019
  • kenyama526

    Jul. 20, 2019
  • heistak

    Aug. 26, 2018
  • ShojiYamauchi

    Aug. 25, 2018

UniRxHandsOnVol1の資料です

Views

Total views

1,531

On Slideshare

0

From embeds

0

Number of embeds

994

Actions

Downloads

20

Shares

0

Comments

0

Likes

4

×