예제 #1
0
        private void CloneAssets()
        {
            DeleteClonedAssets();

            var clonedAssets = new List <string>();

            AssetDatabase.StartAssetEditing();

            foreach (var cloneAsset in cloneAssets)
            {
                if (string.IsNullOrEmpty(cloneAsset.Source) || string.IsNullOrEmpty(cloneAsset.To))
                {
                    Debug.LogError("アセットコピーの設定が正しくありません.");
                    continue;
                }

                var projectFolder = UnityPathUtility.GetProjectFolderPath();

                var source = PathUtility.RelativePathToFullPath(projectFolder, cloneAsset.Source);
                var dest   = PathUtility.RelativePathToFullPath(projectFolder, cloneAsset.To);

                // 除外対象か判定.
                Func <string, bool> ignoreCheck = x =>
                {
                    return(Path.GetExtension(x) != ".meta" &&
                           !string.IsNullOrEmpty(Path.GetFileNameWithoutExtension(x)));
                };

                // メタファイルはコピーしない.
                var cloned = DirectoryUtility.Clone(source, dest, ignoreCheck)
                             .Select(x => UnityPathUtility.ConvertFullPathToAssetPath(x))
                             .ToArray();

                foreach (var item in cloned)
                {
                    AssetDatabase.ImportAsset(item);
                }

                clonedAssets.AddRange(cloned);
            }

            AssetDatabase.StopAssetEditing();

            Prefs.clonedAssets = clonedAssets.Select(x => AssetDatabase.AssetPathToGUID(x)).ToArray();
        }