public override void Write(object obj, ES3Writer writer)
        {
            if (WriteUsingDerivedType(obj, writer))
            {
                return;
            }

            var instance = (UnityEngine.GameObject)obj;

            if (ES3ReferenceMgrBase.Current != null)
            {
                var es3Prefab = instance.GetComponent <ES3Prefab>();
                if (es3Prefab != null)
                {
                    writer.WriteProperty(prefabPropertyName, es3Prefab, ES3Type_ES3PrefabInternal.Instance);
                }
                else
                {
                    writer.WriteRef(instance);
                    // Write the ID of this Transform so we can assign it's ID when we load.
                    writer.WriteProperty("transformID", ES3ReferenceMgrBase.Current.Add(instance.transform));
                }
            }

            var es3AutoSave = instance.GetComponent <ES3AutoSave>();

            //if(es3AutoSave == null || es3AutoSave.saveLayer)
            writer.WriteProperty("layer", instance.layer, ES3Type_int.Instance);
            //if(es3AutoSave == null || es3AutoSave.saveTag)
            writer.WriteProperty("tag", instance.tag, ES3Type_string.Instance);
            //if(es3AutoSave == null || es3AutoSave.saveName)
            writer.WriteProperty("name", instance.name, ES3Type_string.Instance);
            //if(es3AutoSave == null || es3AutoSave.saveHideFlags)
            writer.WriteProperty("hideFlags", instance.hideFlags);
            if (es3AutoSave == null || es3AutoSave.saveChildren)
            {
                writer.WriteProperty("children", GetChildren(instance));
            }

            var components = new List <Component>();

            foreach (var component in instance.GetComponents <Component>())
            {
                var componentType = component.GetType();
                // Only save explicitly-supported Components, or those explicitly marked as Serializable.
                if (ES3TypeMgr.GetES3Type(componentType) != null || ES3Reflection.AttributeIsDefined(componentType, ES3Reflection.serializableAttributeType))
                {
                    components.Add(component);
                }
            }

            writer.WriteProperty("components", components);
        }
Exemple #2
0
 private static Component GetOrAddComponent(GameObject go, Type type)
 {
     if (type == typeof(Transform))
     {
         return(go.GetComponent(type));
     }
     // Manage types which can only have a single Component attached.
     else if (type == typeof(MeshFilter) || type.Name.ToString().Contains("Renderer") || ES3Reflection.AttributeIsDefined(type, typeof(DisallowMultipleComponent)))
     {
         return(GetOrCreateComponentIfNotExists(go, type));
     }
     return(go.AddComponent(type));
 }