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 }
/// <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; }
/// <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(); }