rustum 发表于 2021-12-8 13:59

Unity 关闭脚本编译

2021.12.6             又是充实工具库的一天呢
每次批量写C#脚本或修改脚本目录结构,都会触发很多次脚本编译。项目比较大的时候,每次加载脚本都是漫长的等待。所以写个小工具,解放一下自我。
unity提供了两个函数来 锁定程序集的重新加载
EditorApplication.LockReloadAssemblies
EditorApplication.UnlockReloadAssemblies需要注意解锁
需要注意解锁
需要注意解锁

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";
   
    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);
            }
      }
    }
}

mypro334 发表于 2021-12-8 14:04

[思考]坑队友的工具

ainatipen 发表于 2021-12-8 14:13

?!woc还有这操作?我这项目每次改个代码reload十秒钟都要把人逼死了。[大哭]

super1 发表于 2021-12-8 14:20

太强了

Arzie100 发表于 2021-12-8 14:26

啊?属性里关了自动刷新就不会改点代码自动编译了呀,想变异的时候ctrl+r刷新一下,外部导入资源记得也刷新一下[好奇]

LiteralliJeff 发表于 2021-12-8 14:30

项目偏好里的 通用 -〉 自动刷新编辑器 如果资源(asset下的任意文件)发生改变,是否立即刷新。我写的只针对代码编译。

Doris232 发表于 2021-12-8 14:38

可以用程序集(Assembly Definition)划分来减少编译时间。这个停止编译并不能减少编译时间。只能控制是否开启编译。

franciscochonge 发表于 2021-12-8 14:47

[赞同]

BlaXuan 发表于 2021-12-8 14:54

这方法我试过,但是用了某个插件工具查看编译情况的结果是,编译耗时2s,assembly reload十秒钟,重点在于后面的Reload操作耗时而非编译耗时,划分程序集就没啥用…

kirin77 发表于 2021-12-8 14:57

重新加载程序集就比较麻烦,出问题的点比较多。可以参考下这个文章,查下到底是什么加载久。增加脚本程序集重新加载时间
目前我只在Unity2021以后的版本出现过reload耗时10s+的情况。换成2020就好多了。
页: [1] 2
查看完整版本: Unity 关闭脚本编译