我必须将XML文件导入Unity,但是无法找出正确的语法。
因此,我创建了Road类和RoadContainer类,如本文所示: http://wiki.unity3d.com/index.php/Saving_and_Loading_Data:_XmlSerializer
using System.Xml.Serialization;
using System.Xml;
public class Road {
[XmlAttribute("name")]
public string name;
[XmlAttribute("id")]
public float id;
[XmlAttribute("junction")]
这是容器类
using System.Xml;
using System.IO;
[XmlRoot("OpenDrive")]
public class RoadsContainer {
[XmlArray("Roads")]
[XmlArrayItem("Road")]
public List<Road> roads = new List<Road>();
public static RoadsContainer Load(string path){
var serializer = new XmlSerializer(typeof(RoadsContainer));
using (var stream = new FileStream(path, FileMode.Open))
{
return serializer.Deserialize(stream) as RoadsContainer;
}
}
我想在类中添加以下内容:
<OpenDrive>
<Raods>
<Road name="" ... >
<link>
<successor elementId="1" elementType="Road" />
</link>
<planview>
<geometry attribute1 attribute2 ...>
<line/>
</geometry>
</planview>
</Road>
<Road>
</Road>
</Roads>
</OpenDrive>
我尝试将“链接”添加为带有“成功”的XmlElement和XmlElementAttributes的另一个类(不在此代码中,而在另一个代码中),但是没有任何作用
public class link {
[XmlElement("successor")]
public float elementId;
public string elementType;
public string contactPoint;
}
如果有人能帮助我提供一些代码或指向Unity c#中的porper XML语法的良好文档的链接,这将是很好的。
答案 0 :(得分:0)
对于每个进一步嵌套的XmlElement
(子标签),您应该有一个专用的类。
类似
[Serializable]
public class Road
{
[XmlAttribute] public string name;
[XmlAttribute] public float id;
// ...
[XmlElement] public Link link;
[XmlElement] public PlanView planview;
}
[Serializable]
public class Link {
[XmlElement] public Successor successor;
}
[Serializeable]
public class Successor
{
[XmlAttribute] public string elementId;
[XmlAttribute] public string elementType;
}
[Serializable]
public class PlanView
{
[XmlElement] public Geometry geometry;
}
[Serializable]
public class Geometry
{
[XmlAttribute] public <type> Attribute1;
[XmlAttribute] public <type> Attribute2;
[XmlElement] public Line line;
}
[Seializable]
public class Line
{
// etc ...
}
请注意,如果XML文件中的标记应与变量名相同,则可以跳过标记名定义(XmlAttribute("xyz")
)。仅在文件中的标签未在脚本中使用变量名的情况下才需要它。
您还应该考虑制作所有这些XML类[Serializable]
,以便可以轻松地在Unity的Inspector中查看和编辑值。使在不同脚本中将所需的初始XML数据一起单击变得容易得多,例如喜欢
public class XmlManager : MonoBehaviour
{
public RoadsContainer container = new RoadsContainer;
}
当然,您应该实现一些用于在脚本中进行读写的功能,以便能够从编辑器中保存和加载数据。
还要注意,这是c#=>不必将它们放在一个文件中,但是如果需要,您可以为每个类使用一个脚本。