我想将字典保存到Unity3D中的文本文件中(使用C#)。字典包含GameObjects作为键,它对应于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)]
我将如何实现这一目标?
答案 0 :(得分:1)
我之前没有使用过Unity,如果我误解了,请道歉。如果Vector2是您创建的自定义类,那么您可以覆盖默认的ToString()方法,以便它吐出您需要的任何字符串。或者,您需要访问您尝试从字典中的值写出的任何属性。例如(假设Foo是你的财产)。
file.WriteLine (entity.ToString() + ": " + levelStruct[entity].Foo.ToString());
答案 1 :(得分:1)
您可以创建特定类型的变量并获取所需的属性
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);
}
}
}
答案 2 :(得分:1)
我认为您应该使用序列化和反序列化来保存和恢复对象,因为当您使用ToString()函数时,大多数时候只返回对象的名称。我建议你谷歌,但有一些资源:
http://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part
https://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx
答案 3 :(得分:1)
你正在写物品。在对象上调用ToString()时,将获得对象类型的名称。相反,你需要做两件事之一:
#1:如果你真的想用代码建议使用CSV来写:
Object.Property.ToString();
对于GameObject,您可能需要使用反射来执行此操作
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,然后以这种方式保存: https://www.google.com/search?q=c-sharp+how+to+serialize+objects+into+json&ie=&oe=
祝你好运 - 如果你陷入某些特定的问题,只需要问。