Example #1
0
        /// <summary>
        /// Builds the asset bundles update A.
        /// </summary>
        public static void buildAssetBundlesUpdateAB()
        {
            EditorUtility.DisplayProgressBar("Generate FileList", "loading bundle manifest", 1 / 2);
            AssetDatabase.Refresh();
            string        readPath = EditorUtils.GetFileStreamingOutAssetsPath(); // 读取Streaming目录
            var           u3dList  = EditorUtils.getAllChildFiles(readPath, @"\.meta$|\.manifest$|\.DS_Store$|\.u$", null, false);
            List <string> assets   = new List <string> ();

            foreach (var s in u3dList)
            {
                string ab = EditorUtils.GetAssetPath(s);  //s.Replace(readPath, "").Replace("/", "").Replace("\\", "");
                assets.Add(ab);
            }

            readPath = new System.IO.DirectoryInfo(EditorUtils.GetLuaBytesResourcesPath()).FullName;   // 读取lua 目录
            u3dList  = EditorUtils.getAllChildFiles(readPath, @"\.bytes$", null);
            foreach (var s in u3dList)
            {
                string ab = EditorUtils.GetAssetPath(s);  //s.Replace(readPath, "").Replace("/", "").Replace("\\", "");
                assets.Add(ab);
            }

            EditorUtility.ClearProgressBar();
            CUtils.DebugCastTime("Time Generate FileList End");
            Debug.Log("all assetbundle count = " + assets.Count);
            BuildScript.GenerateAssetBundlesUpdateFile(assets.ToArray());
            CUtils.DebugCastTime("Time GenerateAssetBundlesUpdateFile End");
        }
Example #2
0
        /// <summary>
        /// 设置变体
        /// </summary>
        public static void SetAssetBundlesVariantsAndName()
        {
            Object[] selection = Selection.objects;
            string   apath     = null;

            foreach (Object s in selection)
            {
                apath = AssetDatabase.GetAssetPath(s);
                if (Directory.Exists(apath))
                {
                    var    myFolderName = s.name.ToLower();
                    var    allFiles     = EditorUtils.getAllChildFiles(apath, ".prefab$");
                    string title        = "set folder " + myFolderName + " variants";
                    string info         = "";
                    Debug.LogWarningFormat("the folder({0})'s all prefab's variant will set to {1} ", apath, myFolderName);
                    EditorUtility.DisplayProgressBar(title, info, 0);
                    float i   = 0;
                    float all = allFiles.Count;
                    foreach (var abPath in allFiles)
                    {
                        info = abPath;
                        var prefab = AssetDatabase.LoadAssetAtPath(abPath, typeof(Object));
                        if (prefab)
                        {
                            SetAssetBundleName(prefab, true, true, myFolderName);
                        }
                        else
                        {
                            Debug.LogWarningFormat("{0} is not exists", abPath);
                        }
                        i = i + 1;
                        EditorUtility.DisplayProgressBar(title, info, i / all);
                    }
                    EditorUtility.ClearProgressBar();
                }
                else
                {
                    SetAssetBundleName(s, true, true);
                }
            }
        }
Example #3
0
        public static void SetFolderPackingTag()
        {
            var    selection = Selection.objects;
            string path      = string.Empty;

            StringBuilder sb = new StringBuilder();

            foreach (Object s in selection)
            {
                if (s is DefaultAsset && (path = AssetDatabase.GetAssetPath(s)) != null && Directory.Exists(path))
                {
                    var import  = AssetImporter.GetAtPath(path);
                    var ragName = s.name.ToLower() + "_atlas";
                    sb.Append("set folder spritePackingTag = ");
                    sb.Append(ragName);
                    sb.Append("\r\n");

                    var allchildren = EditorUtils.getAllChildFiles(path, @"\.meta$|\.manifest$|\.DS_Store$|\.u$", null, false);
                    int count       = 0;
                    foreach (var f in allchildren)
                    {
                        count++;
                        TextureImporter ti = AssetImporter.GetAtPath(f) as TextureImporter;
                        EditorUtility.DisplayProgressBar("Processing...", "替换中... (" + count + " / " + allchildren.Count + ")", (float)count / (float)allchildren.Count);
                        if (ti)
                        {
                            ti.spritePackingTag = ragName;
                            sb.AppendLine(ti.name);
                            ti.assetBundleName = ragName + Common.CHECK_ASSETBUNDLE_SUFFIX;
                            ti.SaveAndReimport();
                        }
                    }
                    EditorUtility.ClearProgressBar();
                }
            }
            sb.AppendLine("\r\ncompleted");
            Debug.Log(sb.ToString());
        }
Example #4
0
        /// <summary>
        /// 1 读取首包,找出忽略文件
        /// </summary>
        /// <param name="ignoreFiles">Ignore files.</param>
        public static bool ReadFirst(string[] allBundles, out FileManifest firstCrcDict, out FileManifest streamingManifest, FileManifest extensionFileManifest)
        {
            // string title = "read first crc file list";
            bool firstExists = false;

            firstCrcDict = null;
            HugulaExtensionFolderEditor.instance = null;

            string readPath      = Path.Combine(FirstOutReleasePath, CUtils.platform);
            string firstFileName = CUtils.InsertAssetBundleName(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), "_v" + CodeVersion.CODE_VERSION.ToString());

            readPath = Path.Combine(readPath, firstFileName);
            Debug.Log(readPath);

            //check tmp directory
            if (!Directory.Exists("Assets/Tmp"))
            {
                Directory.CreateDirectory("Assets/Tmp");
            }

            // extensionFileManifest.Clear();
            //读取首包
            WWW abload = new WWW("file://" + readPath);

            if (string.IsNullOrEmpty(abload.error) && abload.assetBundle != null)
            {
                var      ab     = abload.assetBundle;
                Object[] assets = ab.LoadAllAssets();
                foreach (Object o in assets)
                {
                    if (o is FileManifest)
                    {
                        firstCrcDict = o as FileManifest;
                        firstExists  = true;
                        firstCrcDict.WriteToFile("Assets/Tmp/firstPackageManifest.txt");
                        Debug.Log(firstCrcDict.Count);
                    }
                }
                ab.Unload(false);
            }
            else
            {
                Debug.LogWarning(abload.error + "no frist packeage in " + readPath);
            }
            abload.Dispose();

            //读取本地AB包AssetBundleManifest
            var         fileListName = Common.CRC32_FILELIST_NAME;
            var         url          = CUtils.PathCombine(CUtils.GetRealStreamingAssetsPath(), CUtils.GetRightFileName(fileListName));
            AssetBundle assetbundle  = AssetBundle.LoadFromFile(url);
            var         assets1      = assetbundle.LoadAllAssets <FileManifest>();
            uint        len          = 0;
            var         crc32        = CrcCheck.GetLocalFileCrc(url, out len);

            var streamingManifest1 = assets1[0];

            assetbundle.Unload(false);
            // streamingManifest = streamingManifest1;
            streamingManifest1.crc32 = crc32;
            Debug.Log(streamingManifest1.appNumVersion);
            Debug.Log(streamingManifest1.crc32);

            //读取assetbundle的crc和size
            ReadAssetToABInfos(allBundles, streamingManifest1);

            if (!HugulaSetting.instance.spliteExtensionFolder)//如果不分离文件
            {
                streamingManifest = streamingManifest1;
                streamingManifest.hasFirstLoad = false;
                streamingManifest.WriteToFile("Assets/Tmp/StreamingAssetsManifest.txt");
                extensionFileManifest.WriteToFile("Assets/Tmp/ExtensionFileManifest.txt");
                return(firstExists);
            }

            //读取忽略扩展包
            System.Action <string, int> AddExtensionFileManifest = (string ab, int priority1) =>
            {
                var abinfo = streamingManifest1.GetABInfo(ab);
                if (abinfo == null)
                {
                    Debug.LogWarningFormat("the file {0} is not exists. please check ExtenionFolder.txt", ab);
                    //  abinfo = new ABInfo(ab, 0, 0, priority1);
                    //  streamingManifest1.Add(abinfo);
                    return;
                }

                abinfo.priority = priority1;
                extensionFileManifest.Add(abinfo);
            };


            string firstStreamingPath = CUtils.realStreamingAssetsPath;
            var    needLoadFirst      = false;

            var onlyInclusionFiles      = HugulaExtensionFolderEditor.instance.OnlyInclusionFiles;//只包涵
            var onlyInclusionRightFiles = new List <string>();

            foreach (var f in onlyInclusionFiles)
            {
                onlyInclusionRightFiles.Add(CUtils.GetRightFileName(f));
            }

            var firstPriority       = FileManifestOptions.FirstLoadPriority;
            var firstLoadFiles      = HugulaExtensionFolderEditor.instance.FirstLoadFiles;//读取首包资源
            var firstLoadRightFiles = new List <string>();

            foreach (var f in firstLoadFiles)
            {
                firstLoadRightFiles.Add(CUtils.GetRightFileName(f));
            }


            var manualPriority      = FileManifestOptions.ManualPriority;
            var extensionFiles      = HugulaExtensionFolderEditor.instance.ExtensionFiles;//读取扩展文件资源
            var extensionRightFiles = new List <string>();

            foreach (var f in extensionFiles)
            {
                extensionRightFiles.Add(CUtils.GetRightFileName(f));
            }

            var autoPriority = FileManifestOptions.AutoHotPriority;
            Dictionary <int, int> priorityDic = new Dictionary <int, int>();

            priorityDic[firstPriority]  = firstPriority;
            priorityDic[manualPriority] = manualPriority;
            priorityDic[autoPriority]   = autoPriority;
            priorityDic[FileManifestOptions.StreamingAssetsPriority] = FileManifestOptions.StreamingAssetsPriority;

            //streamingAssets目录下的文件夹默认为手动加载
            DirectoryInfo dinfo = new DirectoryInfo(firstStreamingPath);
            var           dircs = dinfo.GetDirectories();

            foreach (var dir in dircs)
            {
                var u3dList = EditorUtils.getAllChildFiles(dir.FullName, @"\.meta$|\.manifest$|\.DS_Store$", null, false);
                foreach (var s in u3dList)
                {
                    string ab = CUtils.GetAssetBundleName(s);
                    ab = ab.Replace("\\", "/");
                    extensionRightFiles.Add(ab);
                }
            }

            var allAbInfos = streamingManifest1.allAbInfo;

            bool shouldInclude       = false;
            bool elseShouldInAutoHot = onlyInclusionRightFiles.Count > 0 && false;
            bool elseShouldInFirst   = onlyInclusionRightFiles.Count > 0;

            foreach (var abInfo in allAbInfos)
            {
                shouldInclude = onlyInclusionRightFiles.Contains(abInfo.abName);

                if (!shouldInclude && firstLoadRightFiles.Contains(abInfo.abName))//首次启动加载包
                {
                    priorityDic[firstPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[firstPriority]);
                    needLoadFirst = true;
                }
                else if (!shouldInclude && extensionRightFiles.Contains(abInfo.abName)) //手动加载
                {
                    priorityDic[manualPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[manualPriority]);
                }
                else if (!shouldInclude && elseShouldInAutoHot) //放入自动热更新包
                {
                    priorityDic[autoPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[autoPriority]);
                }
                else if (!shouldInclude && elseShouldInFirst)
                {
                    priorityDic[firstPriority]++;
                    AddExtensionFileManifest(abInfo.abName, priorityDic[firstPriority]);
                    needLoadFirst = true;
                }
            }

            if (!HugulaSetting.instance.spliteExtensionFolder)
            {
                needLoadFirst = false;
            }

            streamingManifest = streamingManifest1;
            streamingManifest.hasFirstLoad = needLoadFirst;
            streamingManifest.WriteToFile("Assets/Tmp/StreamingAssetsManifest.txt");
            extensionFileManifest.WriteToFile("Assets/Tmp/ExtensionFileManifest.txt");
            EditorUtility.ClearProgressBar();
            return(firstExists);
        }
Example #5
0
        public static void CreateAtlasAsset()
        {
            var    selection = Selection.objects;
            string path      = string.Empty;

            StringBuilder sb = new StringBuilder();

            foreach (Object s in selection)
            {
                if (s is DefaultAsset && (path = AssetDatabase.GetAssetPath(s)) != null && Directory.Exists(path))
                {
                    // var import = AssetImporter.GetAtPath(path);
                    var    ragName    = s.name.ToLower() + "_atlas.asset";
                    string atlas_path = Path.Combine(path, ragName);

                    sb.Append("Crate atlas Asset :");
                    sb.Append(ragName);
                    sb.Append("\r\n");

                    var           allchildren = EditorUtils.getAllChildFiles(path, @"\.meta$|\.manifest$|\.DS_Store$|\.u$", null, false);
                    int           count       = 0;
                    List <int>    names       = new List <int>();
                    List <Sprite> allSprites  = new List <Sprite>();
                    foreach (var f in allchildren)
                    {
                        count++;
                        TextureImporter ti = AssetImporter.GetAtPath(f) as TextureImporter;
                        if (ti != null)
                        {
                            Object[] objs = AssetDatabase.LoadAllAssetRepresentationsAtPath(f);
                            foreach (var item in objs)
                            {
                                if (item is Sprite)
                                {
                                    names.Add(LuaHelper.StringToHash(item.name));
                                    allSprites.Add((Sprite)item);
                                }
                            }
                            EditorUtility.DisplayProgressBar("Processing...", "生成中... (" + count + " / " + allchildren.Count + ")", count / allchildren.Count);
                        }
                    }
                    EditorUtility.ClearProgressBar();
                    //生成或者替换资源
                    AtlasAsset atlas = AssetDatabase.LoadAssetAtPath <AtlasAsset>(atlas_path);
                    if (atlas == null)
                    {
                        atlas = AtlasAsset.CreateInstance <AtlasAsset>();
                        AssetDatabase.CreateAsset(atlas, atlas_path);
                    }

                    atlas.names   = names;
                    atlas.sprites = allSprites;
                    EditorUtility.SetDirty(atlas);
                    var import = AssetImporter.GetAtPath(atlas_path);
                    import.assetBundleName = Path.GetFileNameWithoutExtension(ragName) + Common.CHECK_ASSETBUNDLE_SUFFIX;
                    sb.AppendFormat("build {0} success  count = {1} ", ragName, names.Count);
                    AssetDatabase.SaveAssets();
                }
            }

            sb.AppendLine("\r\nall completed");
            Debug.Log(sb.ToString());
        }