Unity关于纹理图片格式带来的内存问题和对预制体批量格式和大小减半处理

我们经常会遇到内存问题,这次就是遇到很多图片的默认格式被改成了RGB32,导致Android打包后运行内存明显增加。

发生了什么

打包Android后,发现经常崩溃,明显内存可能除了问题,看了内存后发现了问题。
见下图:
在这里插入图片描述
实际被改成了RGBA 32,如下图
在这里插入图片描述
因为安卓端是没覆写的,所以导致格式就是rgb32
在这里插入图片描述

如何处理

那么如何处理能,最好一键处理。我是这样做的,我对我的需要打包的预设,例如场景,角色等等资源批量检测他们中间引用了哪些图片,然后对这些图片进行处理,因为很多图片是过度文件不打包,进行处理也没必要,白白浪费时间。

代码片段,这里的cfg.path是需要打包prefab的路径,这里只有代码片段是因为我的打包逻辑是自己写的,篇幅问题只能放上核心代码。
代码如下:

string[] file = AssetDatabase.GetDependencies(cfg.path, true);foreach (var dep in file)
{string strExt = System.IO.Path.GetExtension(dep).ToLower();if (!exps.Contains(strExt))continue;TextureImporter textureImporter = AssetImporter.GetAtPath(dep) as TextureImporter;TextureImporterPlatformSettings set = textureImporter.GetDefaultPlatformTextureSettings();// .GetPlatformTextureSettings(path);if (set.format != TextureImporterFormat.Automatic){if (changeFormatAuto){set.format = TextureImporterFormat.Automatic;textureImporter.SetPlatformTextureSettings(set);//EditorUtility.SetDirty(textureImporter);// 重新导入资源,否则更改并未生效。// 如资源未执行重新导入,则会在项目保存时自动导入、生效AssetDatabase.ImportAsset(dep);Debug.Log("修改预设" + cfg.prefabname + "中的图片资源格式存在的隐患:" + dep, textureImporter);checkok = false;allcount++;}else{Debug.LogError("预设" + cfg.prefabname + "中的图片资源格式存在隐患:" + dep, textureImporter);allcount++;checkok = false;}continue;}
}

cfg.path就是perfab所在的位置。传入就可以了
脚本会自动改为Automatic格式。

最后再观察内存,图片找不到了,我放了其他的同尺寸图和一张4k的图,ASTC格式的2k大概是4.8M,4k只有19m内存。
在这里插入图片描述

在这里插入图片描述
最后希望大家有一个干净的资源包。

缩小纹理

可能PC转Android的时候,还希望能缩小纹理尺寸,可以利用这个对图片这样来处理。

//把图片的质量对半砍掉,0表示不砍掉,1:砍一半,2:1/4
public static bool CutHalfPicture(int sizeLevel = 1)
{List<string> exps = new List<string>(){ ".bmp",".jpg",".jpeg",".png",".tif",".psd",".tga"};bool checkok = true;int[] textureSizes = new int[] {32,64,128,256,512,1024,2048,4096,8192,16384,};int allcount = 0;if (ResJsonObjectList == null || ResJsonObjectList.Count == 0)JResAssetJson.ReadResJson();for (int i = 0; i < ResJsonObjectList.Count; i++){ResJson cfg = ResJsonObjectList[i];if (cfg.isab != 1)continue;string[] file = AssetDatabase.GetDependencies(cfg.path, true);foreach (var dep in file){string strExt = System.IO.Path.GetExtension(dep).ToLower();if (!exps.Contains(strExt))continue;TextureImporter textureImporter = AssetImporter.GetAtPath(dep) as TextureImporter;TextureImporterPlatformSettings set = textureImporter.GetDefaultPlatformTextureSettings();// .GetPlatformTextureSettings(path);//Debug.Log(set.maxTextureSize+",");int width, height, max;Texture2D tex = AssetDatabase.LoadAssetAtPath(dep, typeof(Texture2D)) as Texture2D;width = tex.width; height = tex.height;max = Mathf.Max(width, height);int size = 32; //Default sizefor (int j = 0; j < textureSizes.Length; j++){if (textureSizes[j] >= max){size = textureSizes[j];break;}}//set.maxTextureSize = 16384;//Debug.Log(size);size = (int)(size / Mathf.Pow(2, sizeLevel));if (size < 32)size = 32;if (set.maxTextureSize != size){set.maxTextureSize = size;textureImporter.SetPlatformTextureSettings(set);AssetDatabase.ImportAsset(dep);Debug.Log("修改预设" + cfg.prefabname + "中的图片:" + dep + " ,大小:" + set.maxTextureSize, textureImporter);checkok = false;allcount++;}continue;}}Debug.Log("累计共修改" + allcount + "处图片。");return checkok;
}

代码中的ResJsonObjectList和JResAssetJson.ReadResJson()是预设列表和获取预设列表的方法,还是篇幅问题,这里无法放出。可以搜一下如何获取所有预设(prefab)的文章。

如果对你有用,请点赞。

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

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

相关文章

1.C语言——基础知识

C语言基础知识 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include <stdio.h> int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }2.注释 单行…

【Qt5】QString的成员函数chop

2024年1月19日&#xff0c;周五下午 QString 的 chop 方法用于从字符串的末尾移除指定数量的字符。这个方法会修改原始字符串&#xff0c;并返回 void。 下面是一个简单的示例&#xff1a; #include <QString> #include <QDebug>int main() {QString originalStr…

Jetson AGX Orin安装archiconda、Pytorch

想在Jetson AGX Orin创建一个虚拟环境&#xff0c;然后安装pytorch&#xff0c;过程中遇到了很多的坑&#xff0c;这篇文章主要用于记录过程~因为Orin本身是Arm架构&#xff0c;X86架构可以装Anaconda&#xff0c;对于ARM要装archiconda。 1.安装archiconda 1.1确定操作系统架…

KBP206-ASEMI小功率家用电源KBP206

编辑&#xff1a;ll KBP206-ASEMI小功率家用电源KBP206 型号&#xff1a;KBP206 品牌&#xff1a;ASEMI 正向电流&#xff08;Id&#xff09;&#xff1a;2A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;600V 正向浪涌电流&#xff1a;60A 正向电压&#xff08;V…

BeanUtils工具类简介

BeanUtils工具类 一、简介 ​ BeanUtils 是 Apache commons组件的成员之一&#xff0c;主要用于简化JavaBean封装数据的操作。可以将一个表单提交的所有数据封装到JavaBean中。 二、pom依赖 <dependency><groupId>commons-beanutils</groupId><artifa…

容器技术1-容器与镜像简介

目录 1、容器与虚拟化 2、容器发展历程 3、镜像简介 4、镜像原理 &#xff08;1&#xff09;分层存储 &#xff08;2&#xff09;写时复制 &#xff08;3&#xff09;内容寻址 &#xff08;4&#xff09;联合挂载 1、容器与虚拟化 容器技术在操作系统层面实现了对计算机…

山西电力市场日前价格预测【2024-01-21】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-21&#xff09;山西电力市场全天平均日前电价为266.42元/MWh。其中&#xff0c;最高日前电价为359.17元/MWh&#xff0c;预计出现在08:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

76.网游逆向分析与插件开发-背包的获取-背包地址的逆向分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;75.网游逆向分析与插件开发-背包的获取-背包结构与指针的逆向分析-CSDN博客 通过上一个内容&#xff0c;知道了背包的结构&#xff0c;它是一个指针数组&#xff0c;它里面还记录的背包有多少格。 然…

Go语言基础快速上手

1、Go语言关键字 2、Go数据类型 3、特殊的操作 3.1、iota关键字 Go中没有明确意思上的enum&#xff08;枚举&#xff09;定义&#xff0c;不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。 const (a iota // 0b // 1c 100 // 100d // 100 (与上一…

linux LPT和COM回路测试(基于python+Qt+C++)

软件UI: 回路治具&#xff08;COMLPT&#xff09;&#xff1a; lpt_test.cpp&#xff08;c 源代码&#xff09;&#xff1a; #include <iostream> #include <fstream> #include <sstream> #include <unistd.h> #include <fcntl.h> #include <…

基于 UniAPP 社区论坛项目多端开发实战

社区论坛项目多端开发实战 基于 UniAPP 社区论坛项目多端开发实战一、项目准备1.1 ThinkSNS 简介及相关文档1.2 使用 UniAPP 构建项目1.3 构建项目文件结构1.4 配置页面 TabBar 导航1.5 使用 npm 引入 uView UI 插件库 二、首页功能实现2.1 首页 header 广告位轮播图功能实现2.…

小白水平理解面试经典题目LeetCode 121 Best Time to Buy and Sell Stock

121 Best Time to Buy and Sell Stock (买卖股票的最佳时机) 你好&#xff0c;2024年的第一个月&#xff0c;又是秋风萧瑟天气凉&#xff0c;草木摇落露为霜。.。。在这个特殊的时代&#xff0c;作为我们普通的一个打工人&#xff0c;我们用这道题&#xff0c;开启对这个不符合…

2023全球边缘计算大会深圳站:核心内容与学习收获(附大会核心PPT下载)

边缘计算作为当今IT领域的热门话题&#xff0c;已经引起了全球范围内的广泛关注。本次大会汇聚了众多业界精英&#xff0c;共同探讨边缘计算的发展趋势、技术应用与创新实践。本文将围绕大会的核心内容展开讨论&#xff0c;并分析参会者从中能够学到的东西。 一、边缘计算的发…

C++PythonC# 三语言OpenCV从零开发(2):教程选择

文章目录 相关专栏前言视频教学和官方文档视频教程OpenCV 官方教程最终选择我的最终选择 相关专栏 C&Python&Csharp in OpenCV 前言 OpenCV 有官方的教程和简单的视频教程&#xff1a; OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C 快速入门视频30讲 - 系列合集 …

【Java】JDBC的使用

JDBC package jdbc_demo;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class jdbc {public static void main(String[] args)throws Exception {//1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2.获取…

【开源】基于JAVA语言的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

逸学Docker【java工程师基础】3.4Docker安装redis

1.拉取redis docker pull redis 2.选择一个合适的redis 版本的配置文件 Redis configuration | Redis 或者这个 链接&#xff1a;https://pan.baidu.com/s/1RRdtgec4xBAgQghlhm0x1Q 提取码&#xff1a;ycyc 在1044行修改密码 3.提前在服务器建立 /data/redis 文件夹&…

【华为 ICT HCIA eNSP 习题汇总】——题目集1

1、&#xff08;多选&#xff09;根据下面所示的命令输出&#xff0c;下列描述中正确的是&#xff1f; A、GigabitEthernet0/0/1 允许VLAN1通过 B、GigabitEthernet0/0/1 不允许VLAN1通过 C、如果要把 GigabitEthernet0/0/1 变为 Access 端口&#xff0c;首先 需要使用命令“un…

2023 年,我患上了 AI 焦虑症!

【作者有话说】2023 年对我来说是神奇的一年&#xff0c;我意外地从一个程序员变成了一个 AI 资讯届的“网红”&#xff0c;到年底时我在 X 平台的阅读量超过 1 亿&#xff0c;微博上的阅读量则超过 10 亿&#xff0c;很多人通过我的微博或者 X 了解最新的 AI 资讯、教程和 Pro…

SpringMVC下半篇之整合ssm

4.ssm整合 4.1.创建表 CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,money double DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;4.2.创建工程 4.3.pom.xml <?xml version"1.0" encoding&…