为何未使用的Asset会导致Unity构建包体积增大?
问题分析与解决方案
你的实验结果说明Unity的资源收集机制把未使用的Asset包含进了构建包,常见原因和对应解决办法如下:
可能的原因
- 资源放在
Resources文件夹下:Unity会强制打包Resources目录下的所有资源,不管是否在场景或代码中引用。 - 资源被标记为“始终包含”:部分Asset的导入设置里勾选了
Always Included in Build,或者被添加到Player Settings的Preloaded Assets列表中,会被强制打包。 - 隐藏的依赖引用:Unity的依赖分析可能检测到间接引用——比如脚本里用
[SerializeField]声明了某个资源变量但没赋值,或者某个配置文件、AssetBundle清单间接引用了这些资源。 - 构建缓存或Library残留:删除Asset后,Library文件夹里的缓存文件没清理,导致旧资源仍被包含进新构建包。
- Addressables/AssetBundle配置问题:如果使用了Addressables,开启了
Build Content on Player Build且未正确分组,未使用的资源可能被打包进主包;手动打包的AssetBundle产物也可能被误包含。
解决办法
- 检查并清理Resources目录:把未使用的Asset移出
Resources文件夹,只保留确实需要通过Resources.Load加载的资源。 - 生成未使用资源报告:打开Unity编辑器的
Window > Analysis > Unused Assets(不同版本路径可能略有差异),生成报告确认资源状态,同时排查是否有隐藏引用。 - 取消强制包含设置:
- 选中目标Asset,在Inspector面板中取消
Always Included in Build(若有该选项); - 打开
Edit > Project Settings > Player,在Preloaded Assets列表中移除不需要的资源。
- 选中目标Asset,在Inspector面板中取消
- 清理缓存后重新构建:删除项目根目录的
Library文件夹,重启Unity后重新构建,避免缓存残留。 - 标记资源为EditorOnly:给确认不需要打包的Asset添加
EditorOnly标签,Unity会自动排除这类资源在构建之外。 - 调整Addressables配置:如果用了Addressables,关闭
Build > Build Content on Player Build,并确保未使用的资源被分到单独的分组,不参与主包构建。
内容的提问来源于stack exchange,提问作者KO7T0
相关产品推荐
相关产品推荐

