ET & Addressables SpriteAtlas 图集解决方案

起因

最近想优化一下UI Batches,发现了Unity 的SpriteAtlas组件(后面简称SA),但是用的时候发现了诸多问题,所以开个博客记录一下

如何切换SA

Sprite Packer Mode 切换成Always Enabled

如何创建SA

Project 面板中,Create SA

SA组件介绍

请不要勾选Include in Build

按照文档中的描述,勾选了这个,就不需要自己增加一个Late Binding脚本,但是仍然会弹出警告,并且会出现白图现象

请不要勾选Tight Packing

SA在有A通道图片时,图片会发生严重的错位,不推荐勾选

Addressable Importer

如果项目中使用了这个插件,可以增加一个SA的配置,不知道Addressable Importer插件的可以翻看我前面的Blog

Late Binding

做到这里的时候,我热更新到手机上时发现测试用的SA的所有Icon都变成了白图,并报出了下面的警告

⚠️ SpriteAtlasManager.atlasRequested wasn't listened to while AUIHome requested.

解决方案

创建一个SALateBinding.cs的脚本,并丢到ET Global上

public class SALateBinding: MonoBehaviour {

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

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

    private async void RequestAtlas(string tag, Action<SpriteAtlas> callback) {
        SpriteAtlas sa = await Addressables.LoadAssetAsync<SpriteAtlas>(tag).Task;
        callback(sa);
    }
}

资源卸载

上面只有绑定,但是图集资源却一直没有从内存中卸载,所以我们还要增加ET对SA卸载的支持

为了方便做进 Hotfix 中,我们在 ETModelUIConfig.cs 里面增加UI对应的SAName

public class UIConfig: MonoBehaviour {
    public string LayerName;
    public string SAName;
    public bool   DestoryOnHide;
}

最后在UI声明周期结束时,用 Addressable.Release(SAName) 卸载对应资源

作者:L
本文采用 CC BY-NC-SA 4.0 协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇