Skip to content

Instantly share code, notes, and snippets.

@badforlabor
Created December 29, 2021 06:55
Show Gist options
  • Select an option

  • Save badforlabor/b28a14fad3992b31139ceba07eb52ab0 to your computer and use it in GitHub Desktop.

Select an option

Save badforlabor/b28a14fad3992b31139ceba07eb52ab0 to your computer and use it in GitHub Desktop.
检查assetbundle的重复依赖
if (GUILayout.Button("检查重复依赖"))
{
// 如果某个资源即在ab1中,又在ab2中,就是重复依赖了
var self = target as CheckDuplicatedDeps;
var abMapping = new Dictionary<string, HashSet<string>>();
System.Action<string, string> addMaping = (string a, string b) =>
{
if (!abMapping.ContainsKey(a))
{
abMapping.Add(a, new HashSet<string>());
}
abMapping[a].Add(b);
};
foreach (var abName in self.ObjList)
{
var abAllDeps = new HashSet<string>();
var filesInAb = AssetDatabase.GetAssetPathsFromAssetBundle(abName);
foreach (var fileName in filesInAb)
{
abAllDeps.AddRange(AssetDatabase.GetDependencies(fileName));
}
// var sb = new StringBuilder();
// sb.AppendLine($"[{abName}] dep-files:" );
foreach (var it in abAllDeps)
{
// 获取所在的assetbundle的名字。如果为空,说明是属于当前assetbundle。
var depAbName = AssetDatabase.GetImplicitAssetBundleName(it);
if (string.IsNullOrEmpty(depAbName))
{
depAbName = abName;
}
addMaping(it, depAbName);
// sb.AppendLine($"/t{it}, dep-ab={depAbName}");
}
// Debug.Log(sb);
}
{
var sb = new StringBuilder();
sb.AppendLine("冲突检查结果:");
System.Func<HashSet<string>, string> dumpSet = (v) =>
{
var sb2 = new StringBuilder();
foreach (var it in v)
{
if (sb2.Length > 0)
{
sb2.Append(", ");
}
sb2.Append(it);
}
return sb2.ToString();
};
foreach (var it in abMapping)
{
if (it.Value.Count > 1)
{
sb.AppendLine($"{it.Key}, conflict:[{dumpSet(it.Value)}]");
}
}
Debug.Log(sb);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment