You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity命令行/Jenkins构建无限触发Asset垃圾回收故障

问题:Unity命令行构建触发无限Asset垃圾回收,无法完成构建

环境信息

  • Unity版本:2021.3.15f1
  • 构建目标:Android
  • 执行环境:Mac终端(计划用于Jenkins)
  • 构建命令:
/Applications/Unity/Hub/Editor/2021.3.15f1/Unity.app/Contents/MacOS/Unity -batchmode -nographics -buildTarget Android -serial snipped -username snipped -password snipped -projectPath /Users/amit/code/myproject -executeMethod build_script_v7.PerformBuild

异常现象

编辑器UI构建完全正常,但命令行构建时会无限重复触发Asset垃圾回收请求,且日志中显示的GC阈值数值异常(达到4294967296.00 GB),核心重复日志片段如下:

Request Asset Garbage Collect because used heap size increased from 6.9 MB to 6.9 MB, exceeding the threshold of 4294967296.00 GB.
Unloading 0 Unused Serialized files (Serialized files now loaded: 0)
Unloading 0 unused Assets / (0 B). Loaded Objects now: 13357.
Memory consumption went from 6.9 MB to 6.9 MB.
Total: 8.121250 ms (FindLiveObjects: 0.295292 ms CreateObjectMapping: 0.118958 ms MarkObjects: 7.697250 ms DeleteObjects: 0.009375 ms)


解决方法

1. 构建脚本中强制禁用自动Asset GC

在你的构建脚本build_script_v7.PerformBuild开头添加代码,手动关闭自动Asset垃圾回收,避免无限触发循环:

using UnityEditor;

public class build_script_v7
{
    public static void PerformBuild()
    {
        // 禁用自动Asset垃圾回收
        EditorSettings.SetAssetGarbageCollectorEnabled(false);
        
        // 执行你的构建逻辑
        BuildPlayerOptions buildOptions = new BuildPlayerOptions();
        // 填充你的构建参数...
        BuildPipeline.BuildPlayer(buildOptions);
        
        // 构建完成后可按需重新启用(可选)
        EditorSettings.SetAssetGarbageCollectorEnabled(true);
    }
}

2. 命令行强制设置GC阈值

直接在构建命令中添加参数,手动指定合理的GC阈值(比如和日志中初始正常的256MB一致),覆盖异常的阈值数值:

/Applications/Unity/Hub/Editor/2021.3.15f1/Unity.app/Contents/MacOS/Unity -batchmode -nographics -buildTarget Android -serial snipped -username snipped -password snipped -projectPath /Users/amit/code/myproject -executeMethod build_script_v7.PerformBuild -assetGCThreshold 268435456

注:268435456 是256MB对应的字节数

3. 排查构建脚本的内存操作逻辑

检查build_script_v7.PerformBuild中是否存在频繁加载/卸载资源的逻辑,或者未正确释放的对象引用——这类操作可能导致Unity的内存阈值计算异常。确保临时加载的资源在使用后通过Resources.UnloadUnusedAssets()或AssetDatabase.UnloadAsset()手动释放。

4. 清理项目缓存

删除项目目录下的Library文件夹,重新生成缓存,排除缓存损坏导致的异常:

rm -rf /Users/amit/code/myproject/Library

之后再执行原构建命令(首次构建会稍慢,因为需要重新生成缓存)。

5. 升级Unity补丁版本

2021.3.15f1属于LTS版本,但可能存在命令行构建的GC相关bug,尝试升级到同LTS分支的更高补丁版本(比如2021.3.20f1及以上),大概率能修复这类底层异常。


内容的提问来源于stack exchange,提问作者Amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:07:50