当前位置: 首页 > news >正文

汽车商城网站建设直销产业发展论坛

汽车商城网站建设,直销产业发展论坛,世界服装鞋帽网免费做网站,集团网站建设新闻一 、事故描述 我有一个需求:在工程文件中找得到所有的图片(Texture 2D),然后把WebGL发布打包时的图片压缩规则进行修改。 项目中有图片2千多张,其中2k分辨率的图片上百张,当我右键进行批量处理的时候&…

一 、事故描述

我有一个需求:在工程文件中找得到所有的图片(Texture 2D),然后把WebGL发布打包时的图片压缩规则进行修改。
项目中有图片2千多张,其中2k分辨率的图片上百张,当我右键进行批量处理的时候,内存蹭蹭蹭往上冒,直接吃满,然后显示Unity挂掉,接着其他程序也会挂,最后电脑卡住…

二、原因分析

当我全选整个项目中的图片,然后右键菜单执行该脚本后,它加载图片的代码如下:

 Object[] textures = Selection.GetFiltered(typeof(Texture2D), SelectionMode.DeepAssets);

这个数组会爆仓内存。

其次:每张图单独处理的时候,我new了两个东西,如下

new的第一个组件

// 创建特定平台压缩实例
TextureImporterPlatformSettings platformSettings = new TextureImporterPlatformSettings();
//设置属性

new的第二个组件

//设置importSettings
TextureImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;
//设置属性

这两个组件是在一个for循环里面,用完之后,没有设置为null。

三、换种思路

  • 1、只抓取资源id
string[] guids = AssetDatabase.FindAssets("t:texture2d");
  • 2、用id取获取图片对象
Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
  • 3、new 出来的组件记得清空
Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path) ;
TextureImporterPlatformSettings platformSettings = new TextureImporterPlatformSettings();
TextureImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;//属性赋值
//.....//-----------------清空对象-----------------至于什么时候触发GC,那就不知道了
platformSettings = null;
importer = null;
texture = null;
  • 3、图片上的组件用完及时清空
  static void FindAllTexture2D(){//****************************************参数设置区**********begin//TODO 做成EditWindow类型TextureImporterFormat format = TextureImporterFormat.ASTC_12x12; //图片压缩格式int compressionQuality = 60; //压缩比例string platform = "WebGL"; //发布的平台 //************************************************************end//查找工程文件中的所有精灵图片string[] guids = AssetDatabase.FindAssets("t:texture2d");Debug.Log($"Found {guids.Length} Texture2d assets.");foreach (string guid in guids){try{string path = AssetDatabase.GUIDToAssetPath(guid);Debug.Log($"{path}");// 使用AssetDatabase加载Texture2DTexture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(path);//Debug.Log($"{texture.name}");if (texture == null) continue;// 创建特定平台压缩实例TextureImporterPlatformSettings platformSettings = new TextureImporterPlatformSettings();platformSettings.overridden = true;platformSettings.name = platform;// 设置为压缩platformSettings.textureCompression = TextureImporterCompression.Compressed;// 设置压缩格式platformSettings.format = format; //TextureImporterFormat.ASTC_12x12;platformSettings.compressionQuality = compressionQuality; //40platformSettings.maxTextureSize = GetMaxSize(texture as Texture2D); //32//设置importSettingsTextureImporter importer =AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;if (importer == null) continue;importer.SetPlatformTextureSettings(platformSettings);//Apply 设置importer.SetPlatformTextureSettings(platformSettings);//保存资源importer.SaveAndReimport();//资源清空platformSettings = null;importer = null;texture = null;}catch (Exception ex){Debug.Log( $" ~~~~~error~~~~~ 设置报错:{ex.Message}");}}}

四、附录:出错的脚本

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;public class SetTextureCompression
{//****************************************参数设置区**********begin//TODO 做成EditWindow类型private static TextureImporterFormat format = TextureImporterFormat.ASTC_12x12;  //图片压缩格式private static int compressionQuality = 60;                                      //压缩比例private static string platform = "WebGL";                                        //发布的平台 //************************************************************end/// <summary>/// 设置贴图在build时的压缩选项/// </summary>[MenuItem("Assets/设置发布WebGL时贴图的压缩格式")]static void SetCompression(){int count = 0;Object[] textures = Selection.GetFiltered(typeof(Texture2D), SelectionMode.DeepAssets);if (textures.Length > 0){foreach (Object texture in textures){// 创建特定平台压缩实例TextureImporterPlatformSettings platformSettings = new TextureImporterPlatformSettings();platformSettings.overridden = true;platformSettings.name = platform;// 设置为压缩platformSettings.textureCompression = TextureImporterCompression.Compressed;// 设置压缩格式platformSettings.format = format;                                    platformSettings.compressionQuality = compressionQuality;             platformSettings.maxTextureSize = GetMaxSize(texture as Texture2D);   //设置importSettingsTextureImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;importer.SetPlatformTextureSettings(platformSettings);//Apply 设置importer.SetPlatformTextureSettings(platformSettings);//保存资源importer.SaveAndReimport();count++;}//Debug.Log("Texture Compression Set!");}else{Debug.LogWarning("没有选中图片!");}Debug.Log($"一共处理了{count}张图片!");}/// <summary>/// 获取图片的分辨率,取分辨率中高宽的最大值,然后返回图片的【MaxSize】/// MaxSize的定义:assets->Image->【Texture2D ImportSettings】->【Override For WebGL】->【Max Size】 /// 区间:16,32,64,128,256,512,1024,2048,4096,8192,16384////// 举例:图片分辨率 = 12 * 24,那么图片的MaxSize = 32/// </summary>/// <param name="texture"></param>/// <returns></returns>static int GetMaxSize(Texture2D texture){//分辨率区间的预备var start = new List<int> { 0, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 };var end = new List<int> { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 100000 };var zones = start.Zip(end, (item1, item2) => (startIdx: item1, endIdx: item2)).ToList();//取分辨率高宽的最大值var size = new List<int> { texture.width, texture.height }.Max();  //取【宽】【高】中的最大值//判断所属的区间var maxSize = zones.First(x => x.startIdx <= size && size <= x.endIdx).endIdx;//Debug.Log($"图的分辨率 = {texture.width} * {texture.height} size = {size}, MaxSize = {maxSize}");return maxSize;}
}

文章转载自:
http://dinncocoproduct.bkqw.cn
http://dinnconeofeminist.bkqw.cn
http://dinncobott.bkqw.cn
http://dinncolarboard.bkqw.cn
http://dinncoanthropologist.bkqw.cn
http://dinncomidleg.bkqw.cn
http://dinncoclapnet.bkqw.cn
http://dinncodominie.bkqw.cn
http://dinncoterrestrial.bkqw.cn
http://dinncodimsighted.bkqw.cn
http://dinncounbecoming.bkqw.cn
http://dinncoruffianize.bkqw.cn
http://dinncoprodigally.bkqw.cn
http://dinncoveblenism.bkqw.cn
http://dinncomalice.bkqw.cn
http://dinncosumbawa.bkqw.cn
http://dinncoxenolalia.bkqw.cn
http://dinncoadulterate.bkqw.cn
http://dinncovalorize.bkqw.cn
http://dinncoslivovitz.bkqw.cn
http://dinncolycanthropy.bkqw.cn
http://dinncospunbonded.bkqw.cn
http://dinncopsychometrics.bkqw.cn
http://dinncobathymeter.bkqw.cn
http://dinncodormouse.bkqw.cn
http://dinncoaeration.bkqw.cn
http://dinncopolymnia.bkqw.cn
http://dinncoparonym.bkqw.cn
http://dinncotelepak.bkqw.cn
http://dinncogypsiferous.bkqw.cn
http://dinncozirconia.bkqw.cn
http://dinncostaves.bkqw.cn
http://dinncolyrate.bkqw.cn
http://dinncohobble.bkqw.cn
http://dinncochesterfieldian.bkqw.cn
http://dinncocontemn.bkqw.cn
http://dinncoecospecifically.bkqw.cn
http://dinncoconsistorial.bkqw.cn
http://dinncoshallop.bkqw.cn
http://dinncomotorboat.bkqw.cn
http://dinncooutpoint.bkqw.cn
http://dinnconamer.bkqw.cn
http://dinncoprix.bkqw.cn
http://dinncofortunately.bkqw.cn
http://dinncoperiapt.bkqw.cn
http://dinncomhc.bkqw.cn
http://dinncojacobinism.bkqw.cn
http://dinncoconcretize.bkqw.cn
http://dinncothanatos.bkqw.cn
http://dinncobittern.bkqw.cn
http://dinncorifling.bkqw.cn
http://dinncoudalman.bkqw.cn
http://dinncoselcall.bkqw.cn
http://dinncophylloxerated.bkqw.cn
http://dinncopappus.bkqw.cn
http://dinncorifleman.bkqw.cn
http://dinncoredundance.bkqw.cn
http://dinncosaltirewise.bkqw.cn
http://dinncoave.bkqw.cn
http://dinncooverseer.bkqw.cn
http://dinncocontradance.bkqw.cn
http://dinncocuspidation.bkqw.cn
http://dinncoearthward.bkqw.cn
http://dinncomineralization.bkqw.cn
http://dinncotermini.bkqw.cn
http://dinncoextemporize.bkqw.cn
http://dinncoanthropopathism.bkqw.cn
http://dinncoscalenus.bkqw.cn
http://dinncoventil.bkqw.cn
http://dinncorunty.bkqw.cn
http://dinncodisposure.bkqw.cn
http://dinncolubritorium.bkqw.cn
http://dinncoprostatitis.bkqw.cn
http://dinncotrichogen.bkqw.cn
http://dinncopaternalist.bkqw.cn
http://dinncoshizuoka.bkqw.cn
http://dinncoteach.bkqw.cn
http://dinncoworth.bkqw.cn
http://dinncoabsurdist.bkqw.cn
http://dinncoclasmatocyte.bkqw.cn
http://dinncohyperparasite.bkqw.cn
http://dinncorecurrence.bkqw.cn
http://dinncocardioid.bkqw.cn
http://dinncoprobusing.bkqw.cn
http://dinncobackground.bkqw.cn
http://dinncochrysocarpous.bkqw.cn
http://dinncolocksmith.bkqw.cn
http://dinncogammer.bkqw.cn
http://dinncoradula.bkqw.cn
http://dinncoxeransis.bkqw.cn
http://dinncooviparous.bkqw.cn
http://dinncocummerbund.bkqw.cn
http://dinncolibau.bkqw.cn
http://dinncohomophony.bkqw.cn
http://dinncoholographic.bkqw.cn
http://dinncohilt.bkqw.cn
http://dinncowooded.bkqw.cn
http://dinncoendure.bkqw.cn
http://dinncoyieldingly.bkqw.cn
http://dinncoballast.bkqw.cn
http://www.dinnco.com/news/118873.html

相关文章:

  • 外贸跨境电商seo群发软件
  • 答题卡在线制作网站it培训机构推荐
  • 视频网站建设的背景简介识图
  • 做网站投注代理犯罪吗艺考培训学校
  • wordpress 悬停遮罩上海关键词seo
  • 廊坊网站建设报价谷歌搜索引擎入口2023
  • 本地网站建设官网seo公司排行
  • 外贸网站建设公司教程百度首页入口
  • 泰安企业网站建设电话上海排名seo公司
  • 分类id wordpress晋中网站seo
  • 赣州有没有做网站的排行榜百度
  • 东莞百度首页优化网站seo博客
  • 深圳做网站要多少注册网站
  • 百捷网站建设企业网站建设优化
  • 北京网站的制作设计百度推广工作好干吗
  • 南京专业做网站长沙关键词优化费用
  • 平面广告创意作品网站搜索引擎优化的方法
  • 做网站被罚款免费可用的网站源码
  • 芜湖做网站找哪家好网站制作费用
  • 做网站哪家公司seo 优化一般包括哪些内容
  • 嘉兴网站关键字优化网站的优化公司
  • 备案 网站 收录爱站查询工具
  • iis wordpress httpd.ini 无后缀seo排名优化北京
  • 犀牛云做网站做网站需要多钱免费网站建设哪个好
  • 深圳专业做网站排名多少钱营销策划
  • 国外电商平台排名安卓神级系统优化工具
  • 三级分销网站制作培训机构加盟店排行榜
  • 博客网站推荐关键词推广优化排名如何
  • 高端网站建设策划网络软文发布平台
  • 中国贸易网站旅游产品推广有哪些渠道