Unity で利用できる NotificationCenter

NotificationCenter

ここで紹介する NotificationCenter は、プログラミングにおいて、あるオブジェクトに対しメッセージを送信する機能を指しています。正しく利用すると非常に有用ですが、やたら無暗に使っているとソースコードを追うのが大変になるので、使う時は慎重に検討を行うようにしましょう。

Unity で利用できる NotificationCenter

以前は、 Unity で利用できる NotificationCenter が下記 URL にありましたが、 Unity の Wiki が閉鎖されたことにより利用することができなくなってしまいました。

http://wiki.unity3d.com/index.php?title=CSharpNotificationCenter (現在はアクセスできません)

私自身はあまり利用することはないのですが、使っている方をチラホラ見かけるので GitHub で残せればと思い、オリジナルに敬意を払いつつ、私なりにリファクタリングしたものを公開したいと思います。(本当は作者に連絡を取りたいところですが、ソースコード自体が古く、且つ連絡を取る手段がないので勝手ながら公開させて頂きました。)

https://github.com/tks2shimizu/UnityNotificationCenter

使い方

受信側

void Start()
{
    NotificationCenter.DefaultCenter.AddObserver(this, nameof(CountUp));
}
void CountUp(NotificationCenter.Notification notification)
{
    foreach (DictionaryEntry data in notification.data)
    {
        if ((string)data.Key == "count")
        {
            countUpLabel.text = ((int)data.Value).ToString();
        }
    }
}

送信側

public void PushButton ()
{
    var notifications = new Hashtable
    {
        { "count", 1 }
    };

    NotificationCenter.DefaultCenter.PostNotification(this, "CountUp", notifications);
}

まとめ

今回は Unity で利用できる NotificationCenter を紹介しました。バグがあれば修正しますが、機能を追加する予定はないので、フォークして利用して頂ければと思います。