用odin实现了一个资源复制编辑器,使用要安装odin,功能是把要复制的资源路径一个个添加设置,点copy能把列表里的资源全部复制,支持目录复制到目录,文件复制到目录,文件复制替换。提升效率,让自己有更多的时间研究其他东西或者休息,需要注意的是只有一个目标路径的情况下,不能同时填源文件路径和源文件夹路径,不然不知道要拷贝文件还是文件夹,这个应该很好理解吧。代码如下:文章来源地址https://www.toymoban.com/news/detail-853229.html
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 是一个用于创建或获取已存在窗口的辅助方法
var window = GetWindow<PathTableListWindow>();
window.Show();
}
// 示例数据,用于在编辑器窗口中显示
[TableList]
public List<Item> PathItems = new List<Item>();
[Button("Copy")]
private void CopyAssets()
{
foreach(var item in PathItems)
{
if (Directory.Exists(item.SourcePath))
{
// 如果源路径是文件夹,则递归复制所有文件和子文件夹
CopyDirectory(item.SourcePath, item.TargetPath);
}
else if (File.Exists(item.SourcePath))
{
// 如果源路径是文件,则直接复制文件
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))
{
// 创建目标目录
Directory.CreateDirectory(targetDest );
}
// 递归复制子目录
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;
}
}
文章来源:https://www.toymoban.com/news/detail-853229.html
到了这里,关于用odin实现的资源复制编辑器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!