原理:bundle的依赖关系构建一个二维的矩阵图,如果对角线相互依赖(用1标记)则表示循环依赖。
using PlasticGui;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class DependProfiler
{[MenuItem("Tools/CircleBundleDepend")]static void Depend() {string path = Application.streamingAssetsPath +"/StreamingAssets";AssetBundleManifest manifest = BundleGroupEditor.ParseManifest(path);var bundles = manifest.GetAllAssetBundles();//bundle的依赖矩阵,如果对角值为1表示循环依赖string[,] bundleMatrix = new string[bundles.Length+1, bundles.Length+1];//添加表头for (int i = 1; i < bundleMatrix.GetLength(0); i++){var bundle = bundles[i-1];bundleMatrix[i, 0] = bundle;for(int j=1; j< bundleMatrix.GetLength(1); j++){bundleMatrix[i, j] = "0";}bundleMatrix[0, i] = bundle;}//判定依赖关系for (int i = 1; i < bundleMatrix.GetLength(0); i++){var bundle = bundleMatrix[i, 0];var depends = manifest.GetAllDependencies(bundle);if (depends.Length > 0){for (int j = 0; j < depends.Length; j++) {var depend = depends[j];for(int k=1; k< bundleMatrix.GetLength(1); k++){if (bundleMatrix[0,k].Equals(depend)){bundleMatrix[i, k] = "1";break;}}}}}for(int i = 0;i < bundleMatrix.GetLength(0); i++){for(int j = 0;j < bundleMatrix.GetLength(1); j++) {if (bundleMatrix[i,j]=="1" && bundleMatrix[j, i] == "1"){Debug.LogError(string.Format("{0} - {1}", bundleMatrix[i, 0], bundleMatrix[0, j]));}}}//判定是否循环依赖Debug.Log("---------结束--------");}
}
下载资源以后编辑器运行即可看到如下的依赖关系