Deer_GF之SpriteAtlas与AssetBundle应用

Posted AlanDu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Deer_GF之SpriteAtlas与AssetBundle应用相关的知识,希望对你有一定的参考价值。

Deer_GF之SpriteAtlas与AssetBundle应用

最近做出包性能优化,发现框架出包后UI上引用的图片精灵丢失。于是就想对这个Unity UGUI SpriteAtlas一探究竟。
接下来我们开始吧。

目录

一、SpriteAtlas 介绍以及使用

       在Unity中,SpriteAtlas是一种将多个Sprite资源集合在一起创建优化的贴图集合的工具。这个贴图集合可以被游戏引擎用于渲染多个Sprites,从而减少绘制调用的数量和总体性能开销。

       要在Unity中创建一个新的SpriteAtlas,您可以右键单击项目窗口,然后从上下文菜单中选择“Create > Sprite Atlas”。然后,您可以将Sprite资源拖放到SpriteAtlas编辑器窗口中,以将它们添加到Atlas中。

       创建好SpriteAtlas后,您可以在游戏代码中引用它来加载和渲染Sprites。您可以使用Unity提供的SpriteAtlas API来做这些事情,其中包括像GetSprite()这样的函数来从Atlas检索特定的Sprite,以及GetSprites()函数来从Atlas检索所有Sprites。

二、SpriteAtlas 优点

       Unity中使用SpriteAtlas有以下好处:

       1. 减少绘制调用次数:SpriteAtlas将多个Sprite合并成一个贴图集合,这样在渲染时只需要一次绘制调用即可,从而大大减少了绘制调用的数量。

       2. 优化GPU资源:由于SpriteAtlas将多个Sprite合并成一个贴图集合,可以减少GPU对不同材质和纹理的切换和缓存开销,从而提高游戏性能。

       3. 简化Sprite加载流程:使用SpriteAtlas API可以方便地从贴图集合中加载Sprites,而无需为每个Sprite单独加载材质等资源。

       4. 节省内存:由于SpriteAtlas是一个贴图集合,它占用的内存比单独的Sprite要小得多。这对于需要处理大量Sprite的游戏场景非常重要。

       5. 提高游戏性能:由于SpriteAtlas可以减少绘制调用次数、优化GPU资源、简化Sprite加载流程和节省内存,因此可以提高游戏性能,使游戏更顺畅。

       总之,使用SpriteAtlas可以有效地提高游戏性能,特别是在处理大量Sprite的游戏场景中。

三、SpriteAtlas 构建assetbundle

       1、在使用图集情况下需要先在Edit > Project Settings > Editor下Sprite Packer Mode选【Sprite AtlasV1 - Enabled For Builds】 或者 【Sprite AtlasV1 - Enabled For Builds】


       2、把图集里的精灵图元打到assetbundle里。
       3、生成的图集不能打到assetbundle,不能打到assetbundle,不能打到assetbundle!笔者因为一开始对Unity Ugui图集概念了解不清楚,造成了assetbundle出包资源图片不显示问题!

注意: UGUI的图集,无论新旧,在构建AssetBundle的时候,同一个图集内的所有图元都要放在同一个AssetBundle中,否则,如果同一个图集的图元被分散到多个AssetBundle中,那么每一个AssetBundle都会包含一份这个图集的Copy,最终的结果就是包体冗余、内存膨胀和加载耗时等问题。

       4、笔者因为一开始对Unity Ugui图集概念了解不清楚,造成了assetbundle出包资源图片不显示问题!所以做了以下第四部分测试对比。敬请往下看

以上是关于Deer_GF之SpriteAtlas与AssetBundle应用的主要内容,如果未能解决你的问题,请参考以下文章

unity-SpriteAtlas图集

项目开发日志:Build AssetBundle——SpriteAtlas(还是有些疑惑)

UGUI的图集处理方式-SpriteAtlas的前世今生

Android之asset文件夹下文件的使用

xcode工程编译错误之iOS解决CUICatalog: Invalid asset name supplied问题

Swift断言`asset` 与 先决条件`precondition`的使用和思考