首次界面打开加载的资源(如 贴图)会被缓存在内存中,再次打开界面由于内存中已有了资源 所以会更快。如何让首次打开界面会更快呢?

图片是否进行了有效的压缩。Android 平台下不带透明通道 优先使用ETC1,带透明通道优先使用ETC2。如果显示质量无法达到要求 可以使用RGBA16,最后才使用RGBA32.

正确的优先使用顺序是 ETC1 > ETC2 > RGBA16 > RGBA32.

另外针对android平台 unity实现了一套Crunched 压缩方式,比如RGBA Crunched ETC2压缩格式 ,会先用 ETC2压缩 再用Crunched压缩一遍。 虽然运行逻辑上需要再压缩一遍,但由于Crunched压缩会让贴图大小更小,加载时间会比单纯使用ETC2快很多 。 简单点说 RGBA Crunched ETC2 比 ETC2加载更快,包体会更小。

IOS平台下 优先使用PVRTC,其次使用ASTC 。不带透明通道可以使用 ASTC 5x5(表示每个压缩快的带下是5x5 = 25 ),带透明通道可以使用ASTC 4x4 (表示每个压缩快的大小是4x4 = 16 )。如果显示质量无法达到要求 可以使用RGBA16,最后才使用RGBA32.

正确的优先使用顺序是 PVRTC > ASTC > RGBA16 > RGBA32.

以一张1024x1024的贴图为例:

RGBA32 Bit : 表示每个像素占用32位 4字节 ,内存大小 1024 x 1024 x 4 = 4M

RGBA15 Bit : 表示每个像素占用16位 2字节 ,内存大小 1024 x 1024 x 2 = 2M

RGB EC1  4Bit : 表示每个像素占用4位 0.5字节 ,内存大小 1024 x 1024 x 0.5 = 0.5M

RGBA EC2  8Bit : 表示每个像素占用8位 1字节 ,内存大小 1024 x 1024 x 1 = 1M

RGBA PVRTC  4Bit : 表示每个像素占用4位 0.5字节 ,内存大小 1024 x 1024 x 0.5 = 0.5M

RGBA ASTC  4 x4  : 表示每个像素占用8位 1字节 ,内存大小 1024 x 1024 x 1 = 1M

显然占用内存越小的贴图,加载速度肯定就越快,打开界面无疑也就越快。不过ETC2和ASTC虽然对半透明效果支持的很好,但是它对贴图的尺寸有一些限制。ETC1、ETC2、ASTC 4x4 要求图片宽与高可以不相等但是必须被4整除,例如 512 x 1024 , 4 x 16 。

IOS的PVRTC 压缩格式要求图片的宽和高必须相等 并且必须是2的整数次幂,例如 512 x 512 ,如果是512 x 1024 那么就无法压缩了。

另外ETC2 和 ASTC 对硬件也有一些限制,ETC2只支持OpenGL ES 3.0以上的Android 手机 ( 大概2013年以后的手机都支持 )ASTC只支持苹果A8以后的设备,iphone6及以上的手机。

正确的在Unity 中设置压缩贴图,如图1-1所示 。Compression 选择压缩格式 ,Use Crunch Compression 表示 是否开启二次 Crunch 压缩 ,开启 它会自动对Android 和IOS平台 自动选择压缩格式。

                         图 1 - 1

如图1-2,Android 平台被自动选择RGBA Crunched ETC2压缩格式 , 因为这张图是带透明通道的,如果没有透明通道 Unity会自动设置成RGB Crunched ETC 。

图 1 - 2

如图1-3,IOS平台会自动选择了RGBA Compressed PVRTC 4 Bits,PVRTC压缩的效果是比较差的,尤其是有透明通道的UI几乎是无法接受的。

     

                        图 1 - 3

自动设置的压缩格式有时可能无法灵活的满足需求,最好可以在自动设置后的基础上又可以灵活的修改。图1-4,勾选Override for IOS 后(任何平台都可以覆盖它的设置),Format处 选择一个需要的贴图压缩格式即可。

    

                    图 1 - 4

都用手设置太费劲了,我们可以通过自动化的方式批量设置每个贴图的压缩格式。如下代码所示:

using UnityEditor;

/// <summary>
/// 贴图导入自动设置正确的压缩格式
/// </summary>
public class TextureImport : AssetPostprocessor
{
void OnpreprocessTexture()
{
//判断贴图导出的路径,设置正确的压缩格式
if (assetPath.Contains("Assets"))
{
TextureImporter textureImporter = AssetImporter.GetAtPath(assetPath) as TextureImporter;
textureImporter.textureType = TextureImporterType.Sprite;//设置贴图的格式为精灵
textureImporter.mipmapEnabled = false;//mipmap关闭 //设置IOS平台的压缩格式
TextureImporterPlatformSettings settings = new TextureImporterPlatformSettings();
settings.overridden = true;
settings.name = "iPhone";
settings.format = TextureImporterFormat.ASTC_RGBA_4x4;
textureImporter.SetPlatformTextureSettings(settings);
}
}
}

  

unity优化 — UGUI纹理格式的选择的更多相关文章

  1. Unity优化之纹理集

    发现了一个比较好用的插件:ProDrawCallOptimizer. 它是用来合并纹理和材质的,而且用起来非常简便. 操作方法: 1.将包拖入Unity5中:ps:由于版本问题,直接双击包时导入不了 ...

  2. unity优化建议

    使用Profiler工具分析内存占用情况 System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用.不同平台和不同硬件得到的值会不一样,可 ...

  3. [Unity优化] Unity CPU性能优化

    前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...

  4. 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分

    原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...

  5. Cocos2d-x优化中纹理优化

    转自 http://blog.csdn.net/tonny_guan/article/details/41016241 Cocos2d-x优化中纹理优化 1.纹理像素格式纹理优化工作的另一重要的指标是 ...

  6. 【Unity优化】构建一个拒绝GC的List

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 上篇文章<[Unity优化]Unity中究竟能不能使用foreach?> ...

  7. Unity GUI(uGUI)使用心得与性能总结

    Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...

  8. [转载]unity优化1

    官方优化文档--优化图像性能http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html Unity3 ...

  9. (转)Unity优化之减少Drawcall

    转载:http://www.jianshu.com/p/061e67308e5f Unity GUI(uGUI)使用心得与性能总结 背景和目的 小哈接触Unity3D也有一段时间了,项目组在UI解决方 ...

随机推荐

  1. bootstrap栅格布局-v客学院知识分享

    今天主要跟大家讲解下bootstrap的栅格布局,以及使用过程中应该注意的问题 首先我们要使用bootstrp的栅格布局就必须使用HTML正确的基本结构 如下图: 必须给要使用栅格布局的盒子定义cla ...

  2. Jmeter任在运行,线程数上不去

    问题 jmeter在运行,但是线程数上不去(本来模型设计了100个总线程,但运行时线程只能上到5,根据图上观察总共也只能运行5个线程) 之前更新了random csv插件 解决办法 查看jmeter. ...

  3. Laravel使用artisan快速实现表单的登陆注册

    1. 开发环境 macOS Mojave 10.14.6 XAMPP 5.6.38 Laravel 5.2 2. 在终端,先进入到项目根目录并执行执行命令 php artisan make:auth ...

  4. 【C#】C#中使用GDAL3(一):Windows下超详细编译C#版GDAL3.3.0(VS2015+.NET 4+32位/64位)

    转载请注明原文地址:https://www.cnblogs.com/litou/p/15004877.html 目录 一.介绍 二.编译准备 三.编译SQLite 四.编译LibTiff 五.编译PR ...

  5. ASM入网小助手卸载

    目录 ASM小助手卸载 写在前的 卸载 解除U盘禁用 写在后的 ASM小助手卸载 写在前的 有些公司内网的上网认证是用的ASM小助手,不过有时候用自己电脑接入公司内网可能会主动下载到ASM入网小助手的 ...

  6. 用好WinSCP,无惧Linux命令

    很多人惧怕Linux系统的命令操作模式.实际上对于普通用户来说用到命令的概率非常小. 我们在实践过程中发现管理Linux系统,最多使用如下两个工具: WinSCP(必用):可视化界面工具,实现文件管理 ...

  7. JAVAWEB - Servlet原理及其使用>从零开始学JAVA系列

    目录 Servlet原理及其使用 什么是Servlet Servlet的使用 编写一个Servlet,使用继承HttpServlet的方式 配置web.xml 很简单的几个JSP文件 小提示,如果继承 ...

  8. 关于document.write()方法重绘页面问题

    学习的时候,document.write()被告知是用来将内容写进页面里面,同时也被告知document.write()方法会重绘页面,但是关于什么时候会重绘,什么时候不会重绘页面没有太多解释. 首先 ...

  9. ECDSA高性能硬件实现——算法详解与模块划分

    ECDSA全称椭圆曲线数字签名算法,它是基于素数域的椭圆曲线对信息进行加签与验签.其核心在于对信息的加签,及对加签的信息进行验签,那么下面介绍该算法流程. 假设Alice希望对消息m进行签名,并将消息 ...

  10. 如何区别php,jsp,asp,aspx随笔

    PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面.它支持目前绝大多数数据库.还有一点, ...