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); }
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)); }