首页 > 其他分享 >SpriteAtlas图集导出工具

SpriteAtlas图集导出工具

时间:2024-04-28 22:55:19浏览次数:29  
标签:tex2D return 导出 atlasTexs SpriteAtlas atlas false 图集

 

 

public class SpriteAtlasExportTool : EditorWindow
{
    const string MenuItemPath_ExportSelectSpriteAtlas = "MyTools/Export Select SpriteAtlas";

    [MenuItem(MenuItemPath_ExportSelectSpriteAtlas, true)]

    private static bool MenuItemValidator_ExportSelectSpriteAtlas()
    {
        if (Application.isPlaying)
            return false;
        if (null == Selection.activeObject)
            return false;
        SpriteAtlas atlas = Selection.activeObject as SpriteAtlas;
        if (null == atlas)
            return false;
        return true;
    }

    [MenuItem(MenuItemPath_ExportSelectSpriteAtlas)]
    private static void MenuItem_ExportSelectSpriteAtlas()
    {
        if (null == Selection.activeObject)
            return;
        SpriteAtlas atlas = Selection.activeObject as SpriteAtlas;
        if (null == atlas)
            return;

        TextureImporterPlatformSettings texImpPlatSettings = SpriteAtlasExtensions.GetPlatformSettings(atlas, "DefaultTexturePlatform");
        TextureImporterPlatformSettings texImpPlatSettingsBak = new TextureImporterPlatformSettings();
        texImpPlatSettings.CopyTo(texImpPlatSettingsBak); //备份贴图平台设置, 用于后面恢复
        //texImpPlatSettings.overridden = true;
        texImpPlatSettings.format = TextureImporterFormat.RGBA32; //高清图
        SpriteAtlasExtensions.SetPlatformSettings(atlas, texImpPlatSettings);

        SpriteAtlasTextureSettings atlasTexSettings = SpriteAtlasExtensions.GetTextureSettings(atlas);
        atlasTexSettings.generateMipMaps = false; //关掉mipMaps

        SpriteAtlasUtility.PackAtlases(new SpriteAtlas[] { atlas }, EditorUserBuildSettings.activeBuildTarget); //导出前打一下图集
        MethodInfo getPreviewTextureMI = typeof(SpriteAtlasExtensions).GetMethod("GetPreviewTextures", BindingFlags.Static | BindingFlags.NonPublic);
        Texture2D[] atlasTexs = (Texture2D[])getPreviewTextureMI.Invoke(null, new object[] { atlas });
        if (null != atlasTexs && atlasTexs.Length > 0)
        {
            string outFolderName = "_AtlasTemp";
            if (!Directory.Exists(outFolderName))
                Directory.CreateDirectory(outFolderName);

            for (int i = 0; i < atlasTexs.Length; ++i)
            {
                var tex2D = atlasTexs[i];
                Debug.Log($"tex: name:{tex2D.name}, format:{tex2D.format}, path:{AssetDatabase.GetAssetPath(tex2D)}");

                var exportPngFilePath = "";
                if (1 == atlasTexs.Length)
                    exportPngFilePath = Path.Combine(outFolderName, $"{tex2D.name}.png");
                else
                    exportPngFilePath = Path.Combine(outFolderName, $"{tex2D.name}-Page{i}.png");

                var rawBytes = tex2D.GetRawTextureData();

                Texture2D tempTex = new Texture2D(tex2D.width, tex2D.height, tex2D.format, false, false);
                tempTex.LoadRawTextureData(rawBytes);
                tempTex.Apply();

                var pngBytes = tempTex.EncodeToPNG();
                Debug.Log($"Export {i}: {exportPngFilePath}");
                File.WriteAllBytes(exportPngFilePath, pngBytes);
            }
        }
        Debug.Log($"finish");

        SpriteAtlasExtensions.SetPlatformSettings(atlas, texImpPlatSettingsBak); //恢复设置
    }
}

 导出的图集

 

参考

Unity技术之UGUI-SpriteAtlas(图集)查看工具_unity怎么查看图集-CSDN博客

 

标签:tex2D,return,导出,atlasTexs,SpriteAtlas,atlas,false,图集
From: https://www.cnblogs.com/sailJs/p/18164698

相关文章

  • 使用vscode写Markdown并且导出为pdf(干货)
    目录序言下载vscode安装插件markdown语法导出为pdf序言大家在学习过程中都会有记笔记的好习惯(美观的笔记当然是上上选),于是,Markdown就是一个不错的选择,待会也会附上一下常用基础语法。笔者比较喜欢使用vscode,有插件它就是无所不能的(bush。下载vscode官网下载https://code.v......
  • mongodb异机做时间点恢复(基于时间范围查询导出oplog)
    环境:OS:Centos7DB:mongodb5原环境:1主2从,异机恢复的环境:单机(oplog.rs是否开启都可以,开启可以参考:https://www.cnblogs.com/hxlasky/p/17979922) 1.模拟写入数据连接主库模拟写入数据/usr/local/services/mongodb/bin/mongo192.168.56.101:29001useadmindb.auth("......
  • 生产设备机台文件导出,怎样兼顾文件的完整性和导出效率?
    生产设备是指用于制造、加工或生产产品或物品的机器、工具、设施、设备和仪器。它们在工业生产和制造业中扮演着关键的角色,帮助完成各种生产过程和操作。生产设备种类繁多,可以包括各种类型的设备,如机械设备、电子设备、自动化设备、仪器仪表、输送设备等。这些设备可以用于原材料......
  • 半导体机台文件导出,如何实现统一管理减轻运维压力?
    半导体机台在半导体制造过程中会产生多种数据,这些数据对于设备的运行、监控、优化和故障诊断等方面都具有重要意义。以下是半导体机台可能产生的一些主要数据类型: 工艺控制数据:这包括在制造过程中的各个工艺步骤(如光刻、蚀刻、沉积等)中产生的数据。这些数据反映了制造过程的稳......
  • vue,js直接导出excel,xlsx的方法,XLSX_STYLE 行高设置失效的问题解决
    1、先安装依赖:xlsx、xlsx-style、file-saver三个包npminstallxlsxxlsx-stylefile-saver2、引入:<script>import*asXLSXfrom'xlsx/xlsx.mjs'importXLSX_STYLEfrom'xlsx-style';import{saveAs}from'file-saver';exportdefau......
  • windows bilibili客户端缓存视频导出
    视频缓存地址:C:\Users\Administrator\Videos\bilibili\一串数字使用winhex把视频和音频前面的八个0删除使用ffmpeg合并视频和音频ffmpeg-i视频文件-i音频文件-codeccopy输出地址......
  • csv文件导出后身份证和电话号码以及统一社会信用代码等数字字段乱码处理
     第一步:新建表格  第二步:获取数据---》导入数据  第三步:导入数据 第四步:  选择列----文本           TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanian......
  • 1、oracle数据库-导入导出
    Oracle数据库的导入导出主要有三种方式:使用pl、sql开发工具导入导出dmp文件方式:这是最常用的导入导出方式,生成的dmp文件是二进制的,可以跨平台操作,并且包含权限信息,也支持大字段数据,使用最广泛。在导出语法中,可以通过指定“full=y”和“ignore=y”参数来进行整个数据库的......
  • 可审批可审计追溯的单网络导出文件方案,了解一下!
    在物理隔离状态下,单网络导出文件是一个重要的安全需求,特别是在处理敏感数据时。在这种环境下,数据导出需要采取特殊的安全措施,以确保数据传输的安全性和合规性。需要考虑以下因素: 安全性:确保传输过程加密,防止数据在传输过程中被截获。性能:对于大文件或大量数据,需要考虑传输速......
  • 半导体晶圆厂内外网数据单向导出,什么样的方案才安全又便捷?
    半导体晶圆厂企业为了隔绝外部⽹络有害攻击、保护⽹络和数据安全,通常采⽤物理隔离的⽅式,将企业内⽹与互联⽹隔离。⽹络隔离后,基于业务开展需求,部分重要数据仍需由内⽹导⼊及导出⾄外部⽹络区域。为保障数据的安全合规性,企业需要对⽂件导出导出⾏为进⾏管控。  不少晶圆厂为......