unity中监听文件夹并且创建文件夹后做资源更新

unity中监听文件夹并且创建文件夹后做资源更新

有时候我们在设计的时候,可能对项目的文件内容进行监听,也可能需要在监听某个文件夹的操作,并且做出相对应的处理,例如项目资源的大小监听等,以下就提供两种常用的方式:

  1. FileSystemWatcher;
  2. ProjectWindowUtil.StartNameEditingIfProjectWindowExists;

FileSystemWatcher

侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。

1.常用的几个基本属性:

(1) Path :设置要监视的目录的路径。

(2) IncludeSubdirectories :设置是否级联监视指定路径中的子目录。

(3) Filter :设置筛选字符串,用于确定在目录中监视哪些类型的文件。

(4) NotifyFilter :设置文件的哪些属性的变动会触发Changed事件,同时监控多个属性变动可以按“或”组合。

(5) EnableRaisingEvents :设置是否开始监控。(默认为false)

2.常用事件:

(1) Changed :当更改文件和目录时发生,可以通过NotifyFilter属性设置触发该事件的需要文件更改的属性。

(2) Created : 当创建文件和目录时发生。

(3) Deleted : 删除文件或目录时发生。

(4) Renamed :重命名文件或目录时发生。

(5) FileSystemEventArgs :文件更改/创建/删除监听参数

(6) RenamedEventArgs :重名名监听参数

基本代码片段如下:

public class FileSystemWatcherProgram
{
    //创建一个文件监听类
    private FileSystemWatcher watcher;
    /// <summary>
    /// 开始监听
    /// </summary>
    /// <param name="path">监听路径</param>
    public void BeginWatch(string path)
    {
        if (watcher == null)
        {
            watcher = new FileSystemWatcher();
        }
        //初始化监听            
        watcher.BeginInit();
        //设置是否启用监听?            
        watcher.EnableRaisingEvents = true;
        //设置需要监听的类型:文件夹名称 | 文件大小     
        watcher.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.Size;
        //设置监听的路径     
        watcher.Path = path;
        //指定文件夹创建监听事件    
        watcher.Created += new FileSystemEventHandler(OnCreated);
        //...这里还可以创建其他监听
        //结束初始化            
        watcher.EndInit();
    }
    private void OnCreated(object sender, FileSystemEventArgs e)
    {
        // 这里做需要执行的处理...
        // 需要注意的是监听是多线程监听,所以如果想要到其他线程去做处理,需要用到委托
        watcher.EnableRaisingEvents = false;
        watcher.Dispose();
    }
}

注意:在Unity中如果是监听创建文件,并且希望在OnCreated 函数中做资源更改,在做AssetBaseData.Refresh(),会无效;因为这里是多线程,需要在手动更新一下文件。
如果需要在OnCreate()中创建文件,推荐ProjectWindowUtil.StartNameEditingIfProjectWindowExists

ProjectWindowUtil.StartNameEditingIfProjectWindowExists

查看源代码可以知道这个类可以帮助我们创建模板,在游戏开发中,比较常见的就是创建lua,cs模板。
但是如果需要对业务逻辑模块进行批量处理,即创建文件夹后,自动创建xxData.cs,xxView.cs文件时,则需要对文件夹做处理
(1)核心代码块

public class Program
{
	...
	ProjectWindowUtil.StartNameEditingIfProjectWindowExists(
	 //InstanceID
     0, 
     // EndAction
     ScriptableObject.CreateInstance<DoCreateFolder>(), 
     // FileName
     "New Folder", 
     //Img
     EditorGUIUtility.IconContent(EditorResources.emptyFolderIconName).image as Texture2D, 
     //Resource Path
     null);
	...
	internal class DoCreateFolder : EndNameEditAction
    {
        public override void Action(int instanceId, string pathName, string resourceFile)
        {
            string guid = AssetDatabase.CreateFolder(Path.GetDirectoryName(pathName), Path.GetFileName(pathName));
            //做你需要做的事情
            TryCreateLuaFile(pathName);
            TryCreateCsFile(pathName);
            AssetDatabase.Refresh();
            UnityEngine.Object o = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid), typeof(UnityEngine.Object));
            ProjectWindowUtil.ShowCreatedAsset(o);
        }
		private void TryCreateLuaFile(string folderName)
		{
			....
		}
		private void TryCreateCsFile(string folderName)
		{
			....
		}
	}
}

用这个就可以进行在Unity中创建文件夹后,进行创建后的处理,做资源更改处理

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值