private static void DeleteCriAsset(string sourceFolderPath, string assetFolderPath) { if (string.IsNullOrEmpty(sourceFolderPath) || string.IsNullOrEmpty(assetFolderPath)) { Debug.LogError("DeleteCriAsset Error."); return; } sourceFolderPath += PathUtility.PathSeparator; assetFolderPath = PathUtility.Combine(UnityPathUtility.GetProjectFolderPath(), assetFolderPath) + PathUtility.PathSeparator; if (!Directory.Exists(assetFolderPath)) { return; } var files = Directory.GetFiles(assetFolderPath, "*", SearchOption.AllDirectories); var deleteTargets = files .Where(x => Path.GetExtension(x) != ".meta") .Select(x => Tuple.Create(x, x.Replace(assetFolderPath, sourceFolderPath))) .Where(x => !File.Exists(x.Item2)) .ToArray(); if (deleteTargets.Any()) { var builder = new StringBuilder(); deleteTargets.ForEach(x => builder.AppendLine(x.Item1.ToString())); if (!EditorUtility.DisplayDialog("Delete Confirmation", builder.ToString(), "実行", "中止")) { return; } for (var i = 0; i < deleteTargets.Length; i++) { var assetPath = UnityPathUtility.ConvertFullPathToAssetPath(deleteTargets[i].Item1); AssetDatabase.DeleteAsset(assetPath); } Debug.LogFormat("Delete CriAssets:\n{0}", builder.ToString()); } var deleteDirectorys = DirectoryUtility.DeleteEmpty(assetFolderPath); if (deleteDirectorys.Any()) { var builder = new StringBuilder(); deleteDirectorys.ForEach(x => builder.AppendLine(x)); Debug.LogFormat("Delete Empty Directory:\n{0}", builder.ToString()); } }