Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
 public static void RecursiveRegisterObject(Transform transform, SerializedData serializedData)
 {
     RegisterObject(transform.gameObject, serializedData);
     foreach (Transform child in transform)
     {
         RecursiveRegisterObject(child, serializedData);
     }
 }
Beispiel #4
0
 public static void RegisterScriptObject(GameObject gameObject, SerializedData serializedData)
 {
     MonoBehaviour[] scripts = gameObject.GetComponents <MonoBehaviour>();
     foreach (var script in scripts)
     {
         RegisterObject(script, serializedData);
     }
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
 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);
 }
Beispiel #7
0
 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);
     }
 }
Beispiel #8
0
        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));
        }
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
 public static string ToJson(SerializedData serializedData)
 {
     return(JsonUtility.ToJson(serializedData));
 }