Unity5的meta文件格式中增加了一项timeCreated 一般也没啥问题。但是如果我想用代码去生成一些文件,为了避免删除的情况,肯定是先清空文件夹下的所有文件然后在生成。
这样就出现个问题。因为把文件夹清空了。所以重新生成文件以后meta里的timeCreated就变化了。。这个太蛋疼了~~
我开始想到的办法是,不删除文件夹而是覆盖文件。这样是可以解决的,但是如果有删除操作,需要比对出那些是需要删除的。这就要写很多比对的代码了~
后来我又找到了一个办法。不要这样直接清空文件夹
1 2 3 |
UnityEditor.FileUtil.DeleteFileOrDirectory(path); |
而是过滤掉所有的.meta文件 , 这样会把除了meta文件以外的所有文件删除。
1 2 3 4 5 6 7 |
string withoutExtensions = "*.meta"; foreach (string file in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => !withoutExtensions.Contains(Path.GetExtension(s).ToLower()))) { UnityEditor.FileUtil.DeleteFileOrDirectory (file); } |
另外,删除下面就是要生成文件了。 删除完千万不要调用Refresh方法。
1 2 3 |
AssetDatabase.Refresh(); |
删除完直接跟着生成。最后在一起Refresh即可。最后接上你的生成代码这样就完美解决了。
- 本文固定链接: https://www.xuanyusong.com/archives/4193
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
怎么获取guid 呢
AssetDatabase.AssetPathToGUID
项目多人协作也有这个问题,别人更新下来即使什么也没动,unity也会改变timeCreated的值导致meta文件改变,有时还会引起冲突 如何避免呢?
每次提交的时候一定把mate文件提交上就不会 有timecreated变化啊
比如每天早上项目组大家更新svn(meta在svn肯定是提交了的),然后unity过一遍之后每个人本地的部分meta文件timecreated跟svn就又不一样了 又冲突了啊
那会不会有该删的meta文件没有删掉的问题呢
不会的, 因为meta文件 是unity 自己管理的。。 比如你把.lua文件删除了。 unity 会自动把.meta文件删除的