コード例 #1
0
        protected override List <ContentCatalogBuildInfo> GetContentCatalogs(AddressablesDataBuilderInput builderInput, AddressableAssetsBuildContext aaContext)
        {
            // cleanup
            catalogSetups.Clear();

            // Prepare catalogs
            var defaultCatalog = new ContentCatalogBuildInfo(ResourceManagerRuntimeData.kCatalogAddress, builderInput.RuntimeCatalogFilename);

            foreach (ExternalCatalogSetup catalogContentGroup in externalCatalogs)
            {
                if (catalogContentGroup != null)
                {
                    catalogSetups.Add(new CatalogSetup(catalogContentGroup));
                }
            }

            // Assign assets to new catalogs based on included groups
            var profileSettings = aaContext.Settings.profileSettings;
            var profileId       = aaContext.Settings.activeProfileId;

            foreach (var loc in aaContext.locations)
            {
                CatalogSetup preferredCatalog = catalogSetups.FirstOrDefault(cs => cs.CatalogContentGroup.IsPartOfCatalog(loc, aaContext));
                if (preferredCatalog != null)
                {
                    if (loc.ResourceType == typeof(IAssetBundleResource))
                    {
                        string filePath        = Path.GetFullPath(loc.InternalId.Replace("{UnityEngine.AddressableAssets.Addressables.RuntimePath}", Addressables.BuildPath));
                        string runtimeLoadPath = preferredCatalog.CatalogContentGroup.RuntimeLoadPath + "/" + Path.GetFileName(filePath);
                        runtimeLoadPath = profileSettings.EvaluateString(profileId, runtimeLoadPath);

                        preferredCatalog.Files.Add(filePath);
                        preferredCatalog.BuildInfo.Locations.Add(new ContentCatalogDataEntry(typeof(IAssetBundleResource), runtimeLoadPath, loc.Provider, loc.Keys, loc.Dependencies, loc.Data));
                    }
                    else
                    {
                        preferredCatalog.BuildInfo.Locations.Add(loc);
                    }
                }
                else
                {
                    defaultCatalog.Locations.Add(loc);
                }
            }


            // Process dependencies
            foreach (CatalogSetup additionalCatalog in catalogSetups)
            {
                var dataEntries      = new Queue <ContentCatalogDataEntry>(additionalCatalog.BuildInfo.Locations);
                var processedEntries = new HashSet <ContentCatalogDataEntry>();
                while (dataEntries.Count > 0)
                {
                    ContentCatalogDataEntry dataEntry = dataEntries.Dequeue();
                    if (!processedEntries.Add(dataEntry) || (dataEntry.Dependencies == null) || (dataEntry.Dependencies.Count == 0))
                    {
                        continue;
                    }

                    foreach (var entryDependency in dataEntry.Dependencies)
                    {
                        // Search for the dependencies in the default catalog only.
                        var depLocation = defaultCatalog.Locations.Find(loc => loc.Keys[0] == entryDependency);
                        if (depLocation != null)
                        {
                            dataEntries.Enqueue(depLocation);

                            // If the dependency wasn't part of the catalog yet, add it.
                            if (!additionalCatalog.BuildInfo.Locations.Contains(depLocation))
                            {
                                additionalCatalog.BuildInfo.Locations.Add(depLocation);
                            }
                        }
                        else if (!additionalCatalog.BuildInfo.Locations.Exists(loc => loc.Keys[0] == entryDependency))
                        {
                            Debug.LogErrorFormat("Could not find location for dependency ID {0} in the default catalog.", entryDependency);
                        }
                    }
                }
            }

            // Gather catalogs
            var catalogs = new List <ContentCatalogBuildInfo>(catalogSetups.Count + 1);

            catalogs.Add(defaultCatalog);
            foreach (var setup in catalogSetups)
            {
                if (!setup.Empty)
                {
                    catalogs.Add(setup.BuildInfo);
                }
            }
            return(catalogs);
        }
コード例 #2
0
 public CatalogSetup(ExternalCatalogSetup buildCatalog)
 {
     this.CatalogContentGroup = buildCatalog;
     BuildInfo          = new ContentCatalogBuildInfo(buildCatalog.CatalogName, buildCatalog.CatalogName + ".json");
     BuildInfo.Register = false;
 }