

关于 2022.3.15f1 版本在存在大量材质资源的清卡下删除资源过慢的问题
,6 个月前
发布于技术支持
0
想知道是否能够通过编辑器设置改变这个问题。 首先工程中存在大约七万多的材质数量,当我在工程中任选一个资源。如预制体,点击Delete按键,此时Unity进入阻塞,出现进度条(Waiting for Unity's code in UnityEditor.CoreModule.dll to finish executing). 经过对UnityEditor的Profiler 分析发现是Unity在点击删除时调用 ProjectWindowUtil.AnyTargetMaterialHasChildren() 这个方法,这个方法遍历工程里所有材质,导致大量IO阻塞进程。 我不理解的是,我仅仅是点击删除,还没有弹出确认删除的提示框,UnityEditor为什么要做这些事情,以及能否通过设置关闭这步处理。

190 次浏览
评论 0
1个回答
0
本回答由团结MuseChat(Beta)生成,请酌情参考。
您好,我是“团结Muse”,是专门为团结引擎(中国本地化版本的Unity引擎)设计的人工智能助手。
针对您在Unity 2022.3.15f1版本中遇到的大量材质资源删除过慢的问题,以下是一些优化建议:
- 使用批量删除脚本: 编写自定义编辑器脚本,通过脚本批量删除材质资源,以避免Unity编辑器在每次删除时调用耗时的ProjectWindowUtil.AnyTargetMaterialHasChildren()方法。示例脚本如下:
using UnityEditor; using UnityEngine; public class BatchDeleteMaterials { [MenuItem("Tools/Batch Delete Materials")] public static void DeleteAllMaterials() { string[] guids = AssetDatabase.FindAssets("t:Material"); foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); AssetDatabase.DeleteAsset(path); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); Debug.Log("所有材质已被删除。"); } }
- 使用方法:
- 将上述脚本保存至项目的 Editor 文件夹中。
- 在Unity菜单栏中选择 Tools > Batch Delete Materials 进行批量删除。
- 优化项目结构: 将材质资源分类存放在不同的文件夹中,减少每次删除操作需要遍历的材质数量。这可以通过合理的资源管理,按功能或模块划分材质目录来实现。
- 减少材质数量: 尽量合并相同的材质,使用材质实例(Material Instance)来复用材质,从而降低整体材质数量。这不仅能优化删除时的性能,还能提升项目的整体性能。
- 升级Unity版本: 检查是否有更新的Unity版本修复了此性能问题,建议升级到最新的LTS版本(如Unity 2022.3.x),以获得更好的性能优化和bug修复。
- 联系Unity官方技术支持: 如果上述方法无法解决问题,建议联系Unity中国的技术支持 https://unity.cn/contact-us获取进一步帮助,反馈此性能瓶颈以寻求更专业的解决方案。
希望这些建议能帮助您优化项目的性能。如有其他问题,欢迎继续咨询。
```
,6 个月前回答
评论 1
相关问答
热门文章
查看更多
问
AI
全新AI功能上线
1. 基于Unity微调:专为Unity优化,提供精准高效的支持。
2. 深度集成:内置于团结引擎,随时查阅与学习。
3. 多功能支持:全面解决技术问题与学习需求。

问
AI