Unity SpriteAtlas(图集)自动生成工具

2023-11-08

Unity SpriteAtlas(图集)自动生成工具

什么是图集

图集是一种将多个纹理合并为一个组合纹理的资源。 可以调用此单个纹理来发出单个绘制调用而不是发出多个绘制调用,能够以较小的性能开销一次性访问压缩的纹理

为什么要打图集

  1. 减少DrawCall,一张图集只需要一次DrawCall
  2. 图集将一张或者多张图片合成一张2的幂次方的图片,减少资源大小
  3. 把所有显示的绘制操作交给专门处理图像的GPU显然比交给CPU更合适,这样空闲下来的CPU可以集中力量处理游戏的逻辑运算

打图集的注意事项

  1. 需要打图集的图片资源不要放在Resources文件夹下,因为该文件夹中的资源不会被打入图集,而且这样也会导致资源大小翻倍

自动生成图集工具源码

using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.U2D;

namespace S
{
    public class AutoAtlas
    {
        static SpriteAtlasPackingSettings packSetting = new SpriteAtlasPackingSettings()
        {
            blockOffset = 1,
            padding = 2,
            enableRotation = false,
            enableTightPacking = false
        };

        private static SpriteAtlasTextureSettings textureSetting = new SpriteAtlasTextureSettings()
        {
            sRGB = true,
            filterMode = FilterMode.Bilinear,
        };

        private static TextureImporterPlatformSettings importerSetting = new TextureImporterPlatformSettings()
        {
            maxTextureSize = 2048,
            compressionQuality = 50,
        };

        [MenuItem("Assets/创建图集", false, 19)]
        static void CreateAtlas()
        {
            var select = Selection.activeObject;
            var path = AssetDatabase.GetAssetPath(select);
            CreateAtlasOfAssetDir(path);
        }

        public static void CreateAtlasOfAssetDir(string dirAssetPath)
        {
            if (string.IsNullOrEmpty(dirAssetPath) || Path.HasExtension(dirAssetPath))
            {
                Debug.LogError("当前选中对象不是文件夹,请选择对应文件夹重新创建图集");
                return;
            }
            
            SpriteAtlas atlas = new SpriteAtlas();
            atlas.SetPackingSettings(packSetting);
            atlas.SetTextureSettings(textureSetting);
            atlas.SetPlatformSettings(importerSetting);

            var atlasPath = $"{dirAssetPath}/New Atlas.spriteatlas";
            TryAddSprites(atlas, dirAssetPath);
            AssetDatabase.CreateAsset(atlas, atlasPath);
            AssetDatabase.SaveAssets();
            Selection.activeObject = AssetDatabase.LoadAssetAtPath<Object>(atlasPath);
        }

        static void TryAddSprites(SpriteAtlas atlas, string dirPath)
        {
            string[] files = Directory.GetFiles(dirPath);
            if (files == null || files.Length == 0) return;

            Sprite sprite;
            List<Sprite> spriteList = new List<Sprite>();
            foreach (var file in files)
            {
                if (file.EndsWith(".meta")) continue;
                sprite = AssetDatabase.LoadAssetAtPath<Sprite>(file);
                if (sprite == null) continue;
                spriteList.Add(sprite);
            }

            if (spriteList.Count > 0) atlas.Add(spriteList.ToArray());
        }
    }
}

使用方法

  1. 选中文件夹
  2. 右键–>创建图集
  3. 创建成功,选中文件夹中的所有精灵图片都被打入新建的图集中
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity SpriteAtlas(图集)自动生成工具 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 按成员序列化

    我已经实现了template
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • UML概述及UML类图详解

    引言 UML图有很多种 但是并非必须掌握所有的UML图 才能完整系统分析和设计工作 一般说来 在UML图中 只要掌握类图 用例图 时序图的使用 就能完成大部分的工作 也就是说 掌握UML的20 就能做80 的事情 对于程序员来说 最频繁使用
  • Unity_如何改变Image图片

    被改变的物体 public GameObject Tab3 需要改变的图片 public Sprite Tab3Img 加载将要用于修改的图片的路径 public string TabImgPath2 Image 2 void Start
  • vue 实现无缝向左滚动 鼠标悬停、离开时停止、开始滚动

    效果 可以根据此代码改为轮播 html代码
  • od机考真题-TLV解码

    while 1 try Tag input dct nums input split
  • 静态链接和动态链接

    静态链接 由于在我们实际的开发中 不可能将他们都放在一个文件中执行 所以将他们生成 o文件进行 从而要将他们进行链接 从而实现一个可以执行的程序 这个过程就是静态链接 静态库 是由多个多个 o文件压缩打包形成的一个文件 静态链接的优点 他在
  • linux的判断命令test之数值判断

    判断命令test一般用于脚本当中 可以简写为中括号 其会对跟随的条件进行判断 一般可以分为数值判断 字符串判断和文件判断 语法格式为test 判断条件 或 判断条件 注意中括号 与判断条件之间必须存在空格 还需注意判断条件的判断符号与比较值
  • 【Ubuntu】手把手教你打造 【VS Code + Cmake + C/C++】 开发环境

    下载安装VSCODE CMAKE Cmake安装请看我的这篇帖子 https blog csdn net TU Dresden article details 122373789 spm 1001 2014 3001 5501 VScode
  • shell基础知识

    shell基础知识 脚本语言 脚本是短小的 用来让计算机完成一系列工作的程序 这类程序可以用文本编辑器修改 不需要编译 通常是解释运行的 是一个约定的标记 告诉系统其后路径所指定的程序即是解释此脚本文件的shell程序 shell变量 使用
  • maven集成单元测试插件

    1 maven不可允许忽略单元测试 2 引用jacoco version
  • 【Unity】 DoTween对UI进行DoFade操作存在问题及解决办法

    Unity DoTween对UI进行DoFade操作存在问题 Unity版本 5 2 5 4 当使用this GetComponent
  • 很好用的etcd可视化管理工具 etcdv3-browser

    etcd是一个高可用 强一致性的服务发现存储仓库的 是k8s里的一个基础组件 现在随着k8s的不断的被企业所使用 etcd也越来越被看好作为服务发现的好的组件之一 今天推荐的是一款用来对etcd进行管理的图形化管理工具 etcdv3 bro
  • (04)VTK移动模型,判断是否相交

    前言 在模型相交检测时 碰撞检测 使用了重写vtkInteractorStyleTrackballActor函数的自己构建的交互器 实现检测鼠标按键 并显示不同颜色在不同相交情况时 方法 重写 vtkInteractorStyleTrack
  • fastboot通用线刷工具_[教程] 小米手机解BL锁、线刷详细教程,适用于小米全系列手机...

    这几天看到论坛里很多人在问怎么线刷 下面我就做个详细的线教程大家看一下高手别喷我哈 此教程只适合刷官方MIUI包 进入正题 第一步 解BL锁 1 浏览器打开http www miui com unlock done html点击立即解锁 然
  • QT多线程

    本文档是自己所整理的一份文档 部分是原创 还转贴了网上的一此资料 已经标明了 难点是多线程的编写 是有源代码的 大家可以作为参考 用到的知识是视频采集 压缩解压 xvid 实时传输 jrtp 基于qt库所写的 由于本人对qt下的多线程还不很
  • Ubuntu20.04安装RabbitMQ,并配置远程调用,详细教程

    一 简介 RabbitMQ是一种在Erlang OTP中实现的开源消息队列软件 它实现了AMQP 高级消息队列协议 并使用插件与流行的消息传递解决方案进行通信 如MQTT 消息队列遥测传输 面向文本流的消息传递协议等 在本文中 您将了解如何
  • Linux中Shell脚本命令替换和grep接收变量作为参数

    需求 再服务器上启动Springboot项目上 使用Shell脚本作为启动脚本去执行 然后调用jar包 在本项目 需要从配置文件application properties中去获取端口号 然后根据端口号去获取进程的PID 问题 第一 如果获
  • 机器学习面试150题:不只是考SVM xgboost 特征工程(101-153)附送【名企AI面试100题】

    101 你意识到你的模型受到低偏差和高方差问题的困扰 应该使用哪种算法来解决问题呢 为什么 低偏差意味着模型的预测值接近实际值 换句话说 该模型有足够的灵活性 以模仿训练数据的分布 貌似很好 但是别忘了 一个灵活的模型没有泛化能力 这意味着
  • 服务器防御DDoS的方法,一文解决DDoS攻击

    近来 DDoS攻击越来越严重 香奈儿韩国分公司在黑客入侵其数据库后发表了道歉声明 表示公司已封锁黑客攻击背后的IP地址 并聘请一家网络安全公司调查此事 广大的网站用户应该采取怎样的措施进行有效的防御呢 下面超级科技就介绍一下防御DDoS攻击
  • 2023前端面试题(第一版持续更新)

    CSS display none 和visibility hidden 的区别是什么 display none 隐藏对应的元素 在文档布局中不再给它分配空间 它各边的元素会合拢 就当他从来不存在 visibility hidden 隐藏对应
  • Unity SpriteAtlas(图集)自动生成工具

    Unity SpriteAtlas 图集 自动生成工具 什么是图集 图集是一种将多个纹理合并为一个组合纹理的资源 可以调用此单个纹理来发出单个绘制调用而不是发出多个绘制调用 能够以较小的性能开销一次性访问压缩的纹理 为什么要打图集 减少Dr