找回密码
 立即注册
查看: 579|回复: 10

Unity 关闭脚本编译

[复制链接]
发表于 2021-12-8 13:59 | 显示全部楼层 |阅读模式
2021.12.6             又是充实工具库的一天呢
每次批量写C#脚本或修改脚本目录结构,都会触发很多次脚本编译。项目比较大的时候,每次加载脚本都是漫长的等待。所以写个小工具,解放一下自我。
unity提供了两个函数来 锁定程序集的重新加载
EditorApplication.LockReloadAssemblies
EditorApplication.UnlockReloadAssemblies
需要注意解锁
需要注意解锁
需要注意解锁
[InitializeOnLoad]
internal class SetReloadAssemblies
{
    static SetReloadAssemblies()
    {
        EditorApplication.playModeStateChanged += LogPlayModeState;
    }

    private static void LogPlayModeState(PlayModeStateChange state)
    {
        if (state == PlayModeStateChange.EnteredPlayMode && EditorPrefs.GetBool(KEY, false))
        {
            EditorApplication.isPlaying = false;
            Debug.LogWarning("重新加载程序集已被锁定。");
            EditorUtility.DisplayDialog("警告", "已锁定重新加载程序集,请注意!!!", "知道后果");
        }
    }

    private const string MENUKEY = "ToolKit/LockReloadAssemblies";
    private const string KEY = "LockReloadAssemblies";
    [MenuItem(MENUKEY, priority = int.MaxValue)]
    private static void SetLockReloadAssemblies()
    {
        if (EditorPrefs.GetBool(KEY, false))
        {
            Debug.Log("重新加载程序集已解锁。");
            EditorApplication.UnlockReloadAssemblies();
            EditorPrefs.SetBool(KEY, false);
            Menu.SetChecked(MENUKEY, false);
        }
        else
        {
            if (EditorUtility.DisplayDialog("提示", "是否锁定 重新加载程序集 \n\n锁定以后无法重新加载程序集,\n也不会触发脚本编译。", "继续锁定", "取消"))
            {
                Debug.Log("重新加载程序集已锁定。");
                EditorApplication.LockReloadAssemblies();
                EditorPrefs.SetBool(KEY, true);
                Menu.SetChecked(MENUKEY, true);
            }
        }
    }
}
发表于 2021-12-8 14:04 | 显示全部楼层
[思考]坑队友的工具
发表于 2021-12-8 14:13 | 显示全部楼层
?!woc还有这操作?我这项目每次改个代码reload十秒钟都要把人逼死了。[大哭]
发表于 2021-12-8 14:20 | 显示全部楼层
太强了
发表于 2021-12-8 14:26 | 显示全部楼层
啊?属性里关了自动刷新就不会改点代码自动编译了呀,想变异的时候ctrl+r刷新一下,外部导入资源记得也刷新一下[好奇]
发表于 2021-12-8 14:30 | 显示全部楼层
项目偏好里的 通用 -〉 自动刷新编辑器 如果资源(asset下的任意文件)发生改变,是否立即刷新。我写的只针对代码编译。
发表于 2021-12-8 14:38 | 显示全部楼层
可以用程序集(Assembly Definition)划分来减少编译时间。这个停止编译并不能减少编译时间。只能控制是否开启编译。
发表于 2021-12-8 14:47 | 显示全部楼层
[赞同]
发表于 2021-12-8 14:54 | 显示全部楼层
这方法我试过,但是用了某个插件工具查看编译情况的结果是,编译耗时2s,assembly reload十秒钟,重点在于后面的Reload操作耗时而非编译耗时,划分程序集就没啥用…
发表于 2021-12-8 14:57 | 显示全部楼层
重新加载程序集就比较麻烦,出问题的点比较多。可以参考下这个文章,查下到底是什么加载久。增加脚本程序集重新加载时间
目前我只在Unity2021以后的版本出现过reload耗时10s+的情况。换成2020就好多了。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 04:50 , Processed in 0.069181 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表