예제 #1
0
        //生成引用关系文件,保存asset
        public static void CreateReferenceAsset()
        {
            referenceAsset          = ScriptableObject.CreateInstance <ReferenceAsset>();
            referenceAsset.infoList = new List <ReferenceInfo>();

            foreach (string assetPath in referenceCache.Keys)
            {
                ReferenceInfo info = new ReferenceInfo();
                info.path    = assetPath;
                info.guid    = AssetDatabase.AssetPathToGUID(info.path);
                info.parents = new List <string>();
                foreach (string referencerPath in referenceCache[assetPath])
                {
                    ReferenceInfo referencerInfo = new ReferenceInfo();
                    referencerInfo.path = referencerPath;
                    referencerInfo.guid = AssetDatabase.AssetPathToGUID(referencerInfo.path);
                    info.parents.Add(referencerPath);
                }
                referenceAsset.infoList.Add(info);
            }

            AssetDatabase.CreateAsset(referenceAsset, "Assets/ReferenceAsset.asset");
            //AssetDatabase.SaveAssets();
            //AssetDatabase.Refresh();
        }
예제 #2
0
        private static void SetAssetBundleNameReferenceMode(string path)
        {
            if (alreadyProcessedPath.Contains(path))
            {
                return;
            }

            alreadyProcessedPath.Add(path);

            ReferenceInfo info     = CFindReferencesInProject.getReferenceInfoByPath(path);
            AssetImporter importer = AssetImporter.GetAtPath(path);

            Assert.AreNotEqual(importer, null, "path not found:" + path);

            if (info.parents.Count == 0)
            { //没有被引用
                setAssetBundleNameFilter(importer, info.path);
            }
            else if (info.parents.Count == 1)
            { //只被一个对象引用了
                setAssetBundleNameFilter(importer, info.parents[0]);
            }
            else
            { //被多个对象引用了
                bool   allParentsSameAbName = true;
                string parentAbName         = null;
                for (int i = 0; i < info.parents.Count; i++)
                {
                    AssetImporter parentImporter = AssetImporter.GetAtPath(info.parents[i]);
                    if (parentAbName == null)
                    {
                        parentAbName = parentImporter.assetBundleName;
                    }
                    else if (parentAbName != parentImporter.assetBundleName)
                    {
                        allParentsSameAbName = false;
                        break;
                    }
                }
                if (allParentsSameAbName)
                { //多个对象属于同一个ab,设置为父对象的ab名字
                    importer.assetBundleName = parentAbName;
                }
                else
                { //多对象属于不同的ab,单独打包
                    setAssetBundleNameFilter(importer, info.path);
                }
            }

            //处理引用的其他资源
            SetAssetBundleNameReferenceModeDependencies(info.path);
        }
예제 #3
0
        private static string FindRoot(ReferenceInfo info)
        {
            if (allreadyFoundPaths.Contains(info.path))
            {
                return(null);
            }

            allreadyFoundPaths.Add(info.path);

            string path = info.path;

            while (info.parents != null && info.parents.Count > 0)
            {
                foreach (string parentPath in info.parents)
                {
                    ReferenceInfo parentInfo = getReferenceInfoByPath(parentPath);
                    return(FindRoot(parentInfo));
                }
            }
            return(path);
        }