0x00 前言

在Unity 2018.4.6之前的版本,有一个和SpriteAtlas打AB包有关的常见问题。即当给Sprite Atlas打AB包时,Sprite Atlas Texture可能会被重复打包。你可以在这里查看这个issue。

https://issuetracker.unity3d.com/issues/android-same-atlas-assets-are-being-included-in-asset-bundle-multiple-times-when-bundle-is-built​issuetracker.unity3d.com

本文就来讨论一下如何解决这个问题。

0x01 The Issue

首先,我会演示一下这个issue。如下图所示,有4个sprite,分别为Icon1, Icon2, Icon3 以及 SF Window(来自Unity Samples: UI)。将它们存放到一个叫 new sprite atlas 的新Sprite Atlas中。同时有一个uGUI的Panel使用了其中的一些Sprite来渲染UI元素。

之后使用AssetBundles-Browser分别对UI Canvas和Sprite Atlas打包。

现在,我们可以继续使用另一个和Assetbundle相关的很赞的工具:

 

https://github.com/faelenor/asset-bundle- *** yzer

来对刚刚打包的Assetbundle的内容进行分析。顺便说一下,这个工具是由一位Developer Relations Engineer 开发的,如果有反馈可以到他的工程仓库提交issue。并且这个工具需要Python2.7来执行,同时由于它的结果会保存到数据库中,因此更好有一个DB工具例如DB Browser for SQLite来查询数据库。

python  *** yzer.py /Applications/Unity/Unity.app/Contents/Tools ~/projects/MyGame/AssetBundles

Ok,现在我们来看一下我们得到的数据。主表叫做“objects”,每一行数据都来自Assetbundle中的每一个asset。我们可以通过“object_view”视图来查看其内容。

如上图所示,canvas和new sprite atlas 这2个Assetbundle都包含了同一个资源——spriteasset texture。我们可以在Editor中找到这张texture。

Editor 中的预览

0x02 The Solution

那么现在我们要如何解决这个问题呢?这个问题其实是由于所谓的“SpriteAtlas dependencies”所导致的。也就是SpriteAtlas 依赖问题。在SpriteAtlas的inspector编辑器上有一个叫做“Include in Build”的选项。这个选项开启时,会建立具体的sprite和SpriteAtlas的依赖关系,也就是说SpriteAtlas资源会随着具体的sprite走,就像Unity中其他asset之间产生依赖那样。

相反,如果不勾选该选项,sprite会解除它和SpriteAtlas的依赖关系。因此,SpriteAtlas也就不会自动添加到sprite所在的ab中。之后或在运行时,就可以使用所谓的“LateBinding”来加载和绑定对应的sprite了。

https://docs.unity3d.com/Manual/LateBinding.html​docs.unity3d.com

具体如何做呢?首先不勾选“Include in Build”选项,之后再在C#脚本中注册SpriteAtlasManager.atlasRequested 的回调。在这个回调中加载对应的sprite。

https://docs.unity3d.com/ScriptReference/U2D.SpriteAtlasManager-atlasRequested.html​docs.unity3d.com

    void OnEnable()
    {
        SpriteAtlasManager.atlasRequested += RequestAtlas;
    }

    void OnDisable()
    {
        SpriteAtlasManager.atlasRequested -= RequestAtlas;
    }

    void RequestAtlas(string tag, System.Action<SpriteAtlas> callback)
    {
        var ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/new sprite atlas");
        var sa = ab.LoadAsset<SpriteAtlas>(tag);
        callback(sa);
    }

现在,再用AssetBundle Analyzer这个工具来查看一下这次AssetBundle中的数据吧。可以看到此时只有一个spriteatlas的texture打包进了ab中。

ok,还记得本文一开始时说过的吗?是的,这是一个Unity2018.4.6之前的issue。在Unity 2018.4.6中,Unity已经修复了这个问题。

,

Sunbet 申博

Sunbet 申博www.aLizhiye.com自1992年和阿里纸业合作以来,在资金实力、技术体系、贴心服务实现了质的飞跃。阿里纸业作为Sunbet亚洲独家 *** ,为官网下所有会员开户、 *** 提供买分卖分等业务。

USDT官网接口声明:该文看法仅代表作者自己,与本平台无关。转载请注明:嘉兴新闻综合频道:解决Sprite Atlas打包Asset bundles时重复打包的问题
发布评论

分享到:

用usdt充值(www.caibao.it):余生请多指教1月会播出吗 余生请多指教定档什么时候
9 条回复
  1. AllbetGaming手机版下载
    AllbetGaming手机版下载
    (2020-12-13 00:03:22) 1#

    皇冠注册平台get到好看的点了

    1. 皇冠即时比分
      皇冠即时比分
      (2020-12-14 07:09:22)     

        去年圣诞节北美上映的影戏《小妇人》改编自经典同名原著,讲述马奇家四姐妹的恋爱、亲情和发展故事。甜茶饰演的劳里与她们交往甚密,还和二姐乔、小妹艾米上演三角虐恋。劳里虽是富家子弟,但和马奇家女孩们逐渐相知的历程,也正是他发展的最先。劳里和乔就像一对镜像,性格上互为映照,片中两人交换衣服穿这一有趣细节就是明证。而劳里和艾米的情绪则像一瓶陈酿琼浆,需时间的发酵才气散发出原本的香醇。男孩劳里对乔的爱是青春时一见钟情的炙热,对艾米的爱是成年人固有的深沉和恒久。恋爱让劳里变得成熟,找到自我。从这个意义上,聚焦女性的《小妇人》也同时是一部男性发展的影戏。有趣

    2. USDT无需实名
      USDT无需实名
      (2020-12-20 00:00:06)     

      诚信在线你是当代马良吗

    3. allbet登陆官网
      allbet登陆官网
      (2021-01-04 02:23:17)     

      《大江大河2》自从去年年底开播后,引发话题一直,以9.2分的高分成为2020年度豆瓣最高分剧之一。剧中,王凯饰演的男主角宋运辉戏份依然吸睛,不少观众示意,宋运辉身上那种不懈拼搏的时代韧劲看得人热血沸腾。不错,看了挺久

  2. 电银付APP安装教程
    电银付APP安装教程
    (2020-12-28 00:20:13) 2#

    电银付使用教程(dianyinzhifu.com)是官方网上推广平台。在线自动销售电银付激活码、电银付POS机。提供电银付安装教程、电银付使用教程、电银付APP使用教程、电银付APP安装教程、电银付APP下载等技术支持。面对全国推广电银付加盟、电银付大盟主、电银付小盟主业务。心情阳光明媚啊

    1. 环球UG
      环球UG
      (2020-12-28 17:40:45)     

      01 通讯人工智能生长现状省心的剧情

  3. 以太坊开奖网
    以太坊开奖网
    (2021-01-05 00:02:53) 3#


    建议用心读

  4. 电银付加盟
    电银付加盟
    (2021-02-04 00:10:11) 4#

    欧博app下载www.allbetgame.us欢迎进入欧博app下载网站,欧博app下载网站是欧博官方网站。欧博app下载网站开放欧博注册、欧博代理、欧博电脑客户端、欧博app下载等业务。本站老粉前来围观

  5. Usappledeveloperaccountsforsale
    Usappledeveloperaccountsforsale
    (2021-02-14 00:01:08) 5#

    USDT支付菜包钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台。免费提供Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜包Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。我轻轻地来了

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。