へっぽこ日記

Unity関係のつぶやきまとめ。マイコンとかもいじります。

UnityでObserverパターンを試してみる

はじめに

今回はUnityでObserverパターンを試してみる記事です。

UniRxを支える基礎概念として、Observaerパターンがあります。普段はUniRxを使っているので、マスターした気になっていますが、あまり触れたことがなかったので、試しに触れたいと思います。

 

サンプルプロジェクト

github.com

 

 

そもそもObserverパターンとは

GoFの設計パターンの一つで、イベント周りで多く利用される。構成としては、Observer(監視者・発行)とSubject(観察対象・購読)に分かれていて、Subject側がメッセージを発信することで、Observerで登録した処理を実行する仕組み。ざっくりいうと、通知を受け取る仕組みと理解しても大丈夫です。

 

単純に実装してみる

単純ですが実際に実装してみました。SPACEキーを押すと、ランダムな値をログに出力します。

giste572ccf800f4a5058c6668536c573338

gistd0d73954f645e24a1c0fc27bbf415725

こんなかんじ

IObservableを利用してみる

今度は、Observerパターンで使えるインターフェースを使って実装してみようと思います。使うインターフェースは以下のとおりです。

・IObserver:メッセージを受け取る際に必要

gistd4bde29a269cb492de342064402639fe

・IObserveble:メッセージの送り先であるObserverを登録

gistf2fefc836a4ab00061a394c2e9e5cbd5

・IDisposable:リソースを削除するのに必要

gist362ddb192286e969685dbe4daaf70b1f

 

Subjectは複数の購読を受けることができるので、Observerを複数作ってメッセージを発行できるようにしました。また、購読解除はSubscribeの戻り値をとおして行えるようになっています。

giste7371a22062a0d98f9d31010ff1a0310

gistba48f69a1ea1db5aa04b4917a4b55500

giste41f3a19584b28408e47e04a67948c42

単純にLogを出す

ちなみに冒頭でObserverとSubjectの説明をしましたが、正確に云うとSubjectはIObservableインターフェースを実装しているオブジェクトで、ObserverがIObserverを実装しているオブジェクトになります。

 

UniRxのSubjectを試してみる

自前で色々実装してきましたが、UniRxには楽にSubjectを実装できるSubjectが用意されています。なので実際に使ってみましょう!

gist2e91348cfd24f846607c3039033496d6

これはボタンを押すと通知を出して、登録された処理を実行するかんじ。簡単に実装出来てめちゃくちゃ便利!

 

UniRxにはよく使われるベストプラクティスなObservableがあります。

gist76f5eeeed82a976fd33cbd3532693066

gisteeeab1038a8429cad2e60bcd5dc2f15d

 

ちなみにUniRxではSubjectのことをObservableと呼ぶことがありますが、それはSubjectにUniRxの機能であるOperatorとSchedulerが加わったもののことを指します(ストリームとも呼ばれる)。また、そのパターンをObservableパターンとも呼ぶみたいです。

 

おわりに

今回はObserverパターンをいろんな方法で試してみました。UniRxかなり便利でしたね!次は、Singletonパターンを実装してみようと思います。

 

是非、読者登録をしていただくと助かります!