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

posted @ 2022-06-27 21:13  hghhe  阅读(491)  评论(0编辑  收藏  举报