示例#1
0
 private bool CompareVariantAssetLists(AssetDependencyData add, int[] a1, int[] a2)
 {
     if ((a1 == null) != (a2 == null))
     {
         return(false);
     }
     if (a1.Length != a2.Length)
     {
         return(false);
     }
     for (int ai = 0; ai < a1.Length; ai++)
     {
         var  lower = System.IO.Path.GetFileNameWithoutExtension(add.assets[a1[ai]].name).ToLower();
         bool match = false;
         for (int ai2 = 0; ai2 < a2.Length; ai2++)
         {
             if (lower == System.IO.Path.GetFileNameWithoutExtension(add.assets[a2[ai2]].name).ToLower())
             {
                 match = true;
                 break;
             }
         }
         if (!match)
         {
             return(false);
         }
     }
     return(true);
 }
示例#2
0
        Dictionary <string, List <Issue> > FindIssues()
        {
            List <int>          assetsWithDuplicates = new List <int>();
            AssetDependencyData add = new AssetDependencyData();
            var issues = new Dictionary <string, List <Issue> >();

            issues.Add(kDuplicateAssets, new List <Issue>());
            issues.Add(kMismatchedVariant, new List <Issue>());
            issues.Add(kMixedScene, new List <Issue>());

            for (int bi = 0; bi < add.bundles.Length; bi++)
            {
                string sceneAssetName = null;
                bool   hasScene       = false;
                bool   hasNonScene    = false;
                for (int ai = 0; ai < add.bundles[bi].assets.Length; ai++)
                {
                    var assetIndex = add.bundles[bi].assets[ai];
                    if (!hasScene || !hasNonScene)
                    {
                        if (AssetDatabase.GetMainAssetTypeAtPath(add.assets[assetIndex].name) == typeof(SceneAsset))
                        {
                            hasScene       = true;
                            sceneAssetName = add.assets[assetIndex].name;
                        }
                        else
                        {
                            hasNonScene = true;
                        }
                    }

                    foreach (var d in add.assets[assetIndex].dependencies)
                    {
                        if (add.assets[d].bundle < 0)
                        {
                            if (add.assets[d].bundles == null)
                            {
                                add.assets[d].bundles = new HashSet <int>();
                            }
                            add.assets[d].bundles.Add(bi);
                            if (add.assets[d].bundles.Count == 2)                             //once there are two, there is a duplicate, no need to add after that
                            {
                                assetsWithDuplicates.Add(d);
                            }
                        }
                    }
                }
                if (hasNonScene && hasScene)
                {
                    FindOrCreateIssue(issues, kMismatchedVariant, add.bundles[bi].name).subItems.Add(sceneAssetName);
                }
            }

            for (int bi = 0; bi < add.bundles.Length; bi++)
            {
                int dot = add.bundles[bi].name.LastIndexOf('.');
                if (dot > 0)
                {
                    var baseName = add.bundles[bi].name.Substring(0, dot);
                    for (int bi2 = bi + 1; bi2 < add.bundles.Length; bi2++)
                    {
                        if (bi2 == bi)
                        {
                            continue;
                        }
                        int dot2 = add.bundles[bi2].name.LastIndexOf('.');
                        if (dot2 <= 0)
                        {
                            continue;
                        }
                        if (!CompareVariantAssetLists(add, add.bundles[bi].assets, add.bundles[bi2].assets))
                        {
                            Issue issue = FindOrCreateIssue(issues, kMismatchedVariant, baseName);
                            if (!issue.subItems.Contains(add.bundles[bi].name))
                            {
                                issue.subItems.Add(add.bundles[bi].name);
                            }
                            if (!issue.subItems.Contains(add.bundles[bi2].name))
                            {
                                issue.subItems.Add(add.bundles[bi2].name);
                            }
                        }
                    }
                }
            }

            foreach (var ai in assetsWithDuplicates)
            {
                var issue = FindOrCreateIssue(issues, kDuplicateAssets, add.assets[ai].name);
                foreach (var bi in add.assets[ai].bundles)
                {
                    if (!issue.subItems.Contains(add.bundles[bi].name))
                    {
                        issue.subItems.Add(add.bundles[bi].name);
                    }
                }
            }

            return(issues);
        }