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);
        }
    }
예제 #2
0
    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);
    }
예제 #3
0
    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);
    }
예제 #4
0
    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);
    }
예제 #5
0
    /// <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);
    }