【Unity C# 】Dictionaryとキャッシュな保管クラスを作ってみた
スポンサーリンク
作成中の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? 」などの機能を作ると、よりスムーズな開発ライフを遅れると思います。