首页 > 其他分享 >导出图集

导出图集

时间:2022-11-08 00:45:04浏览次数:80  
标签:RenderTexture srcTex 导出 spriteTexImporter 图集 var rect metaData

# 这个图框了3张小图,淡蓝色进度条,钻石图标,道具背景框,其中道具背景框还设置了border。

提取出的图片

 

#if UNITY_EDITOR

using UnityEngine;
using UnityEditor;
using System.IO;


public static class SpriteTool
{

    [MenuItem("Assets/提取小图")]
    static void ExtractSlice()
    {
        var srcTex = Selection.activeObject as Texture2D;
        if (null == srcTex) return;

        var srcTexPath = AssetDatabase.GetAssetPath(srcTex);
        var srcTexImporter = AssetImporter.GetAtPath(srcTexPath) as TextureImporter;
        if (SpriteImportMode.Multiple != srcTexImporter.spriteImportMode)
        {
            Debug.Log($"Sprite Mode不是Multiple: {srcTexPath}");
            return;
        }

        var srcTexDirPath = Path.GetDirectoryName(srcTexPath);
        //Debug.Log($"dirPath: {srcTexDirPath}");

        var outDirPath = $"{srcTexDirPath}/{srcTex.name}";
        if (!Directory.Exists(outDirPath))
            AssetDatabase.CreateFolder(srcTexDirPath, srcTex.name);

        var srcTempRT = RenderTexture.GetTemporary(srcTex.width, srcTex.height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear);
        Graphics.Blit(srcTex, srcTempRT);
        var oldActiveRT = RenderTexture.active;
        RenderTexture.active = srcTempRT;

        foreach (SpriteMetaData metaData in srcTexImporter.spritesheet) //遍历小图集
        {
            var rect = metaData.rect;
            Debug.Log($"{srcTex.format}");
            var spriteTex = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGBA32, false);
            Debug.Log($"{metaData.name}: rect:{metaData.rect}, border:{metaData.border}");

            var readRect = new Rect(rect.x, srcTempRT.height - (rect.y + rect.height), rect.width, rect.height); //读取是从RenderTexture, (0, 0)为左上角
            spriteTex.ReadPixels(readRect, 0, 0); //写出为Texture2D, (0, 0)为左下角
            spriteTex.Apply();

            var pngBytes = spriteTex.EncodeToPNG();
            var spriteOutPath = $"{outDirPath}/{metaData.name}.png";
            File.WriteAllBytes(spriteOutPath, pngBytes);

            AssetDatabase.ImportAsset(spriteOutPath, ImportAssetOptions.ForceUpdate);
            //修改设置
            var spriteTexImporter = AssetImporter.GetAtPath(spriteOutPath) as TextureImporter;
            if (spriteTexImporter)
            {
                spriteTexImporter.textureType = TextureImporterType.Sprite;
                spriteTexImporter.mipmapEnabled = false;
                spriteTexImporter.alphaIsTransparency = true;

                var setting = new TextureImporterSettings();
                spriteTexImporter.ReadTextureSettings(setting);
                setting.spriteGenerateFallbackPhysicsShape = false;
                setting.spriteBorder = metaData.border; //原来的9宫格设置不能丢了
                spriteTexImporter.SetTextureSettings(setting);

                spriteTexImporter.SaveAndReimport();
                //EditorUtility.SetDirty(texImporter);
            }
        }
        //AssetDatabase.Refresh();

        RenderTexture.active = oldActiveRT;
        RenderTexture.ReleaseTemporary(srcTempRT);
        Debug.Log("finish");
    }

}

#endif

 

【参考】

Unity---制作工具导出利用SpriteEditor分割完的图片以供NGUI制作图集_Roken24的博客-CSDN博客_unity导出图片

Unity 2D切割Texture2D,图集转成单独PNG报错问题,Copy其他博主的代码实现_于毒的博客-CSDN博客

 

标签:RenderTexture,srcTex,导出,spriteTexImporter,图集,var,rect,metaData
From: https://www.cnblogs.com/sailJs/p/16816119.html

相关文章

  • C#从大量数据的DataTable高效率快速导出到Excel
    using Microsoft.Office.Interop.Excel;using System.Runtime.InteropServices;  //dt:从数据库读取的数据;file_name:保存路径;sheet_name:表单名称private void Da......
  • 导出数据库时候用到的一条指令
    原来的命令:       mysqldump-t-BVAS--tablesTBL_CameraState>TBL_CameraState.sql基本解读1,mysqldump常用于MySQL数据库逻辑备份。2,-t  表示......
  • EasyPoi大数据导入导出百万级实例
    EasyPoi介绍:利用注解的方式简化了Excel、Word、PDF等格式的导入导出,而且是百万级数据的导入导出。EasyPoi官方网址:EasyPoi教程_V1.0(mydoc.io)。下面我写了一个测试用例......
  • 推荐一款可以导出提取,蜻蜓fm下载mp3格式的工具
    给大家推荐一款可以导出蜻蜓fm音频mp3格式的工具。  这款蜻蜓fm音频下载器,不仅可以提取免费音频,还支持登录vip账号,进行提取vip音频和付费音频。 使用蜻蜓导出工具......
  • Excel 将数据导出为文档文件,操作太繁琐,仅需鼠标双击即可
    大家好,在我们日常工作的时候,有时候需要将数据保存下来,其实你殊不知更多的时候我们是将Excel源数据的文件另存为Txt文档。但是呢,如果需要将很多的工作表中的数据分别保存为文......
  • EasyExcel实现100w数据导入导出
    数据导入druid.properties配置文件driverClassName=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Shanghai&useUnicode=true&......
  • vue导出word文档
    具体需求在我的疫情可视化项目中有一个功能需要导出word文档,在页面点击按钮后处理数据生成word文件,然后自动下载文档。实现步骤多番查询后发现前端导出word,使用docxtem......
  • pfx文件导出pem和私钥,更换网站域名证书
    --导出pem证书opensslpkcs12-inlightning-uat-castrol-com-cn.pfx-nodes-outlightning-uat-castrol-com-cn.pem--导出私钥,导入rancher用opensslrsa-inligh......
  • 记录上个月execl导出40多万条库存记录导致OOM
    以下是当时的处理流程:topCPU100%arthasattachfailurejps-ljmap-histo:live|moreheapdumpMAT(JVisualVM)XSSFWorkbook修改成SXSSFWorkbook(POI的......
  • C# 导出Excel
    C#导出Excel前端:functiondownloadReport(){varqueryParam=$.param($.bi.form.getData("form-searchBox"));if(queryParam!=""){......