/// <summary> /// Serialize root with defines children. /// </summary> /// <param name="root"></param> /// <param name="children"></param> /// <returns></returns> public static SerializedData Serialize(GameObject root, IList <Transform> children) { SerializedData serializedData = new SerializedData(); var r = SerializeObject(root); r.owner = 0; serializedData.serializedObjects.Add(root.GetInstanceID(), r); serializedData.objects.Add(root); RegisterScriptObject(root, serializedData); if (children != null) { foreach (var child in children) { RegisterObject(child.gameObject, serializedData); } } var objs = serializedData.objects; serializedData.objects = new List <Object>(); foreach (var obj in objs) { if (obj is GameObject || !(obj is MonoBehaviour)) { continue; } var json = Serialize(obj, false, serializedData); if (serializedData.serializedObjects.ContainsKey(obj.GetInstanceID())) { serializedData.serializedObjects[obj.GetInstanceID()].data = json; } } return(serializedData); }
/// <summary> /// Serialize root including its children. /// </summary> /// <param name="root"></param> /// <returns></returns> public static SerializedData Serialize(GameObject root) { SerializedData serializedData = new SerializedData(); var r = SerializeObject(root); r.owner = 0; serializedData.serializedObjects.Add(root.GetInstanceID(), r); serializedData.objects.Add(root); RecursiveRegisterObject(root.transform, serializedData); var objs = serializedData.objects; serializedData.objects = new List <Object>(); foreach (var obj in objs) { if (obj is GameObject || !(obj is MonoBehaviour)) { continue; } var json = Serialize(obj, false, serializedData); if (serializedData.serializedObjects.ContainsKey(obj.GetInstanceID())) { serializedData.serializedObjects[obj.GetInstanceID()].data = json; } } return(serializedData); }
public static void RecursiveRegisterObject(Transform transform, SerializedData serializedData) { RegisterObject(transform.gameObject, serializedData); foreach (Transform child in transform) { RecursiveRegisterObject(child, serializedData); } }
public static void RegisterScriptObject(GameObject gameObject, SerializedData serializedData) { MonoBehaviour[] scripts = gameObject.GetComponents <MonoBehaviour>(); foreach (var script in scripts) { RegisterObject(script, serializedData); } }
public static void RegisterObject(Component component, SerializedData serializedData) { if (serializedData.serializedObjects.ContainsKey(component.GetInstanceID())) { return; } serializedData.serializedObjects.Add(component.GetInstanceID(), SerializeObject(component)); serializedData.objects.Add(component); }
public static void RegisterObject(GameObject gameObject, SerializedData serializedData) { if (!serializedData.serializedObjects.ContainsKey(gameObject.GetInstanceID())) { serializedData.serializedObjects.Add(gameObject.GetInstanceID(), SerializeObject(gameObject)); serializedData.objects.Add(gameObject); } RegisterScriptObject(gameObject, serializedData); }
public static void Deserialize <T>(string json, ref T instance, SerializedData serializedData) { try { fsData data; fsJsonParser.Parse(json, out data); if (data != null) { fsSerializer serializer = new fsSerializer(); serializer.AddConverter(new ObjectConverter() { data = serializedData }); serializer.TryDeserialize <T>(data, ref instance); } } catch (System.Exception ex) { Debug.LogException(ex); } }
public static string Serialize(object obj, bool Indented, SerializedData serializedData) { fsData data; //Make new serializer. fsSerializer s = new fsSerializer(); //Add new UnityObjectConverter so unity reference object will serialize and saved to list. s.AddConverter(new ObjectConverter() { data = serializedData }); //Make sure Enum type serialze to int so any changed made to enum will not lose. s.Config.SerializeEnumsAsInteger = true; //Disable property serialization so this save more performance and memory. s.Config.EnablePropertySerialization = false; //Try serializing object s.TrySerialize(obj, out data); if (Indented) { return(fsJsonPrinter.PrettyJson(data)); } return(fsJsonPrinter.CompressedJson(data)); }
public static void Deserialize(SerializedData serializedData, GameObject root = null) { serializedData.deserializedObjects = new Dictionary <int, Object>(); //Creating GameObject first List <KeyValuePair <GameObject, SerializedObject> > gameObjects = new List <KeyValuePair <GameObject, SerializedObject> >(); foreach (var pair in serializedData.serializedObjects) { System.Type type = pair.Value.type.ToType(); if (type == typeof(GameObject)) { GameObject go; if (root != null && pair.Value.owner == 0) { go = root; } else { go = new GameObject(pair.Value.data); } gameObjects.Add(new KeyValuePair <GameObject, SerializedObject>(go, pair.Value)); serializedData.deserializedObjects.Add(pair.Key, go); } } //Arrage GameObject foreach (var pair in gameObjects) { int id = pair.Value.owner; if (id != 0) { pair.Key.transform.SetParent((serializedData.deserializedObjects[id] as GameObject).transform); } } List <KeyValuePair <Component, string> > components = new List <KeyValuePair <Component, string> >(); //Add Component foreach (var pair in serializedData.serializedObjects) { System.Type type = pair.Value.type.ToType(); if (!type.IsSubclassOf(typeof(Component))) { continue; } GameObject owner = serializedData.deserializedObjects[pair.Value.owner] as GameObject; if (type.IsSubclassOf(typeof(MonoBehaviour))) { Component comp = owner.AddComponent(type); components.Add(new KeyValuePair <Component, string>(comp, pair.Value.data)); serializedData.deserializedObjects.Add(pair.Key, comp); } else { Component comp = owner.GetComponent(type); if (comp == null) { //Debug.LogError("The component type of " + type.PrettyName(true) + " is not found in GameObject : " + owner.name, owner); //return; continue; } components.Add(new KeyValuePair <Component, string>(comp, pair.Value.data)); serializedData.deserializedObjects.Add(pair.Key, comp); } } //Apply Data foreach (var pair in components) { Component comp = pair.Key; Deserialize(pair.Value, ref comp, serializedData); } }
public static string ToJson(SerializedData serializedData) { return(JsonUtility.ToJson(serializedData)); }