//设置Bundle是否多资源封包
        public bool SetAssetBundlePacked(string assetBundleName, string assetBundleVariant, bool assetBundlePacked)
        {
            if (!IsValidAssetBundleName(assetBundleName, assetBundleVariant))
            {
                return(false);
            }

            AssetBundleInfo assetBundle = GetAssetBundleInfo(assetBundleName, assetBundleVariant);

            if (assetBundle == null)
            {
                return(false);
            }

            assetBundle.SetPacked(assetBundlePacked);

            return(true);
        }
        //设置Bundle资源的加载模式
        public bool SetAssetBundleLoadType(string assetBundleName, string assetBundleVariant, AssetBundleLoadType assetBundleLoadType)
        {
            if (!IsValidAssetBundleName(assetBundleName, assetBundleVariant))
            {
                return(false);
            }

            AssetBundleInfo assetBundle = GetAssetBundleInfo(assetBundleName, assetBundleVariant);  //获取Bundle信息

            if (assetBundle == null)
            {
                return(false);
            }

            assetBundle.SetLoadType(assetBundleLoadType);   //修改加载模式

            return(true);
        }
        //移除Bundle信息
        public bool RemoveAssetBundle(string assetBundleName, string assetBundleVariant)
        {
            if (!IsValidAssetBundleName(assetBundleName, assetBundleVariant))
            {
                return(false);
            }

            AssetBundleInfo assetBundle = GetAssetBundleInfo(assetBundleName, assetBundleVariant);  //获取Bundle信息

            if (assetBundle == null)
            {
                return(false);
            }

            AssetInfo[] assets = assetBundle.AssetInfos;           //BundleInfo关联的资源信息
            assetBundle.Clear();                                   //清空BundleInfo中的数据
            m_AssetBundles.Remove(assetBundle.FullName.ToLower()); //从列表中移除
            foreach (AssetInfo asset in assets)
            {
                m_Assets.Remove(asset.Guid);    //收集器中移除这些资源信息
            }

            return(true);
        }
Пример #4
0
        //绘制资源文件夹菜单按钮
        private void DrawSourceAssetsMenu()
        {
            HashSet <SourceAsset> selectedSourceAssets = GetSelectedSourceAssets();

            EditorGUI.BeginDisabledGroup(m_SelectedAssetBundleInfo == null || selectedSourceAssets.Count <= 0);
            {
                if (GUILayout.Button(Utility.Text.Format("<< {0}", selectedSourceAssets.Count.ToString()), GUILayout.Width(80f)))
                {
                    foreach (SourceAsset sourceAsset in selectedSourceAssets)
                    {
                        AssignAsset(sourceAsset, m_SelectedAssetBundleInfo);    //分配资源
                    }

                    m_SelectedSourceAssets.Clear();
                    m_CachedSelectedSourceFolders.Clear();
                }
            }
            EditorGUI.EndDisabledGroup();
            EditorGUI.BeginDisabledGroup(selectedSourceAssets.Count <= 0);
            {
                if (GUILayout.Button(Utility.Text.Format("<<< {0}", selectedSourceAssets.Count.ToString()), GUILayout.Width(80f)))
                {
                    int index = 0;
                    int count = selectedSourceAssets.Count;
                    foreach (SourceAsset sourceAsset in selectedSourceAssets)
                    {
                        EditorUtility.DisplayProgressBar("Add AssetBundles", Utility.Text.Format("{0}/{1} processing...", (++index).ToString(), count.ToString()), (float)index / count);
                        int    dotIndex        = sourceAsset.FromRootPath.IndexOf('.');
                        string assetBundleName = dotIndex > 0 ? sourceAsset.FromRootPath.Substring(0, dotIndex) : sourceAsset.FromRootPath;
                        AddAssetBundleInfo(assetBundleName, null, false);   //每一个资源都添加一个Bundle
                        AssetBundleInfo assetBundle = m_Controller.GetAssetBundleInfo(assetBundleName, null);
                        if (assetBundle == null)
                        {
                            continue;
                        }

                        AssignAsset(sourceAsset, assetBundle);  //分配资源到指定Bundle中
                    }

                    EditorUtility.DisplayProgressBar("Add AssetBundles", "Complete processing...", 1f);
                    RefreshAssetBundleTree();              //刷新树状列表
                    EditorUtility.ClearProgressBar();
                    m_SelectedSourceAssets.Clear();        //清空选中资源
                    m_CachedSelectedSourceFolders.Clear(); //清空选中资源文件夹
                }
            }
            EditorGUI.EndDisabledGroup();
            bool hideAssignedSourceAssets = EditorGUILayout.ToggleLeft("Hide Assigned", m_HideAssignedSourceAssets, GUILayout.Width(100f));

            if (hideAssignedSourceAssets != m_HideAssignedSourceAssets)
            {
                m_HideAssignedSourceAssets = hideAssignedSourceAssets;
                m_CachedSelectedSourceFolders.Clear();
                m_CachedUnselectedSourceFolders.Clear();
                m_CachedAssignedSourceFolders.Clear();
                m_CachedUnassignedSourceFolders.Clear();
            }

            GUILayout.Label(string.Empty);
            //清理无效资源和资源包
            if (GUILayout.Button("Clean", GUILayout.Width(80f)))
            {
                EditorUtility.DisplayProgressBar("Clean", "Processing...", 0f);
                CleanAssetBundle();
                EditorUtility.ClearProgressBar();
            }

            //保存
            if (GUILayout.Button("Save", GUILayout.Width(80f)))
            {
                EditorUtility.DisplayProgressBar("Save", "Processing...", 0f);
                SaveConfiguration();
                EditorUtility.ClearProgressBar();
            }
        }
Пример #5
0
 private int DependencyAssetBundlesComparer(AssetBundleInfo a, AssetBundleInfo b)
 {
     return(a.FullName.CompareTo(b.FullName));
 }
        //检查Bundle是否一致
        private bool IsAvailableBundleName(string assetBundleName, string assetBundleVariant, AssetBundleInfo selfAssetBundle)
        {
            AssetBundleInfo findAssetBundle = GetAssetBundleInfo(assetBundleName, assetBundleVariant);

            if (findAssetBundle != null)
            {
                return(findAssetBundle == selfAssetBundle);
            }

            foreach (AssetBundleInfo assetBundle in m_AssetBundles.Values)
            {
                if (selfAssetBundle != null && assetBundle == selfAssetBundle)  //排除自身,因为自身的名称肯定等于自身的
                {
                    continue;
                }

                if (assetBundle.Name == assetBundleName)    //Bundle名一致
                {
                    if (assetBundle.Variant == null && assetBundleVariant != null)
                    {
                        return(false);
                    }

                    if (assetBundle.Variant != null && assetBundleVariant == null)
                    {
                        return(false);
                    }
                }

                if (assetBundle.Name.Length > assetBundleName.Length &&
                    assetBundle.Name.IndexOf(assetBundleName, StringComparison.CurrentCultureIgnoreCase) == 0 &&
                    assetBundle.Name[assetBundleName.Length] == '/')
                {
                    return(false);
                }

                if (assetBundleName.Length > assetBundle.Name.Length &&
                    assetBundleName.IndexOf(assetBundle.Name, StringComparison.CurrentCultureIgnoreCase) == 0 &&
                    assetBundleName[assetBundle.Name.Length] == '/')
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #7
0
 public static AssetInfo Create(string guid, AssetBundleInfo assetBundleInfo)
 {
     return(new AssetInfo(guid, assetBundleInfo));
 }
Пример #8
0
 public void SetAssetBundle(AssetBundleInfo assetBundleInfo)
 {
     AssetBundleInfo = assetBundleInfo;
 }
Пример #9
0
 private AssetInfo(string guid, AssetBundleInfo assetBundleInfo)
 {
     Guid            = guid;
     AssetBundleInfo = assetBundleInfo;
 }