Unity中资源复制后加载
在Unity的工具编写中,有时需要用到资源复制功能。我们有2种选择方式:
一。使用c#方式的File.Copy来实现,缺点是需要刷新才会生成meta文件。meta文件不能直接复制,因为不能和原文件的guid相同。
二。使用AssetDatabase.CopyAsset来实现,缺点是如果文件已经存在,meta文件中的guid将会被改写。
那么为了达到复制文件,guid又不会变化的目的,比如自动生成某个文件(无论它是否存在)且立即加载它,就可以把上述2个方法结合起来用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // 复制资源文件,不会改变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调用中去加载和处理。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!