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 шт):

Автор решения: Andrew

Сколько лишней информации....

Я это делаю через float.Parse и он выдаёт FormatException, тк работает только с запятыми.

Ознакомся с понятием "культуры" и иными версиями метода float.Parse - там есть метод который принимает культуру и в нем ты можешь выбирать по какой культуре тебе необходимо парсить флоат -- соответственно сможешь и числа с точкой парсить.

→ Ссылка