private static object CopyClass(ScriptableObject owner, object original) { Type type = original.GetType(); object copy = Activator.CreateInstance(type, true); foreach (FieldInfo info in TypeUtility.GetFields(type)) { if (info.IsLiteral) { continue; } info.SetValue(copy, CopyObject(owner, info.GetValue(original))); } return(copy); }
/// <summary> /// Called when the inspector is about to destroy this one. /// Loop in all the internal and destroy sub-components. /// </summary> public void Erase() { foreach (FieldInfo info in TypeUtility.GetFields(GetType())) { object value = info.GetValue(this); if (value is ComponentMonoBehaviour) { ComponentMonoBehaviour component = value as ComponentMonoBehaviour; if (component.Owner == this) { component.Erase(); } } } DestroyImmediate(this, true); }
/// <summary> /// Called when the inspector is about to destroy this one. /// Loop in all the internal and destroy sub-components. /// </summary> public void Erase() { foreach (FieldInfo info in TypeUtility.GetFields(GetType())) { object value = info.GetValue(this); if (value is ScriptableComponent) { ScriptableComponent component = value as ScriptableComponent; if (component.Owner == Owner) { component.Erase(); } } } DestroyImmediate(this, true); }
private static ScriptableComponent CopyComponent(ScriptableObject owner, ScriptableComponent original) { Type type = original.GetType(); ScriptableComponent copy = original.Instantiate(); foreach (FieldInfo info in TypeUtility.GetFields(type)) { if (info.IsLiteral) { continue; } info.SetValue(copy, CopyObject(copy, info.GetValue(original))); } copy.Owner = owner; return(copy); }