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调用中去加载和处理。

posted @   hghhe  阅读(554)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
点击右上角即可分享
微信分享提示