void ProcessTextureScaler(TextureVariationSchema schema, AddressableAssetGroup assetGroup, AddressableAssetsBuildContext aaContext) { m_SourceGroupList.Add(assetGroup); var entries = new List <AddressableAssetEntry>(assetGroup.entries); foreach (var entry in entries) { foreach (var pair in schema.Variations) { entry.SetLabel(pair.label, true); } entry.SetLabel(schema.BaselineLabel, true); } }
string ProcessTextureScaler( TextureVariationSchema schema, AddressableAssetGroup assetGroup, AddressableAssetsBuildContext aaContext) { m_SourceGroupList.Add(assetGroup); var entries = new List <AddressableAssetEntry>(assetGroup.entries); foreach (var entry in entries) { var entryPath = entry.AssetPath; if (AssetDatabase.GetMainAssetTypeAtPath(entryPath) == typeof(Texture2D)) { var fileName = Path.GetFileNameWithoutExtension(entryPath); if (string.IsNullOrEmpty(fileName)) { return("Failed to get file name for: " + entryPath); } if (!Directory.Exists("Assets/GeneratedTextures")) { Directory.CreateDirectory("Assets/GeneratedTextures"); } if (!Directory.Exists("Assets/GeneratedTextures/Texture")) { Directory.CreateDirectory("Assets/GeneratedTextures/Texture"); } var sourceTex = AssetDatabase.LoadAssetAtPath <Texture2D>(entryPath); var aiSource = AssetImporter.GetAtPath(entryPath) as TextureImporter; int maxDim = Math.Max(sourceTex.width, sourceTex.height); foreach (var pair in schema.Variations) { var newGroup = FindOrCopyGroup(assetGroup.Name + "_" + pair.label, assetGroup, aaContext.settings, schema); var newFile = entryPath.Replace(fileName, fileName + "_variationCopy_" + pair.label); newFile = newFile.Replace("Assets/", "Assets/GeneratedTextures/"); AssetDatabase.CopyAsset(entryPath, newFile); var aiDest = AssetImporter.GetAtPath(newFile) as TextureImporter; if (aiDest == null) { var message = "failed to get TextureImporter on new texture asset: " + newFile; return(message); } float scaleFactor = pair.textureScale; float desiredLimiter = maxDim * scaleFactor; aiDest.maxTextureSize = NearestMaxTextureSize(desiredLimiter); aiDest.isReadable = true; aiDest.SaveAndReimport(); var newEntry = aaContext.settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(newFile), newGroup); newEntry.address = entry.address; newEntry.SetLabel(pair.label, true); } entry.SetLabel(schema.BaselineLabel, true); } } return(string.Empty); }
string ProcessTextureScaler(TextureVariationSchema schema, AddressableAssetGroup assetGroup, AddressableAssetsBuildContext aaContext) { m_SourceGroupList.Add(assetGroup); var entries = new List <AddressableAssetEntry>(assetGroup.entries);//获取对应Group下面的所有条目 foreach (var entry in entries) { var entryPath = entry.AssetPath; if (AssetDatabase.GetMainAssetTypeAtPath(entryPath) == typeof(Texture2D)) { var fileName = Path.GetFileNameWithoutExtension(entryPath); if (string.IsNullOrEmpty(fileName)) { return("Failed to get file name for: " + entryPath); } if (!Directory.Exists("Assets/GeneratedTextures")) { Directory.CreateDirectory("Assets/GeneratedTextures"); } if (!Directory.Exists("Assets/GeneratedTextures/Texture")) { Directory.CreateDirectory("Assets/GeneratedTextures/Texture"); } var sourceTex = AssetDatabase.LoadAssetAtPath <Texture2D>(entryPath); var aiSource = AssetImporter.GetAtPath(entryPath) as TextureImporter; int maxDim = Math.Max(sourceTex.width, sourceTex.height); foreach (var pair in schema.Variations)//根据对应的策略开始处理 (现在是根据这一张图片分别设置不同的标签) { var newGroup = FindOrCopyGroup(assetGroup.Name + "_" + pair.label, assetGroup, aaContext.settings, schema); var newFile = entryPath.Replace(fileName, fileName + "_variationCopy_" + pair.label); newFile = newFile.Replace("Assets/", "Assets/GeneratedTextures/"); //生成新的对应条目原始文件fullName AssetDatabase.CopyAsset(entryPath, newFile); //创建对应新的文件 var aiDest = AssetImporter.GetAtPath(newFile) as TextureImporter; //转换成texture if (aiDest == null) { var message = "failed to get TextureImporter on new texture asset: " + newFile; return(message); } float scaleFactor = pair.textureScale; float desiredLimiter = maxDim * scaleFactor; aiDest.maxTextureSize = NearestMaxTextureSize(desiredLimiter); //生成里18*32*64*128*256等最近的尺寸 aiDest.isReadable = true; //可以通过脚本获取纹理信息 aiDest.SaveAndReimport(); //保存并导入(如果资产导入器是脏的,则保存资产导入器设置。) var newEntry = aaContext.settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(newFile), newGroup); newEntry.address = entry.address; //对应条目的名称或者地址 newEntry.SetLabel(pair.label, true); //设置为true将添加标签,设置为false将删除标签。 } entry.SetLabel(schema.BaselineLabel, true); } } return(string.Empty); }
AddressableAssetGroup FindOrCopyGroup(string groupName, AddressableAssetGroup baseGroup, AddressableAssetSettings settings, TextureVariationSchema schema) { AddressableAssetGroup result; if (!m_GeneratedGroups.TryGetValue(groupName, out result)) { List <AddressableAssetGroupSchema> schemas = new List <AddressableAssetGroupSchema>(baseGroup.Schemas); schemas.Remove(schema); result = settings.CreateGroup(groupName, false, false, false, schemas); m_GeneratedGroups.Add(groupName, result); } return(result); }
/// <summary> /// /// </summary> /// <param name="groupName">assetGroup.Name + "_" + pair.label</param> /// <param name="baseGroup"></param> /// <param name="settings"></param> /// <param name="schema"></param> /// <returns></returns> AddressableAssetGroup FindOrCopyGroup(string groupName, AddressableAssetGroup baseGroup, AddressableAssetSettings settings, TextureVariationSchema schema) { AddressableAssetGroup result; if (!m_GeneratedGroups.TryGetValue(groupName, out result)) //没有对应的Group就创建 { List <AddressableAssetGroupSchema> schemas = new List <AddressableAssetGroupSchema>(baseGroup.Schemas); //这个group的所有Schemas schemas.Remove(schema); //移除自定义这个schema result = settings.CreateGroup(groupName, false, false, false, schemas); //创建一个新的Group并设置除了自定义schema以为的所有schema m_GeneratedGroups.Add(groupName, result); //添加这个临时生成的Group } return(result); }