[Unity]资源冗余排查工具

1、普通资源

把动态加载资源加入到列表中,逐个取出,用AssetDatabase.GetDependencies(assetPath);把资源依赖项列入一个大表,大表里面没有的资源就是冗余的。

2、动态加载资源

2.1读所有的配置表,把填了路径的资源的格子都提出来,尝试取资源,成功的将资源路径放入Useful表

                FileStream fs = new FileStream(csvFile, FileMode.Open, FileAccess.Read);
                byte[] buff = new byte[fs.Length];
                fs.Read(buff, 0, (int)fs.Length);
                string strText = Encoding.UTF8.GetString(buff);

2.2建一个配置表,列出游戏配置表里面哪个表哪一列用到了资源,是什么类型的资源,对于光效或者音效的ID,从光效音效表里根据ID取出对应的预制体,加入Useful表

2.3去UI配置文件,对应代码中的UI定义,取对应的预制体,加入Useful表

2.4 读lua UI定义表,把填了路径的资源的string提取出来,尝试取资源,成功的将资源路径放入Useful表

2.5 从地图配置表里面取出游戏要用的地图,放入Useful表,再挨个UnityEditor.SceneManagement.EditorSceneManager.OpenScene(sceneName); 把场景中bake的内容用GetComponent取出来,放入Useful表

把Useful的依赖资源放入大表。排查

2.6 有些引用只记录路路径,没法用GetDependencies取出来,例如预制体中添加脚本记录资源路径的方式。此时我将GameObject的Monobehaviour用GetComponent的方式取出来,用System.Reflection.FieldInfo[] fieldInfoArry = objType.GetFields();取所有方法,fielfInfo.FieldType.Name为引用路径类型的类名时,用System.Object fieldObj = fieldInfo.GetValue(obj);将对象取出来再强制转换成需要的类,然后取路径。此时还要注意这些路径可能会以数组或者List的形式保存,需要用fieldInfo.FieldType.Name == "xxx[]"和fieldInfo.FieldType.Name.StartsWith("List")来判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值