private void RenderAssetBundlePack(AssetBundlePack assetBundlePack, out bool refreshFolder)
        {
            refreshFolder = false;

#if UNITY_2019_1_OR_NEWER
            var showGroupExpanded = !_collapsedAssetPacks.Contains(assetBundlePack.Name);
            var groupExpanded     =
                EditorGUILayout.BeginFoldoutHeaderGroup(showGroupExpanded, assetBundlePack.Name);
            if (groupExpanded)
            {
                _collapsedAssetPacks.Remove(assetBundlePack.Name);
                RenderAssetBundlePackContent(assetBundlePack, out refreshFolder);
            }
            else
            {
                _collapsedAssetPacks.Add(assetBundlePack.Name);
            }

            EditorGUILayout.EndFoldoutHeaderGroup();
#else
            // Old Unity versions don't support foldable headers. Use a simple label instead.
            EditorGUILayout.LabelField(assetBundlePack.Name, EditorStyles.boldLabel);
            RenderAssetBundlePackContent(assetBundlePack, out refreshFolder);
            EditorGUILayout.Separator();
#endif
        }
Esempio n. 2
0
        /// <summary>
        /// Refresh the list of all the <see cref="AssetBundlePacks"/> represented by the folders.
        /// </summary>
        public void RefreshAssetBundlePacks()
        {
            var assetBundlePacks = new Dictionary <string, AssetBundlePack>();

            foreach (var folder in Folders.Values)
            {
                var assetPacks = folder.ExtractAssetBundleVariant();

                foreach (var targetedAssetPackPair in assetPacks)
                {
                    var targetedAssetPackName = targetedAssetPackPair.Key;
                    var targetedAssetPack     = targetedAssetPackPair.Value;

                    AssetBundlePack assetBundlePack;
                    if (!assetBundlePacks.TryGetValue(targetedAssetPackName, out assetBundlePack))
                    {
                        var deliveryMode = GetMultiTargetingAssetPackDeliveryMode(targetedAssetPackName);
                        assetBundlePack = new AssetBundlePack(targetedAssetPackName, deliveryMode);
                        assetBundlePacks.Add(targetedAssetPackName, assetBundlePack);
                    }

                    if (!assetBundlePack.Add(folder.TextureCompressionFormat, targetedAssetPack))
                    {
                        assetBundlePack.Errors.Add(AssetPackError.DuplicateName);
                    }
                }
            }

            AssetBundlePacks = assetBundlePacks;
        }
Esempio n. 3
0
        /// <summary>
        /// Checks the specified bundlePack for build errors using validators registered in AssetPackValidatorRegistry.
        /// </summary>
        private void CheckBuildTypeErrors(AssetBundlePack bundlePack)
        {
            var buildErrors = new HashSet <AssetPackError>();

            foreach (var buildValidator in _packValidators)
            {
                buildErrors.UnionWith(buildValidator.CheckBuildErrors(bundlePack));
            }

            foreach (var error in buildErrors)
            {
                bundlePack.AddErrorToVariants(error);
            }
        }
        private static void RenderAssetBundlePackContent(AssetBundlePack assetBundlePack, out bool refreshFolder)
        {
            refreshFolder = false;

            EditorGUI.BeginChangeCheck();
            var newDeliveryMode =
                (AssetPackDeliveryMode)EditorGUILayout.EnumPopup("Delivery Mode", assetBundlePack.DeliveryMode,
                                                                 GUILayout.Width(300));

            if (EditorGUI.EndChangeCheck())
            {
                assetBundlePack.DeliveryMode = newDeliveryMode;

                // Don't use a short-circuit evaluation one-liner to ensure EndChangeCheck() is called above.
                refreshFolder = true;
            }

            // Display the direct dependencies of all the contained asset packs.
            var directDependencies = assetBundlePack.DirectDependencies;

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Dependencies");
            GUILayout.TextArea(
                directDependencies.Count > 0 ? string.Join(", ", directDependencies.ToArray()) : "None");
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.LabelField("AssetBundles");
            EditorGUI.indentLevel++;
            foreach (var variant in assetBundlePack.Variants)
            {
                RenderVariant(variant.Value, variant.Key);
            }

            EditorGUI.indentLevel--;

            EditorGUILayout.Space();
        }