はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】ReactiveCollection(Dictionary)を使ってみた

はじめに

ReactiveCollectionを使ってみたのでそこで分かったことを書き残しておきたいと思います。

ReactiveCollection

よく使った演算子はこちら
ObserverAdd・・・新しい要素が追加(Add)
ObserverRemove・・・要素を削除(Remove)
ObserverCountChanged・・・要素数が変化(Add,Remove)

ObserverReplace(要素の上書き)やObserverMove(要素の移動)なんかもありましたが正直使いどころがよく分からなかったです。

サンプルはこちら↓

using UnityEngine;
using UniRx;

public class UniRxTest : MonoBehaviour
{
    void Start()
    {
        ReactiveCollection<string> names = new ReactiveCollection<string> { "スライム", "ドラキー", "ももんじゃ" };

        names.ObserveAdd()
            .Subscribe(name => Debug.Log("Add: " + name))
            .AddTo(this);

        names.ObserveRemove()
            .Subscribe(name => Debug.Log("Remove: " + name))
            .AddTo(this);

        names.ObserveCountChanged()
            .Subscribe(count => Debug.Log("Count: " + count))
            .AddTo(this);

        names.Add("メタルスライム");       //Add: メタルスライム      Count: 4

        names.Remove("スライム");          //Remove: スライム         Count: 3
    }
}

ReactiveDictoinary

よく使った演算子はこちら
ObserverAdd・・・新しい要素が追加(Add)
ObserverRemove・・・要素を削除(Remove)
ObserverCountChanged・・・要素数が変化(Add,Remove)

全部同じですね。

こちらもObserverReplaceObserverMoveもあるみたいです。

using UnityEngine;
using UniRx;

public class UniRxTest : MonoBehaviour
{
    void Start()
    {
        ReactiveDictionary<string, string> monsters = new ReactiveDictionary<string, string>
        {
            {"スライム", "Slime"},
            {"ドラキー", "Drakiy"},
            {"ももんじゃ", "Monmonja"}
        };

        monsters.ObserveAdd()
            .Subscribe(x => Debug.Log("Add: " + x.Value))
            .AddTo(this);

        monsters.ObserveRemove()
            .Subscribe(x => Debug.Log("Remove: " + x.Value))
            .AddTo(this);

        monsters.ObserveCountChanged()
            .Subscribe(count => Debug.Log("Count: " + count))
            .AddTo(this);

        monsters.Add("メタルスライム", "MetalSlime");       //Add: MetalSlime      Count: 4

        monsters.Remove("スライム");                        //Remove: Slime        Count: 3
    }
}

さいごに

少しずつUniRxが分かってきたような・・・、というのは嘘で難しくて全然分かんないです。

それでもなぜか使いたくさせる謎の魅力がありますよね。精進します。