中山比好的做網(wǎng)站的公司企業(yè)官網(wǎng)
用odin實(shí)現(xiàn)了一個(gè)資源復(fù)制編輯器,使用要安裝odin,功能是把要復(fù)制的資源路徑一個(gè)個(gè)添加設(shè)置,點(diǎn)copy能把列表里的資源全部復(fù)制,支持目錄復(fù)制到目錄,文件復(fù)制到目錄,文件復(fù)制替換。提升效率,讓自己有更多的時(shí)間研究其他東西或者休息,需要注意的是只有一個(gè)目標(biāo)路徑的情況下,不能同時(shí)填源文件路徑和源文件夾路徑,不然不知道要拷貝文件還是文件夾,這個(gè)應(yīng)該很好理解吧。代碼如下:
using UnityEditor;
using UnityEngine;
using Sirenix.OdinInspector.Editor;
using Sirenix.OdinInspector;
using System;
using System.IO;
using System.Collecttions.Generic;
public class PathTableListWindow : OdinEditorWindow
{[MenuItem("Window/Open Path Table List")]private static void OpenWindow(){// GetExistingOrCreateNewWindow 是一個(gè)用于創(chuàng)建或獲取已存在窗口的輔助方法var window = GetWindow<PathTableListWindow>();window.Show();}// 示例數(shù)據(jù),用于在編輯器窗口中顯示[TableList]public List<Item> PathItems = new List<Item>();[Button("Copy")]private void CopyAssets(){foreach(var item in PathItems){if (Directory.Exists(item.SourcePath)){// 如果源路徑是文件夾,則遞歸復(fù)制所有文件和子文件夾CopyDirectory(item.SourcePath, item.TargetPath);}else if (File.Exists(item.SourcePath)){// 如果源路徑是文件,則直接復(fù)制文件string destDir = Path.GetDirectoryName(item.TargetPath);if (!Directory.Exists(destDir)){Directory.CreateDirectory(destDir);}File.Copy(item.SourcePath, item.TargetPath, true);}if(!string.IsNullOrEmpty(item.SourceFilePath)){if(string.IsNullOrEmpty(item.TargetFilePath){var destFile = Path.Combine(item.TargetPath,Path.GetFileName(item.TargetFilePath));File.Copy(item.SourceFilePath, destFile, true);}else{File.Copy(item.SourceFilePath, item.TargetFilePath, true);}}}}private void CopyDirectory(string source, string destination){if(File.GetAttributes(source).HasFlag(FileAttributes.Directory)){string targetDest = Path.Combine(destination,Path.GetFileName(source));if(!Directory.Exists(targetDest)){// 創(chuàng)建目標(biāo)目錄Directory.CreateDirectory(targetDest );}// 遞歸復(fù)制子目錄string[] dirs = Directory.GetDirectories(source);foreach (string dir in dirs){string destDir = Path.Combine(targetDest, Path.GetFileName(dir));CopyDirectory(dir, destDir);}// 獲取源目錄下的所有文件string[] files = Directory.GetFiles(source);foreach (string file in files){string destFile = Path.Combine(targetDest, Path.GetFileName(file));File.Copy(file, destFile, true);}}else{// 獲取源目錄下的所有文件string[] files = Directory.GetFiles(source);foreach (string file in files){string destFile = Path.Combine(destination, Path.GetFileName(file));File.Copy(file, destFile, true);}}}[System.Serializable]public class Item{[TableColumnWidth(60)][FolderPath, PropertyOrder(-1),HorizontalGroup("資源路徑列表",0.25f)]public string SourcePath;[FolderPath, PropertyOrder(-1),HorizontalGroup("資源路徑列表",0.25f)]public string TargetPath;[FilePath, PropertyOrder(-2),HorizontalGroup("資源路徑列表",0.25f)]public string TargeFiletPath;[FilePath, PropertyOrder(-2),HorizontalGroup("資源路徑列表",0.25f)]public string SourceFilePath;}
}