У вас должен быть выделенный класс для каждого 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 ...
}
Обратите внимание, что вы можете пропустить определение имени тега (XmlAttribute("xyz")
), если тег в файле XML должен совпадать с именем переменной. Он нужен только в том случае, если тег в файле не соответствует имени переменной в скрипте.
Вам также следует рассмотреть возможность создания всех этих классов XML [Serializable]
, чтобы вы могли легко просматривать и редактировать значения в Инспекторе в Unity. Облегчает объединение исходных данных XML, которые вам нужны, в другом скрипте, например. как
public class XmlManager : MonoBehaviour
{
public RoadsContainer container = new RoadsContainer;
}
Конечно, вы должны реализовать что-то для записи и чтения в этот скрипт, чтобы иметь возможность сохранять и загружать данные из редактора.
Также обратите внимание, что это c # => Их не нужно размещать в одном файле, но вы можете иметь один сценарий для каждого класса, если хотите.