Unity减少发布打包文件的体积——获取精灵图片的信息限制它的大小

news2024/11/26 12:44:57

在这里插入图片描述

一、起因

一个工程,打包成webGL且压缩成zip文件后,接近400M,后来把大的精灵图片设置最大尺寸,降低大小后,再次发布,zip文件缩减到250M

二、如何一键获得工程里面的精灵图片信息

在这里插入图片描述

三、获取精灵图片信息

1、查找项目中的所有精灵图片

//查找工程文件中的所有精灵图片
string[] guids = AssetDatabase.FindAssets("t:Sprite");

2、获取精灵图片的资源位置

string assetPath = AssetDatabase.GUIDToAssetPath("精灵id");

3、获取精灵对象的Inspector参数信息

TextureImporter texImporter = AssetImporter.GetAtPath("精灵图片资源位置") as TextureImporter;
int maxSize = texImporter.maxTextureSize;

4、格式化字符串并保存到文件

下图为标题的信息,同理,每一张精灵图片的信息也是如此用【Tab】分割

var header = $"精灵名字\t位置\tMaxSize\tnative resolution\t大小\r";
...
...
var line = $"{sprite.name}\t{assetPath}\t{maxSize}\t{sprite.texture.height} * {sprite.texture.width}\t{sprite.texture.height * sprite.texture.width}\r";

调用 File.WriteAllText(fileName,content)保存到文件中

5、对于那些特别大的图,设置MaxSize进行限制

…手工或者用代码一键设置

四、附录代码

using System;
using UnityEngine;
using UnityEditor;
using System.Linq;
using System.IO;

class Example : EditorWindow
{
#if UNITY_EDITOR
    [MenuItem("模型处理/输出工程文件中所有精灵图片的信息")]
#endif
    static void FindAllSprites()
    {
        //获取精灵信息
        var sprites = FindAllTextures();
        Debug.Log(sprites);
        //保存到文档
        var fileName = $"D:\\图片信息汇总{DateTime.Now.ToString().Replace('/','_').Replace(':','.')}.txt";
        Debug.Log($"{fileName}");
        File.WriteAllText(fileName,sprites);
    }

    /// <summary>
    /// 查找工程中所有的精灵对象,获取他们的分辨率信息
    /// ==========================================================输出内容格式化的string对象
    /// 精灵名字      | 位置 | MaxSize | tnative resolution | 大小
    /// ----------------------------------------------------------
    ///  ...            ...     ...        ...                 ...
    /// ==========================================================
    /// </summary>
    public static string FindAllTextures()
    {
        //查找工程文件中的所有精灵图片
        string[] guids = AssetDatabase.FindAssets("t:Sprite");
        Debug.Log($"Found {guids.Length} sprite assets.");

        var header = $"精灵名字\t位置\tMaxSize\tnative resolution\t大小\r";
        var body = "";
        foreach (string guid in guids)
        {
            string assetPath = AssetDatabase.GUIDToAssetPath(guid);
            Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>(assetPath);

            TextureImporter texImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter;
            int maxSize = texImporter.maxTextureSize;
            

            //Debug.Log($"Sprite: {sprite.name}, Path: {assetPath}, MaxSize: {maxSize},native resolution:{sprite.texture.height} * {sprite.texture.width}");
            var line = $"{sprite.name}\t{assetPath}\t{maxSize}\t{sprite.texture.height} * {sprite.texture.width}\t{sprite.texture.height * sprite.texture.width}\r";
            body = body + line;
        }

        return $"{header}\r{body}";
    }
}

五、抛砖引玉

精力充沛的话,你也可以写一个功能,把影响build后打包体积的各种东西都统计一遍,然后对症下药,比如scene文件,fbx,prefab资源等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1014742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能工单系统的报修流程是怎样的?工单管理系统有什么作用?

“的修”智能工单管理系统适用于多个行业&#xff0c;包括学校、医院、酒店、企事业单位和社区物业。它基于微信小程序平台和APP开发&#xff0c;支持实现故障报修、报修状态查询以及服务评价等功能。用户可以轻松使用微信进行报修&#xff0c;以及查询报修的进度、状态和对服务…

【Linux从入门到精通】多线程 | 线程互斥(互斥锁)

上篇文章我们对线程 | 线程介绍&线程控制介绍后&#xff0c;本篇文章将会对多线程中的线程互斥与互斥锁的概念进行详解。同时结合实际例子解释了可重入与不被重入函数、临界资源与临界区和原子性的概念。希望本篇文章会对你有所帮助。 文章目录 引入 一、重入与临界 1、1 可…

网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)

文章目录 一、RCE二、命令执行/注入-概述三、命令执行-常见函数四、PHP命令执行-常见函数1、exec&#xff1a;2、system3、passthru4、shell_exec5、反引号 backquote 五、PHP命令执行-常见函数总结六、命令执行漏洞成因七、命令执行漏洞利用条件八、命令执行漏洞分类1、代码层…

目标检测评估指标mAP:从Precision,Recall,到AP50-95【未完待续】

1. TP, FP, FN, TN True Positive 满足以下三个条件被看做是TP 1. 置信度大于阈值&#xff08;类别有阈值&#xff0c;IoU判断这个bouding box是否合适也有阈值&#xff09; 2. 预测类型与标签类型相匹配&#xff08;类别预测对了&#xff09; 3. 预测的Bouding Box和Ground …

C高级day5(Makefile)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.#----->把带参宏的参数替换成字符串 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX(a,b) a>b?a:b #define STR(n) #n int main(int argc, const char *argv…

sheetjs實現頁面的數據導出execl

概述 需要給頁面的table做一個數據導出功能,發現一個好用sheetjs工具 只需要簡單的js語法如下,就可以將table的數據導出來 function load(){var date new Date();date.setTime(date.getTime() (8 * 60 * 60 * 1000));var table document.getElementById("tab");v…

神领物流 day02-网关与支付 Spring Cloud Alibaba 微服务

课程安排 单token存在的问题双token三验证用户端token校验与鉴权对接三方支付平台分布式锁 1、场景说明 新入职的你加入了开发一组&#xff0c;也接到了开发任务&#xff0c;并且你也顺利的修复了bug&#xff0c;完成了快递员、司机的鉴权&#xff0c;现在的你已经对项目的业…

C++qt day8

1.用代码实现简单的图形化界面&#xff08;并将工程文件注释&#xff09; 头文件 #ifndef MYWIDGET_H #define MYWIDGET_H //防止头文件冲突#include <QWidget> //父类的头文件class MyWidget : public QWidget //自定义自己的界面类&#xff0c;公共继承…

Linux vim的常见基本操作

目录 vim是一款多模式的编辑器 命令模式下&#xff1a; 用小写英文字母「h」、「j」、「k」、「l」&#xff0c;分别控制光标左、下、上、右移一格 gg&#xff1a;定位到代码第一行 nshiftg 定位到任意一行/最后一行 「 $ 」&#xff1a;移动到光标所在行的结尾 「 ^ 」&…

无涯教程-JavaScript - COLUMNS函数

描述 COLUMNS函数返回数组或引用中的列数。 语法 COLUMNS (array)争论 Argument描述Required/OptionalarrayAn array or array formula, or a reference to a range of cells for which you want the number of Columns.Required Notes COLUMNS(1:1)返回Excel中的列数,即…

字符串解码

题目链接 字符串解码 题目描述 注意点 s 由小写英文字母、数字和方括号 ‘[]’ 组成1 < s.length < 30s 保证是一个 有效 的输入s 中所有整数的取值范围为 [1, 300] 解答思路 利用栈先进后出的特点&#xff0c;将字符存储进栈中创建两个栈&#xff0c;一个数字栈&am…

照片批量处理 7000张

需求&#xff1a; 有6700照片导入系统&#xff1b; 系统只支持500张/每次&#xff1b; 6700 按机构分类复制提取出来&#xff1b; 分批次导入&#xff1b; 6700 分17份复制到对应文件夹中&#xff1b; 照片按照学号命名的&#xff1b; 20231715401.jpg 开始用bat脚本…

Matlab Simulink支持system generator插件

文章目录 前言一、System Generator 简介二、System Generator 特性三、System Generator 安装1、确定是否已安装 System Generator 工具2、vivado 卸载3、vivado 安装 四、解决版本不兼容问题五、使用 System Generator 前言 目前有在 Simulink 中开发完成后将其转换成 Veril…

七天学会C语言-第一天(C语言基本语句)

一、固定格式 这个是C程序的基本框架&#xff0c;需要记住&#xff01;&#xff01;&#xff01; #include<stdio.h>int main(){return 0; }二、printf 语句 简单输出一句C程序&#xff1a; #include<stdio.h> int main(){printf("大家好&#xff0c;&quo…

浅析Java责任链模式实现

一、概要 定义&#xff1a;责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 二、应用场景&#xff1a; 1.多条件流程判断&#xff1a;权限相关…

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…

把握经济大势和个人财运密码必须读懂钱—现代金钱的魔力

原出处&#xff1a;天涯论坛之《把握经济大势和个人财运密码必须读懂钱—现代金钱的魔力》 原作者&#xff1a;真立派 原文完整版PDF&#xff08;可能很快就会被河蟹&#xff0c;建议先保存&#xff09;&#xff1a;https://pan.quark.cn/s/20c917683d8f 引子 过去一些年&…

数据结构入门 — 树的概念与结构

本文属于数据结构专栏文章&#xff0c;适合数据结构入门者学习&#xff0c;涵盖数据结构基础的知识和内容体系&#xff0c;文章在介绍数据结构时会配合上动图演示&#xff0c;方便初学者在学习数据结构时理解和学习&#xff0c;了解数据结构系列专栏点击下方链接。 博客主页&am…

【LeetCode-中等题】 151. 反转字符串中的单词

文章目录 题目方法一&#xff1a;双指针去除空格 题目 方法一&#xff1a;双指针去除空格 核心代码去除首尾以及中间多余空格(在原串上修改) //去除首尾以及中间多余空格(在原串上修改)public StringBuilder trimSpaces(String s) { int len s.length();StringBuilder str …

【结构型】代理模式(Proxy)

目录 代理模式(Proxy)适用场景代理模式实例代码&#xff08;Java&#xff09; 代理模式(Proxy) 为其他对象提供一种代理以控制对这个对象的访问。Proxy 模式适用于在需要比较通用和复杂的对象指针代替简单的指针的时候。 适用场景 远程代理 (Remote Proxy) 为一个对象在不同…