2016-09-18 12 views
0

辞書をUnity3Dのテキストファイル(C#を使用)に保存します。辞書には、Vector2のリストに対応するキーとしてGameObjectsが含まれています。辞書をテキストファイルに保存する(C#)

wall (UnityEngine.GameObject): System.Collections.Generic.List`1[UnityEngine.Vector2] 
rat (UnityEngine.GameObject): System.Collections.Generic.List`1[UnityEngine.Vector2] 
dwarf (UnityEngine.GameObject): System.Collections.Generic.List`1[UnityEngine.Vector2] 
floor (UnityEngine.GameObject): System.Collections.Generic.List`1[UnityEngine.Vector2] 

私の問題は、ファイルがベクトル2リスト内の実際の項目が含まれている必要があることではなく、リスト自体:サンプルファイルを生成します

public void SaveLevel(string LevelName) 
{ 
    using (StreamWriter file = new StreamWriter (LevelName+".txt")) 
    { 
     foreach (GameObject entity in levelStruct.Keys) 
     { 
      file.WriteLine (entity.ToString() + ": " + levelStruct[entity].ToString());   
     } 
    } 
} 

この

は私のコードです:

System.Collections.Generic.List1[UnityEngine.Vector2] 

このような行を次のようにします。

System.Collections.Generic.List1[(0,2),(3,1),(4,3)] 

これをどのように達成できますか?

+0

辞書をJSONに変換するのが最も簡単で最も簡単なのは、ほとんどのjsonパーサーがそれを行い、jsonをテキストとして保存するだけです。保存するだけでなく、認識された形式で取得できます。 – Everts

答えて

1

あなたが特定のタイプのvaraibleを作成し、

public void SaveLevel(string LevelName) 
    { 
    string res; 
     using (StreamWriter file = new StreamWriter (LevelName+".txt")) 
     { 
      foreach (GameObject entity in levelStruct.Keys) 
      { 
       foreach(Vector2 v in levelStruct[entity])){ 
         res = " "+"("+v.x+"."+v.y+")"; 
      } 
      file.WriteLine (entity.ToString() + ": " + res); 

      } 
     } 
    } 
+0

お待ちください、これは単にリスト項目の1つを書きませんか? – Bonbin

+0

新しいものを確認して編集しました。現在は動作します –

+0

はい、ありがとうございます – Bonbin

1

私はユニティを以前使用していませんでした。私が誤解した場合は謝ります。 Vector2が作成したカスタムクラスであれば、必要な文字列を吐き出すように、デフォルトのToString()メソッドをオーバーライドすることができます。また、辞書の値から書き出しようとしているプロパティにアクセスする必要があります。例:Fooがあなたの財産であると仮定します。

file.WriteLine (entity.ToString() + ": " + levelStruct[entity].Foo.ToString()); 
+0

答えをありがとう。私はまだ議員が投票することはありません。また、Vector2はPythonのタプルのようなものです。それらはApiに含まれており、2D環境での座標を表現したいときに便利です。 – Bonbin

1

が必要な特性を得ることができます私は(あなたがToStringメソッドを使用する場合ので、あなたは、シリアル化して、オブジェクトを保存し、復元するためにデシリアライズ使用すべきだと思います)関数は、ほとんどの場合、オブジェクトの名前だけを返します。私はあなたがそれをGoogleに提案するが、いくつかのリソースがあります:

http://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part

https://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

+0

ヒントをありがとう! – Bonbin

1

あなたがオブジェクトを書いています。オブジェクトに対してToString()を呼び出すと、オブジェクト型の名前が取得されます。あなたが本当にあなたのコードが示すようにCSVを使用して作成したい場合は:

#1:代わりに、あなたは二つのいずれかを実行する必要がゲームオブジェクトの場合

Object.Property.ToString(); 

、あなたが必要な場合がありますこれを行うためにリフレクションを使用する

using System.Reflection; 
foreach(PropertyInfo p in typeof(UnityEngine.GameObject).GHetProperties()){ 
    Console.WriteLine(p.Name+","+p.GetType().ToString()); 
} 
//repeat as necessary with fields and methods and ... as needed using System.Reflection 

2番目の項目はベクトルのリストです - 同じことです。そのためには、

foreach(UnityEngine.Vector2 vect in levelStruct[entity])){ 
    //write ToString(); 
    } 

#2を使用したい: XMLやJSONにオブジェクトをシリアル化する方法を学び、その後、そのように保存します。 https://www.google.com/search?q=c-sharp+how+to+serialize+objects+into+json&ie=&oe=

幸運 - あなたは、特定の何かにはまり込む場合ただ聞いてください。

+0

答えをありがとう。投票しただろうが、まだ十分な担当者がいない。 – Bonbin

+0

問題ありません!私は代理人のためにここにいません - ただ助けて学ぶことを試みています。乾杯! –

+0

@Bonbinそれはあなたのためにしました。 – Programmer

関連する問題