unityC#のハッシュテーブルのDictionaryは直接シリアライズできません。
Dictionaryをゲームで保存したい場合は以下の方法があります。
- 手間大 Dictionaryクラスをシリアライズ可能に書き換える
- 手間中 DictionaryをXMLに変換して保存する
- 手間小 Dictionaryを文字配列に変換する
3番の文字配列に変換のサンプルです
//using System.Collections.Generic;
//Dictionaryを二つの文字型一次配列に変換する
Dictionary<string, string> dic = new Dictionary<string, string>
{
{ "1", "いち" },
{ "2", "に" },
{ "3", "さん" }
};
//変換する配列を作成する
string[] keys = new string[dic.Keys.Count];
string[] vals = new string[dic.Values.Count];
//二つの配列に変換する
dic.Values.CopyTo(vals, 0);
dic.Keys.CopyTo(keys, 0);
Dictionary<string, string> newDic = new Dictionary<string, string>();
toDictiotnary(keys, vals, newDic);
Debug.Log(newDic["2"]);
public void toDictiotnary(string[] keys, string[] vals, Dictionary<string, string> dic)
{
if (keys.GetLength(0) == vals.GetLength(0))
{
for(int i = 0; i < keys.GetLength(0); i++)
{
dic[keys[i]] = vals[i];
}
}
}
結果
に
所感
ディグショナリは便利ですがC#の仕様が固いです。
ハッシュテーブルはディグショナリと互換がありますが推奨されていません。
public Dictionary<string, string> d1,d2;
ディグショナリはハッシュテーブルと互換性があるので簡単に置き換えられます。
0 件のコメント:
コメントを投稿