SlideShare a Scribd company logo
7
Most read
14
Most read
19
Most read
UniRxでMV(R)Pパターン
をやってみた
@toRisouP
2015/04/16
自己紹介
• とりすーぷ(@toRisouP)
• 趣味でUnityいじってます
みくみくまうす
• ニコ生の配信支援ツール
• MMDモデルがニコ生のコメントを読み上げる
• フリーソフトとして公開中
• Unity5製(内部でUniRx使ってる)
http://mikumikumouth.net/
uGUI
Unity GUI
みくみくまうす
uGUIに適したM-V-○パターン
Model View (Reactive) Presenter
MV(R)Pパターン
• UniRxを使ったuGUIのデザインパターン
• ModelとViewを「Presenter」がつなぐ
• データのやり取りにObservableとReactivePropertyを使う
• View/Modelの変更をReactiveに反映できる
Model-View-(Reactive)Presenterパターン
View
(uGUIコンポーネント等))
Presenter
Model
ModelはPresenterに依存しない
ViewはPresenterに依存しない
PresenterがModelとViewを参照する
Model-View-(Reactive)Presenterパターン
View
(uGUIコンポーネント等))
Presenter
Model
ReactiveProperty
内部状態の変化の通知
Subscribe
Viewへ反映
xxxAsObservable
ユーザ入力
Subscribe
Modelに反映
みくみくまうす
MV(R)Pパターンで実装してある
MV(R)P実装例
• 読み上げタイミング調整スライダ
• Slider または InputField を調整すると値をModelに反映
• 片方のViewを変動させるともう一方のViewに反映
• InputFieldの値域は-1500~1500
• ただしSliderの値は10刻み(-150~150)
Model (ConfigComponent)
関係図
SpeechTimingSlider
Presenter
SpeechTimingReactiveProperty
OnValueChangedAsObservable()
SpeechTimingInputField
Presenter
OnEndEditAsObservable()
SpeechTimingSliderPresenter
SpeechTimingInputFieldPresenter
MV(R)Pで実装してみた感想
• シンプルにキレイにまとまる
• ModelとViewの独立性が保たれるのがイイ!
• Viewの変換ロジックにRxのオペレータがそのまま使える
• Presenterの作り方は考える必要がありそう
– SceneあたりPresenterは1つにして集中管理する?
– 1つのUI要素あたり1つPresenterを作る?
まとめ
• UnityでRxが使えるの本当にスバラシイ
– uGUI周りがキレイに書けてとても助かる
– ゲームロジックとも結構相性が良い
– もっと流行らせたい
• MV(R)Pは現時点ではuGUIにおける最適解かも
– Rxの難しい部分が出てこないのでRx初心者でも使えるはず
@toRisouP
UniRxでMV(R)Pパターンをやってみた
PresenterをView要素毎に作るパターン
View
Presenter
Model
View
Presenter
View
Presenter
View
Presenter
○ GetComponentでPresenterがViewを取得できる(スクリプト内で完結する)
○ 1Presenter当たりのコード量が少なくなって読みやすくなる
× View要素の数だけPresenterが必要になる
みくみくまうすのPresenterの数
• 1UI要素あたり1Presenterで作ったら大変なことになった
Presenterを1つにまとめるパターン
View
Presenter
Model
View View View
○ 1つのPresenterで管理するのでどこで処理しているか把握しやすい
○ View要素の数の変更に対応しやすい
× ViewとPresenterの紐付けがInspector Viewからになる

More Related Content

PDF
UniRx完全に理解した
PDF
Unity開発で使える設計の話+Zenjectの紹介
PDF
UniRx の1歩目
PDF
UniTask入門
PDF
MagicOnion入門
PDF
インタフェース完全に理解した
PDF
Observableで非同期処理
PDF
UE4でマルチプレイヤーゲームを作ろう
UniRx完全に理解した
Unity開発で使える設計の話+Zenjectの紹介
UniRx の1歩目
UniTask入門
MagicOnion入門
インタフェース完全に理解した
Observableで非同期処理
UE4でマルチプレイヤーゲームを作ろう

What's hot (20)

PDF
ゲーム開発者のための C++11/C++14
PDF
Riderはいいぞ!
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PPTX
はじめてのUniRx
PPTX
UniRxことはじめ
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
PPTX
なぜなにリアルタイムレンダリング
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
PDF
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
PDF
【Unity】 Behavior TreeでAIを作る
PDF
UE4における大規模背景制作事例 最適化ワークフロー編
PPTX
若輩エンジニアから見たUniRxを利用したゲーム開発
PDF
Unityでパフォーマンスの良いUIを作る為のTips
PPTX
未来のプログラミング技術をUnityで -UniRx-
PDF
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
PDF
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
PDF
Unityと.NET
PDF
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
ゲーム開発者のための C++11/C++14
Riderはいいぞ!
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
はじめてのUniRx
UniRxことはじめ
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
なぜなにリアルタイムレンダリング
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity】 Behavior TreeでAIを作る
UE4における大規模背景制作事例 最適化ワークフロー編
若輩エンジニアから見たUniRxを利用したゲーム開発
Unityでパフォーマンスの良いUIを作る為のTips
未来のプログラミング技術をUnityで -UniRx-
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
Unityと.NET
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)

More from torisoup (15)

PDF
Doozy UI 使おうぜ! #unity_lt
PDF
MagicOnion~C#でゲームサーバを開発しよう~
PDF
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
PDF
ARでVRアバターを表示するシステムを構築しよう
PDF
ObserverパターンからはじめるUniRx
PDF
Unityでオニオンアーキテクチャ
PDF
Photon Cloud ことはじめ
PDF
アバター生放送支援アプリ「アバれぽ」
PDF
コールバックと戦う話
PDF
UnityとNCMBでユーザ管理を実装してみた話
PDF
Task vs Observable
PDF
Unityでオンラインゲーム作った話
PDF
UniRxでPUNを使いやすくする
PPTX
みくみくまうすについて&Unity で使えるコーディングノウハウ
PDF
Unity講習会(初級)
Doozy UI 使おうぜ! #unity_lt
MagicOnion~C#でゲームサーバを開発しよう~
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
ARでVRアバターを表示するシステムを構築しよう
ObserverパターンからはじめるUniRx
Unityでオニオンアーキテクチャ
Photon Cloud ことはじめ
アバター生放送支援アプリ「アバれぽ」
コールバックと戦う話
UnityとNCMBでユーザ管理を実装してみた話
Task vs Observable
Unityでオンラインゲーム作った話
UniRxでPUNを使いやすくする
みくみくまうすについて&Unity で使えるコーディングノウハウ
Unity講習会(初級)

UniRxでMV(R)Pパターン をやってみた