using System.Collections.Generic; using System.Linq; using System.Text; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings; using UnityEngine; public class AssetCheck { [MenuItem("Tools/Check Asset")] static void CheckAsset() { GetAllGroups(); } static void GetAllGroups() { var settings = AddressableAssetSettingsDefaultObject.Settings; var allGroups = settings.groups.Where(x => !x.name.StartsWith("Localization")).ToList(); var packedEntries = new List(); foreach (var g in allGroups) { foreach (var e in g.entries) { if (e.labels.Contains("pack")) { packedEntries.Add(e); } } } var message = "\r\n"; foreach (var e in packedEntries) { var dependencies = AssetDatabase.GetDependencies(e.AssetPath, true); var sb = new StringBuilder(); foreach (var d in dependencies) { var de = settings.FindAssetEntry(AssetDatabase.AssetPathToGUID(d)); if (de != null && !de.labels.Contains("pack")) { if (sb.Length == 0) { sb.AppendLine(e.address); sb.AppendLine($"---- {de.parentGroup.Name} {de.address}"); } else { sb.AppendLine($"---- {de.parentGroup.Name} {de.address}"); } } } message += sb.ToString(); } Debug.Log(message); } [MenuItem("Assets/Check Asset")] static void MenuAssetsFish() { if (Selection.activeObject == null) { Debug.Log("Assets choose null"); } else { Debug.Log("Assets name = " + Selection.activeObject.name); GameObject prefab = Selection.activeObject as GameObject; string path = AssetDatabase.GetAssetPath(Selection.activeObject); var settings = AddressableAssetSettingsDefaultObject.Settings; var entry = settings.FindAssetEntry(AssetDatabase.AssetPathToGUID(path)); if (entry != null) { AddressableAssetGroup addressableAssetGroup = entry.parentGroup; Debug.Log("This asset is addressable, group name = " + addressableAssetGroup.Name); var addressableAssetEntries = addressableAssetGroup.entries.Where(x => x.labels.Contains(entry.labels.FirstOrDefault())).ToList(); var message = "\r\n"; foreach (var e in addressableAssetEntries) { var dependencies = AssetDatabase.GetDependencies(e.AssetPath, true); var sb = new StringBuilder(); var sb1 = new StringBuilder(); foreach (var d in dependencies) { var de = settings.FindAssetEntry(AssetDatabase.AssetPathToGUID(d)); if (de != null && !de.labels.Contains("pack") && de.parentGroup.Name != "IconSingle" && !de.labels.Contains(entry.labels.FirstOrDefault())) { if (de.parentGroup == addressableAssetGroup) { if (sb1.Length == 0) { sb1.AppendLine("↓同一Group 不同主题或当前活动公用"); sb1.AppendLine(e.address); sb1.AppendLine($"---- {de.parentGroup.Name} {de.AssetPath}"); } else { sb1.AppendLine($"---- {de.parentGroup.Name} {de.AssetPath}"); } } else { if (sb.Length == 0) { sb.AppendLine("↓不同 Group 引用其他活动资源"); sb.AppendLine(e.address); sb.AppendLine($"---- {de.parentGroup.Name} {de.AssetPath}"); } else { sb.AppendLine($"---- {de.parentGroup.Name} {de.AssetPath}"); } } } } message += sb1.ToString() + sb.ToString(); } Debug.Log(message); } else { Debug.Log("This asset is not addressable"); } } } }