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

一、起因

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

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

三、获取精灵图片信息

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

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

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

csharp 复制代码
string assetPath = AssetDatabase.GUIDToAssetPath("精灵id");

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

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

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

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

csharp 复制代码
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进行限制

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

四、附录代码

csharp 复制代码
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资源等等。

相关推荐
C蔡博士14 小时前
Unity2D物理系统-从入门到实战优化
unity·游戏引擎·rigidbody2d
mxwin21 小时前
Unity Shader 顶点动画:在顶点着色器中实现风吹草动、河流波动、布料模拟
unity·游戏引擎·shader·着色器
DowneyJoy1 天前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
DowneyJoy1 天前
【Unity3D补充知识点】常用数据结构分析-数组(Array)
数据结构·unity·c#
w-白兰地1 天前
配置Unity中的ADB环境变量
unity·adb·游戏引擎
mxwin1 天前
Unity Shader 几何着色器:动态生成图元与顶点拓扑修改
unity·游戏引擎·着色器
呆呆敲代码的小Y1 天前
【Unity-AI开发篇】| 游戏中接入DeepSeek实现AI对话,完整详细步骤
人工智能·游戏·unity·ai·游戏引擎·u3d·deepseek
Sator12 天前
Unity关于射击游戏人物动画的设计经验
游戏·unity·游戏引擎
冰凌糕2 天前
Unity3D Shader 坐标空间详解
unity
sin°θ_陈2 天前
前馈式3D Gaussian Splatting 研究地图(路线二):几何优先的前馈式 3DGS——前馈式 3DGS 如何重新拥抱多视图几何
深度学习·3d·webgl·三维重建·空间计算·3dgs·空间智能