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")来判断。