Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字典保存到文本文件(C#)_C#_List_Dictionary_Unity3d - Fatal编程技术网

将字典保存到文本文件(C#)

将字典保存到文本文件(C#),c#,list,dictionary,unity3d,C#,List,Dictionary,Unity3d,我想将字典保存到Unity3D中的文本文件中(使用C#)。字典包含游戏对象作为键,对应于Vector2的列表 这是我的代码: public void SaveLevel(string LevelName) { using (StreamWriter file = new StreamWriter (LevelName+".txt")) { foreach (GameObject entity in levelStruct.Keys) {

我想将字典保存到Unity3D中的文本文件中(使用C#)。字典包含游戏对象作为键,对应于Vector2的列表

这是我的代码:

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());        
        }
    }
}
这将生成示例文件:

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]
我的问题是文件需要包含Vector2列表中的实际项目,而不是列表本身:

System.Collections.Generic.List1[UnityEngine.Vector2]
我希望上面这一行看起来像这样:

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

我怎样才能做到这一点呢?

我以前没有使用过Unity,如果我误解了,请道歉。如果Vector2是您创建的自定义类,那么您可以重写默认的ToString()方法,以便它吐出您需要的任何字符串。或者,您需要访问您试图从字典中的值写出的任何属性。例如(假设Foo是你的财产)


我以前没有使用过Unity,所以如果我误解了,请道歉。如果Vector2是您创建的自定义类,那么您可以重写默认的ToString()方法,以便它吐出您需要的任何字符串。或者,您需要访问您试图从字典中的值写出的任何属性。例如(假设Foo是你的财产)


您可以创建特定类型的变量并获得所需的属性

   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);

            }
        }
    }

您可以创建特定类型的变量并获得所需的属性

   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);

            }
        }
    }

我认为您应该使用序列化和反序列化来保存和恢复对象,因为当您使用ToString()函数时,大多数情况下只返回对象的名称。我建议你用谷歌搜索它,但有一些资源:


我认为应该使用序列化和反序列化来保存和恢复对象,因为在大多数情况下,使用ToString()函数只返回对象的名称。我建议你用谷歌搜索它,但有一些资源:


您正在写入对象。在对象上调用ToString()时,将获得对象类型的名称。相反,您需要做两件事之一:

#1:如果您真的想按照代码建议使用CSV进行编写:

  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
第二项是向量列表——同样的事情。为此,你会使用

 foreach(UnityEngine.Vector2 vect in levelStruct[entity])){
    //write ToString();
  }
#2:学习如何将对象序列化为XML或Json,然后以这种方式保存:


祝你好运-如果你在某个特定的问题上陷入困境,就去问吧。

你在写东西。在对象上调用ToString()时,将获得对象类型的名称。相反,您需要做两件事之一:

#1:如果您真的想按照代码建议使用CSV进行编写:

  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
第二项是向量列表——同样的事情。为此,你会使用

 foreach(UnityEngine.Vector2 vect in levelStruct[entity])){
    //write ToString();
  }
#2:学习如何将对象序列化为XML或Json,然后以这种方式保存:


祝你好运-如果你在某个特定的问题上遇到困难,就问吧。

谢谢你的回答。本来会投赞成票的,但我还没有足够的代表。没问题!我来这里不是为了代表-只是想帮助和学习。干杯@邦宾帮你做的。谢谢你的回答。本来会投赞成票的,但我还没有足够的代表。没问题!我来这里不是为了代表-只是想帮助和学习。干杯@邦宾帮你做的。谢谢你的回答。不过我还没有代表投票。另外,Vector2类似于python中的元组,如果您熟悉这些元组,它包含在api中,并且在您想要在2D环境中表示坐标时非常方便。谢谢您的回答。不过我还没有代表投票。另外,如果您熟悉python中的元组,那么Vector2就像是一个元组,它包含在api中,当您想要在2D环境中表示坐标时,它非常方便。谢谢您的提示!谢谢你的提示!等等,这不是只写一个列表项吗?等等,这不是只写一个列表项吗?最好也是最简单的调用是将字典转换为JSON,大多数JSON解析器都会这样做,然后将JSON保存为文本。您不仅可以保存,还可以以公认的格式保存。您最好、最简单的调用是将字典转换为JSON,大多数JSON解析器都会这样做,然后将JSON保存为文本。不仅可以保存,还可以以公认的格式保存。