#c# #ios #unity3d
#c# #iOS #unity3d
Вопрос:
Я пытаюсь сохранить положение, поворот и масштабирование объекта.Наряду с этим, могу ли я сохранить сам Gameobject внутри json.Я сохранил файл JSON в Application.persistentDataPath.Ниже приведен мой класс datahandler
using System;
using UnityEngine;
[Serializable]
public class DataHandlers
{
public Vector3 localposinmap;
public Quaternion localrotinmap;
public Vector3 sizeofobj;
public GameObject gameobj;
public DataHandlers(Vector3 localpos, Quaternion localrot, Vector3 objsize,GameObject gobj)
{
this.localposinmap = localpos;
this.localrotinmap = localrot;
this.sizeofobj = objsize;
this.gameobj = gobj;
}
}
После сохранения файла моя строка JSON выглядит следующим образом
{
"SaveValues": [
{
"localposinmap": {
"x": 0.0237075537443161,
"y": -0.27374106645584106,
"z": -0.6681503057479858
},
"localrotinmap": {
"x": 0,
"y": -0.08031735569238663,
"z": 0,
"w": -0.996769368648529
},
"sizeofobj": {
"x": 1,
"y": 1,
"z": 1
},
"gameobj": {
"m_FileID": -112,
"m_PathID": 0
}
},
{
"localposinmap": {
"x": 0.09054452180862427,
"y": -0.273919016122818,
"z": -0.5062751770019531
},
"localrotinmap": {
"x": 0.0001220703125,
"y": 0.06480370461940765,
"z": 0,
"w": -0.9978980422019958
},
"sizeofobj": {
"x": 1,
"y": 1,
"z": 1
},
"gameobj": {
"m_FileID": -456,
"m_PathID": 0
}
}
]
}
После прочтения gameobj: «m_FileID»:-456 и «m_PathID»:0
Могу ли я прочитать это значение обратно и создать экземпляр того же Gameobject, используя приведенные выше сведения?
Комментарии:
1. Вы имеете в виду создание сетки? Если да, вы не можете этого сделать с этой информацией
Ответ №1:
Вы можете использовать JsonUtility.ToJson
для преобразования вашего объекта в строку json и JsonUtility.FromJson
для получения его обратно. Проверьте документы Unity для получения дополнительной информации. Имейте в виду:
Поддерживаются только простые классы и структуры; классы, производные от UnityEngine.Объект (такой как MonoBehaviour или ScriptableObject) не является.
Комментарии:
1. И если вы хотите получить лучшие результаты, чем те, что предоставляет JsonUtility, используйте Json Dot Net, который позволит вам настраивать собственные конвертеры.
2. Я согласен с @Draco18s, но для этого требуется добавление внешней библиотеки.
3. Ну, да. Но я не понимаю, почему это проблема. JsonUtility очень прост и не может обрабатывать определенные типы сценариев, такие как сериализация чего-то вроде одноэлементной ссылки (подумайте о том, как Minecraft сохраняет информацию о блоке и элементе: в виде строкового ключа в реестре). JsonUtility бездумно сериализует этот синглтон тысячи раз (и вообще не десериализует, потому что синглтон уже существует).
4. @Dave Вы имеете в виду, что классы движка Unity не поддерживаются?… но здесь я пытаюсь сохранить vector3 и quaternion, которые сохраняются. Также Gameobject IDs.So если я знаю путь (он добавлен в массив Gameobject), где находится gameobject, могу ли я загрузить его обратно, используя приведенную выше информацию, то есть … gameobj»: { «m_FileID»: -456, «m_PathID»: 0 }
5. Да, некоторые объекты unity, такие как Vector3 или Quaternion, не сериализуемы в Unity. В случае этих объектов вы можете создать свои собственные простые классы, такие как SerializableVector3 и SerializableQuaternion. Проверьте это обсуждение на форуме . Как вы создаете эту строку JSON? Вашим собственным методом? Если это так, вам действительно следует перейти на JsonUtility или даже лучше, как упоминал @Draco18s Json.NET.