【Unity】UniRxを使ってオブザーバーによる通知を行うSubscriptionManagerクラス

DEVELOP

Unity アセット UniRx を利用してオブザーバーで各種オブジェクトに通知できるようにしてみます。

目次

SubscriptionManager クラス

using System;
using UniRx;
/// <summary>
/// サブスクリプション管理
/// </summary>
public class SubscriptionManager : IDisposable 
{
	private event Action<int> onDamage;
// ダメージ発生通知
	public void Notify(int _damage)
	{
		if (onDamage == null)
		{
			return;
		}
		onDamage(_damage);
	}
	public void Dispose()
	{
		onDamage = null;
	}
	/// <summary>
	/// Subscribe
	/// </summary>
	public IObservable<int> OnDamageAsObservable()
	{
		return Observable.FromEvent<int>(h => onDamage += h, h => onDamage -= h);
	}
}

IDisposableを継承しているのは通知処理を登録した時に解除処理を書かなくても良い様にするため。

購読処理の登録

using UniRx;
void Subscribe()
{
    Using("damage", subscriptionManager.OnDamageAsObservable().Subscribe(_damage=>
    {
        // TODO ダメージ発生!何か処理する
    }));
}

通知処理

subscriptionManager.Notify(100);

過去の案件でも似た実装がなされていて、大変便利でした。

Posted by kazupon