using UnityEditor; using UnityEngine; namespace Mirror.EditorScripts { public static class ScriptableObjectUtility { /// // This makes it easy to create, name and place unique new ScriptableObject asset files. /// public static T CreateAsset(string defaultName) where T : ScriptableObject { string path = SavePanel(defaultName); // user click cancel if (string.IsNullOrEmpty(path)) { return null; } T asset = ScriptableObject.CreateInstance(); SaveAsset(path, asset); return asset; } static string SavePanel(string name) { string path = EditorUtility.SaveFilePanel( "Save ScriptableObject", "Assets/Mirror/", name + ".asset", "asset"); // user click cancel, return early if (string.IsNullOrEmpty(path)) { return path; } // Unity only wants path from Assets if (path.StartsWith(Application.dataPath)) { path = "Assets" + path.Substring(Application.dataPath.Length); } return path; } static void SaveAsset(string path, ScriptableObject asset) { string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path); AssetDatabase.CreateAsset(asset, assetPathAndName); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } }