#if !UNITY_2019_1_OR_NEWER using System.IO; using System.Linq; using System.Text.RegularExpressions; using UnityEditor; namespace Coffee.UIExtensions { public static class ImportSampleMenu_UISoftMask { [MenuItem("Assets/Samples/Import UISoftMask Sample")] private static void ImportSample() { const string jsonGuid = "c43fd233e88b347cdabc530c23ffe30a"; const string dirName = "Demo"; ImportSample(jsonGuid, dirName); } private static void ImportSample(string jsonGuid, string sampleName) { var jsonPath = AssetDatabase.GUIDToAssetPath(jsonGuid); var json = File.ReadAllText(jsonPath); var version = Regex.Match(json, "\"version\"\\s*:\\s*\"([^\"]+)\"").Groups[1].Value; var displayName = Regex.Match(json, "\"displayName\"\\s*:\\s*\"([^\"]+)\"").Groups[1].Value; var src = string.Format("{0}/Samples~/{1}", Path.GetDirectoryName(jsonPath), sampleName); var srcAlt = string.Format("{0}/Samples/{1}", Path.GetDirectoryName(jsonPath), sampleName); var dst = string.Format("Assets/Samples/{0}/{1}/{2}", displayName, version, sampleName); var previousPath = GetPreviousSamplePath(displayName, sampleName); // Remove the previous sample directory. if (!string.IsNullOrEmpty(previousPath)) { var msg = "A different version of the sample is already imported at\n\n" + previousPath + "\n\nIt will be deleted when you update. Are you sure you want to continue?"; if (!EditorUtility.DisplayDialog("Sample Importer", msg, "OK", "Cancel")) return; FileUtil.DeleteFileOrDirectory(previousPath); var metaFile = previousPath + ".meta"; if (File.Exists(metaFile)) FileUtil.DeleteFileOrDirectory(metaFile); } if (!Directory.Exists(dst)) FileUtil.DeleteFileOrDirectory(dst); var dstDir = Path.GetDirectoryName(dst); if (!Directory.Exists(dstDir)) Directory.CreateDirectory(dstDir); if (Directory.Exists(src)) FileUtil.CopyFileOrDirectory(src, dst); else if (Directory.Exists(srcAlt)) FileUtil.CopyFileOrDirectory(srcAlt, dst); else throw new DirectoryNotFoundException(src); AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive); } private static string GetPreviousSamplePath(string displayName, string sampleName) { var sampleRoot = string.Format("Assets/Samples/{0}", displayName); var sampleRootInfo = new DirectoryInfo(sampleRoot); if (!sampleRootInfo.Exists) return null; return sampleRootInfo.GetDirectories() .Select(versionDir => Path.Combine(versionDir.ToString(), sampleName)) .FirstOrDefault(Directory.Exists); } } } #endif