Unity-修改UMP中的代码

在使用UPM(Unity Package Manager)管理项目插件的时候,我们会遇到需要修改源码的情况。但是每次修改完代码就会被回滚到初始状态,因为UMP会对文件进行校验,发现与网络上的包不一致的情况下就会重新下载。

解决代码回滚的情况:


方法一:手动复制package文件夹

一、在文件管理器中找到你要修改的package文件夹,YourProject/Library/PackageCache文件夹里存放着很多的只读的packages,找到你要修改的package。

二、把整个文件夹复制一份到YourProject/Packages文件夹中。原本Package文件夹中只有两个json文件。

三、把文件夹及子文件的权限改成非只读。

四、再用vs打开要修改的代码进行修改,这时候就不会回滚了。


方法二:使用Unity提供的api,自动把packag嵌入到项目中,不再与package服务器中版本进行校验。

一、在Editor文件夹中新建一个脚本“EmbedPackage.cs”。

二、粘贴下面的代码。

using System.IO;
using UnityEditor.PackageManager;
using UnityEngine;

namespace UnityEditor.Extensions
{
#if UNITY_2017_3_OR_NEWER

    /// <summary>
    /// Editor extension for embedding packages as a local copy in the project.
    /// This can be useful in case you want to modify the package's source code.
    /// </summary>
    public static class EmbedPackage
    {
        [MenuItem("Assets/Embed Package", false, 1000000)]
        private static void EmbedPackageMenuItem()
        {
            var selection = Selection.activeObject;
            var packageName = Path.GetFileName(AssetDatabase.GetAssetPath(selection));

            Debug.Log($"Embedding package '{packageName}' into the project.");

            Client.Embed(packageName);

            AssetDatabase.Refresh();
        }

        [MenuItem("Assets/Embed Package", true)]
        private static bool EmbedPackageValidation()
        {
            var selection = Selection.activeObject;

            if (selection == null)
            {
                return false;
            }

            var path = AssetDatabase.GetAssetPath(selection);
            var folder = Path.GetDirectoryName(path);

            // We only deal with direct folders under Packages/
            return folder == "Packages";
        }
    }

#endif
}

三、在Project窗口中点选你要修改的package,然后打开右键菜单。选择弹窗最下面的Embed Package。

四、自动把你选择的package嵌入到项目中,断开了与服务器的连接。这时候做进行修改就不会回滚了。


注意事项:如果要嵌入的包是在Edit>ProjectSetting>PackageManager>ScopedRegistry中注册添加的,第二种嵌入方式无效。 2022-09-06

点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像(已失效)