Unity, xml и float.Parse
Понадобилось сделать проект на юнити, ни разу с этим раньше не работал. Нашёл гайд как сохранять информацию об объектах на сцене с помощью xml.
Запись в файл получилось реализовать, НО дробные числа записываются через точку. А мне чтобы выгрузить из файла нужно string перевести в float. Я это делаю через float.Parse и он выдаёт FormatException, тк работает только с запятыми.
Попробовал в файле сохранить один объект и заменить в записях точки на запятые, и он нормально загрузился.
У гайдодела же всё нормально работает.
Думаю, что проблему можно решить, создав метод заменяющий в строке точки на запятые, но может есть что-то получше?
Пример строки из xml:
<instance pos_x="30.2357655" pos_y="0.06069392" pos_z="1.70273745" rot_x="-0.978091" rot_y="-0.978091" rot_z="-0.978091">cubesand(Clone)</instance>
Сохраняю координаты и не только объектов таким образом:
private XElement GetElement(GameObject obj)
{
XAttribute pos_x = new XAttribute("pos_x", obj.transform.position.x);
XAttribute pos_y = new XAttribute("pos_y", obj.transform.position.y);
XAttribute pos_z = new XAttribute("pos_z", obj.transform.position.z);
XAttribute rot_x = new XAttribute("rot_x", obj.transform.rotation.x);
XAttribute rot_y = new XAttribute("rot_y", obj.transform.rotation.x);
XAttribute rot_z = new XAttribute("rot_z", obj.transform.rotation.x);
return new XElement("instance", obj.name, pos_x, pos_y, pos_z, rot_x, rot_y, rot_z);
}
public void Saving()
{
XElement root = new XElement("root");
foreach( GameObject obj in objects)
{
root.Add(GetElement(obj));
}
XDocument saveDoc = new XDocument(root);
File.WriteAllText(path, saveDoc.ToString());
//Debug.Log(path);
}
Достаю из файла так:
private void GenerateScene(XElement root)
{
foreach (XElement instance in root.Elements("instance"))
{
Vector3 position = Vector3.zero;
Vector3 rotation = Vector3.zero;
position.x = float.Parse(instance.Attribute("pos_x").Value);
position.y = float.Parse(instance.Attribute("pos_y").Value);
position.z = float.Parse(instance.Attribute("pos_z").Value);
rotation.x = float.Parse(instance.Attribute("rot_x").Value);
rotation.y = float.Parse(instance.Attribute("rot_y").Value);
rotation.z = float.Parse(instance.Attribute("rot_z").Value);
}
}
Ответы (1 шт):
Сколько лишней информации....
Я это делаю через float.Parse и он выдаёт FormatException, тк работает только с запятыми.
Ознакомся с понятием "культуры" и иными версиями метода float.Parse - там есть метод который принимает культуру и в нем ты можешь выбирать по какой культуре тебе необходимо парсить флоат -- соответственно сможешь и числа с точкой парсить.