東京大学 大学院情報学環 藤本研究室
投稿日時: 2023-09-30 投稿者: haruguchi
こんにちは、春口です。
夏休み活動報告の9月版をご報告致します。
活動報告と言っても夏休みで行った事の大半は研究で作成しているゲームの改修作業でした。
ですので、ここでは私がゲーム制作で使用しているUniRxとObserverパターンの簡単な紹介をしたいと思います。
UniRxは、リアクティブプログラミングというプログラミングの手法をUnityで利用するために使用するライブラリです。リアクティブプログラミングがゲームプログラミングと相性が良いため、Unityで使用できるようにライブラリとして開発されました。
リアクティブプログラミングは、「データを通知すること」と「データを受け取って処理すること」を扱ってプログラミングを行う手法です。「キャラクターが敵の攻撃に当たりHPバーが減少する」という処理を実装する場面を例に取ると、攻撃に当たったという事が「データを通知すること」HPバーが減少する事が「データを受け取って処理すること」に相当します。
UniRxではリアクティブプログラミングの実装のためにObserverパターンを導入しています。Observerパターンでは、SubjectとObserverという2つの概念を取り扱います。Subjectは何か通知したいデータ(あるいは通知したいイベントなど)を持っている側が作成します。Subjectは自身に登録したObserverに対してイベントメッセージを発行できます。先ほどの例だと、攻撃に当たったというイベント(データ)をキャラクターはSubjectを通して通知します。Observerは登録されたSubjectからのイベントを受信できます。HPバーはキャラクターのSubjectからの通知をObserverを使って受信し、受けたダメージによってHPバーを減らすという処理を行います。UniRxではSubjectのイベント通知にSubject.OnNext();、SubjectへのObserverの登録にIObservable.Subscribe()を使用するようになっています。
こうした機能を使用する事で、イベント通知が必要な様々な場面でスマートな実装を行う事ができます。また、インゲームの実装だけでなくMVRPというデザインパターンを利用してUIの実装も行う事ができます。このようにObserverパターン及びUniRxは使い方を覚えると色々な場面で助けてくれる頼もしい存在です。是非Unityを使ってゲーム開発をされる際は勉強してみてください。