当前位置: 首页 > news >正文

用odin实现的资源复制编辑器

用odin实现了一个资源复制编辑器,使用要安装odin,功能是把要复制的资源路径一个个添加设置,点copy能把列表里的资源全部复制,支持目录复制到目录,文件复制到目录,文件复制替换。提升效率,让自己有更多的时间研究其他东西或者休息,需要注意的是只有一个目标路径的情况下,不能同时填源文件路径和源文件夹路径,不然不知道要拷贝文件还是文件夹,这个应该很好理解吧。代码如下:

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;}
}
http://www.lryc.cn/news/339595.html

相关文章:

  • linux监控文件操作行为
  • 单链表接口函数的实现(增删查改)
  • 超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯片
  • uniapp_微信小程序_NaN
  • 1043: 利用栈完成后缀表达式的计算
  • 初学ELK - elk部署
  • [Java EE] 计算机工作原理与操作系统简明概要
  • 【尚硅谷】Git与GitLab的企业实战 学习笔记
  • 如何在MobaXterm上使用rz命令
  • 【计算机考研】408网课汇总+资源分享
  • 如何在OceanBase v4.2 中快速生成随机数据
  • nvm node.js的安装
  • 【Docker】安装Redis、Nginx
  • RK3568 UBUNTU修改网卡名称
  • 【华为OD机试C++】统计字符
  • 百货商场用户画像描绘and价值分析(下)
  • spring-cloud微服务gateway
  • 【python】在pycharm创建一个新的项目
  • java小作业(9)----用函数实现斐波那契数列(第二遍)
  • 部署项目的时候的一些错误
  • 1044: 顺序栈基本操作的实现
  • 微信小程序(总结)
  • C#医学实验室/检验信息管理系统(LIS系统)源码
  • Linux驱动编程-module_platform_driver注册platform_driver
  • 论文解读 --- 《针对PowerShell脚本的有效轻量级去混淆和语义感知攻击检测》
  • 在Spring Boot实战中碰到的拦截器与过滤器是什么?
  • 数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔
  • 软考之【系统架构设计师】
  • LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式
  • 如何看待2023年图灵奖