気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity C# 】Dictionaryとキャッシュな保管クラスを作ってみた

スポンサーリンク

f:id:Wojtek:20191107000155j:plain

作成中のUnity基盤に取り入れてみました。

内容は大したことはしていなく、Dictionaryでデータを保存し、メソッドで「特定のデータを保管しているか」「保管してる特定のデータを取得する」機能を実装して外部で対応する形になっています。

1. キャッシュ用のDictionaryを作成する

今回は PrefabのPath(情報)を保管するクラスを作成しました。

/// <summary>
    /// Prefabのパスを保持するクラス
    /// </summary>
    public sealed class PrefabPathHolder {

        //===============================================
        //  変数
        //===============================================

        /// <summary> PrefabのPathの保管</summary>

        private Dictionary<string, PrefabPathProperty> mPaths = new Dictionary<string, PrefabPathProperty> ();


private で Dictionary mPaths を宣言しています。

このmPaths に Unityで使用する全てのPrefab情報を保管して、必要な時に引き出す仕組みになっています。

例えば、「XXってPrefab情報って保管されてるか知りたい」状態になったとします。

その時に備えて「指定されたPrefabが保管されているか調べて返答する」関数を作ってみました。

type.FullName と ConstainsKey() で Dictionaryを調べる

        /// <summary>
        /// 指定したPathが保持されているか判定する
        /// </summary>
        /// <returns></returns>
        public bool HasPrefabPath (Type prefabType) {
            return this.mHasPrefabPath (prefabType.FullName));
        }

        private bool mHasPrefabPath (string tagName) {

            // 保持して入ればローカルに存在しているか判定する
            if (mPaths.ContainsKey (tagName)) {
                return true;
            }

            return false;
        }

HasPrefabPath は 指定された type が保管されているのかbool型で返答します。
mHasPrefabPathに type.FullName を渡していますが、FullName は そのtype の正式名称を送信します。

このクラスの場合だと 「PrefabPathHolder 」 namespace があれば 「namespace.PrefabPathHolder」 として表示されます。

mHasPrefabPathの 「mPaths.ContainsKey」は Dictionary の Key に 先ほど指定したFullName が含まれているか判定しています。

この他にも「指定したPrefab情報を渡す」や「指定したPrefabは ローカル? or AssetBundle? 」などの機能を作ると、よりスムーズな開発ライフを遅れると思います。