Unity中资源复制后加载
在Unity的工具编写中,有时需要用到资源复制功能。我们有2种选择方式:
一。使用c#方式的File.Copy来实现,缺点是需要刷新才会生成meta文件。meta文件不能直接复制,因为不能和原文件的guid相同。
二。使用AssetDatabase.CopyAsset来实现,缺点是如果文件已经存在,meta文件中的guid将会被改写。
那么为了达到复制文件,guid又不会变化的目的,比如自动生成某个文件(无论它是否存在)且立即加载它,就可以把上述2个方法结合起来用。
// 复制资源文件,不会改变meta中的guid public static bool CopyAsset(string path, string newPath) { // File可直接操作"Asset/"开头的路径 if (!File.Exists(path)) { Debug.LogError(path + ": file not found."); return false; } if (File.Exists(newPath)) { // 仅copy文件,不修改meta File.Copy(path, newPath, true); // 执行一次newPath的import AssetDatabase.Refresh(); return true; } else { // newPath自动import return AssetDatabase.CopyAsset(path, newPath); } }
此时如果在CopyAsset之后调用LoadAssetAtPath, 将会发现加载出来的是旧的内容(如目标文件存在时)。但此时如果我们需要加载更新后的文件,可以在新文件自己的OnPostprocessAllAssets调用中去加载和处理。