Example #1
0
 public void CacheABConfig(AssetBundleConfig config)
 {
     mResConfigItem.Clear();
     for (int i = 0; i < config.ABList.Count; i++)
     {
         ABBase abBase = config.ABList[i];
         //使用中间类进行保存
         ResItem item = new ResItem();
         item.mCrc              = abBase.Crc;
         item.mResPath          = abBase.Path;
         item.ABName            = abBase.ABName;
         item.DependAssetBundle = abBase.ABDependce;
         if (mResConfigItem.ContainsKey(item.mCrc))
         {
             AFLogger.e("重复的Crc:" + item.mCrc + " ab包名:" + item.ABName);
         }
         else
         {
             mResConfigItem.Add(item.mCrc, item);
         }
     }
 }
Example #2
0
        //写入数据
        //resPathDic : 路径对应的AB包
        static void WriteData(Dictionary <string, string> resPathDic, ConfigWritingMode configWritingMode, PackageABType packageABType)
        {
            AssetBundleConfig config = new AssetBundleConfig();

            config.ABList = new List <ABBase>();
            foreach (string path in resPathDic.Keys)
            {
                //进行赋值
                ABBase abBase = new ABBase();
                abBase.Path       = path;
                abBase.Crc        = Crc32.GetCrc32(path);
                abBase.ABName     = resPathDic[path];
                abBase.AssetName  = path.Remove(0, path.LastIndexOf("/", System.StringComparison.Ordinal) + 1);
                abBase.ABDependce = new List <string>();
                string[] resDependce = AssetDatabase.GetDependencies(path);
                for (int i = 0; i < resDependce.Length; i++)
                {
                    string tempPath = resDependce[i];
                    //排除自身与脚本文件
                    if (tempPath == path || path.EndsWith(".cs", System.StringComparison.Ordinal))
                    {
                        continue;
                    }

                    string abName = "";
                    //所依赖的资源是不是在其他AB包里面
                    if (resPathDic.TryGetValue(tempPath, out abName))
                    {
                        if (abName == resPathDic[path])
                        {
                            continue;
                        }
                        //判断是否已经添加到aBBase包里面
                        if (!abBase.ABDependce.Contains(abName))
                        {
                            abBase.ABDependce.Add(abName);
                        }
                    }
                }
                config.ABList.Add(abBase);
            }
            switch (configWritingMode)
            {
            case ConfigWritingMode.TXT:
                string txtPath = EditorAssetPath.ABInfoPath + buildTarget.ToString() + "/AssetbundleConfig.txt";
                if (File.Exists(txtPath))
                {
                    File.Delete(txtPath);
                }
                FileStream   fileStream1 = new FileStream(txtPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
                StreamWriter sw1         = new StreamWriter(fileStream1, System.Text.Encoding.UTF8);
                string       configJson  = SerializeHelper.ToJson(config);
                sw1.Write(configJson);
                sw1.Close();
                fileStream1.Close();
                break;

            case ConfigWritingMode.XML:
                CreateXML(config, packageABType);
                break;

            case ConfigWritingMode.Binary:
                foreach (ABBase abBase in config.ABList)
                {
                    abBase.Path = "";
                }
                string     BinaryPath = "Assets/AssetbundleConfig.bytes";
                FileStream fs         = new FileStream(PathTool.ProjectPath + BinaryPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
                fs.Seek(0, SeekOrigin.Begin);
                fs.SetLength(0);
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, config);
                fs.Close();
                CreateXML(config, packageABType);
                AssetDatabase.Refresh();
                SetABName("assetbundleconfig", BinaryPath);
                break;
            }
        }