private void GenerateAtlasSpritePrefab(string atlasDir) { Dictionary <string, string> md5Map = new Dictionary <string, string>(); FileInfo[] resFiles = BMEditUtility.GetAllFiles(atlasDir, "*.*"); for (int j = 0; j < resFiles.Length; j++) { FileInfo info = resFiles[j]; if (info.FullName.EndsWith(".meta", StringComparison.Ordinal) || info.FullName.EndsWith(".txt", StringComparison.Ordinal)) { continue; } string dirName = Path.GetFileName(info.DirectoryName); string outPath = $"{_settings.atlasSpritePrefabDir}{dirName}/"; string spriteFileName = Path.GetFileName(info.FullName); string spriteName = Path.GetFileNameWithoutExtension(info.FullName); string texPath = BMEditUtility.Absolute2Relativity(info.FullName); string md5 = HashHelper.ComputeMD5(texPath); md5Map.Add(texPath, md5); TextureImporter ti = AssetImporter.GetAtPath(texPath) as TextureImporter; if (ti) { if (!Directory.Exists(outPath)) { Directory.CreateDirectory(outPath); } GameObject spritePrefab = new GameObject(spriteName); SpriteRenderer spriteRenderer = spritePrefab.AddComponent <SpriteRenderer>(); Vector4 border = ti.spriteBorder; ti.spritePackingTag = "Atlas_" + dirName; ti.SaveAndReimport(); spriteRenderer.sprite = AssetDatabase.LoadAssetAtPath <Sprite>(texPath);; //spritePrefab.hideFlags = HideFlags.HideInHierarchy; var savePath = outPath + spriteName + ".prefab"; if (File.Exists(savePath)) { File.Delete(savePath); } PrefabUtility.SaveAsPrefabAsset(spritePrefab, savePath); //var texture2D = AssetDatabase.LoadAssetAtPath<Texture2D>(rPath); //var sprite = Sprite.Create(texture2D, new Rect(0,0,texture2D.width,texture2D.height), new Vector2(0.5f,0.5f), 400, 0,SpriteMeshType.FullRect,border); DestroyImmediate(spritePrefab); } } //Save md5 BMEditUtility.SaveDictionary(Path.Combine(atlasDir, "manifest.txt"), md5Map); }
private bool CheckModify(string atlasDir) { Dictionary <string, string> md5Map = BMEditUtility.GetDictionaryFromFile(Path.Combine(atlasDir, "manifest.txt")); bool modify = false; if (md5Map == null) { modify = true; } else { FileInfo[] resFiles = BMEditUtility.GetAllFiles(atlasDir, "*.*"); for (int i = 0; i < resFiles.Length; i++) { FileInfo info = resFiles[i]; if (info.FullName.EndsWith(".meta", StringComparison.Ordinal) || info.FullName.EndsWith(".txt", StringComparison.Ordinal)) { continue; } string spriteFileName = Path.GetFileName(info.FullName); string oldmd5; string md5 = HashHelper.ComputeMD5(Path.Combine(atlasDir, spriteFileName)); if (md5Map.TryGetValue(spriteFileName, out oldmd5)) { if (md5 != oldmd5) { modify = true; break; } } else { modify = true; break; } } } return(modify); }
static void CalcAssetBundleInfos() { for (int i = 0; i < buildInfoList.Count; i++) { BuildInfo buildInfo = buildInfoList[i]; buildInfo.subBuildInfoMap = new Dictionary <string, SubBuildInfo>(); for (int j = 0; j < buildInfo.assetPaths.Count; j++) { string path = buildInfo.assetPaths[j]; string dirName = Path.GetDirectoryName(path); string name; int version = 0; switch (buildInfo.buildType) { case BuildType.Pack: name = BMUtility.Path2Name(dirName); break; case BuildType.Scene: name = BMUtility.Path2Name(dirName + "/" + Path.GetFileNameWithoutExtension(path)); if (scenesVersionDict.TryGetValue(path, out string verStr)) { version = int.Parse(verStr); } else { //新场景 version = 1; scenesVersionDict.Add(path, version.ToString()); BMEditUtility.SaveDictionary(settings.scenesVersionFile, scenesVersionDict); } break; case BuildType.Shader: name = BMUtility.Path2Name(buildInfo.buildName); break; case BuildType.Lua: name = BMUtility.Path2Name(buildInfo.buildName); break; default: // BuildType.Single: name = BMUtility.Path2Name(dirName + "/" + Path.GetFileName(path)); break; } string md5 = BMUtility.EncryptWithMD5(name + "." + settings.Suffix_Bundle); SubBuildInfo subInfo = null; if (!buildInfo.subBuildInfoMap.TryGetValue(md5, out subInfo)) { string abName = name; if (settings.useHashName) { abName = md5; } subInfo = new SubBuildInfo() { bundleName = name, buildMd5 = md5, buildType = buildInfo.buildType, version = version, assetBundleBuild = new AssetBundleBuild() { assetBundleName = abName, assetBundleVariant = settings.Suffix_Bundle, }, assetPaths = new List <string>(), assetHashs = new List <string>(), dependenceMap = new Dictionary <string, string[]>(), dependenceHashMap = new Dictionary <string, string[]>(), }; buildInfo.subBuildInfoMap.Add(md5, subInfo); } //添加依赖关系 AddDependence(path, subInfo.dependenceMap); string hash = HashHelper.ComputeMD5(path); subInfo.assetPaths.Add(path.ToLower()); subInfo.assetHashs.Add(hash); AssetBundleBuild abb = subInfo.assetBundleBuild; abb.assetNames = subInfo.assetPaths.ToArray(); //abb.addressableNames = subInfo.assetPaths.ToArray(); subInfo.assetBundleBuild = abb; EditorUtility.DisplayProgressBar("Calc Asset Bundle Build Infos...", path, (float)(j + 1.0f) / (float)buildInfo.assetPaths.Count); } } EditorUtility.ClearProgressBar(); Logger.Log("Calc Asset Bundle Infos Over."); }