using System; using System.Reflection; namespace XCEngine { public abstract class ScriptableObject : Object { protected ScriptableObject() { } public static T CreateInstance() where T : ScriptableObject { return CreateInstance(typeof(T)) as T; } public static ScriptableObject CreateInstance( Type scriptableObjectType) { if (scriptableObjectType == null || !typeof(ScriptableObject) .IsAssignableFrom(scriptableObjectType)) { return null; } try { return Activator.CreateInstance( scriptableObjectType, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, binder: null, args: Array.Empty(), culture: null) as ScriptableObject; } catch { return null; } } } }