日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity-SpriteAtlas图集

發布時間:2023/12/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity-SpriteAtlas图集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

title: unity-SpriteAtlas圖集
categories: Unity3d
tags: [unity, 圖集]
date: 2022-01-10 14:29:00
comments: false
mathjax: true
toc: true

unity-SpriteAtlas圖集


前篇

  • Sprite Atlas - https://docs.unity3d.com/cn/2018.4/Manual/class-SpriteAtlas.html
  • 自動創建SpriteAtlas并設置圖集資源 - https://www.jianshu.com/p/bdd223184738
  • SpriteAtlas與AssetBundle最佳食用方案 - https://cloud.tencent.com/developer/article/1765934

創建 圖集

  • 創建.

  • 手動創建. 右鍵 -> create -> sprite atlas, 然后拖入需要打圖集的 文件/文件夾

  • 代碼創建

    public static SpriteAtlas CreateAtlas(string output, TextureImporterFormat tif) {SpriteAtlas atlas = new SpriteAtlas();// 設置參數 可根據項目具體情況進行設置SpriteAtlasPackingSettings packSetting = new SpriteAtlasPackingSettings() {blockOffset = 1,enableRotation = false,enableTightPacking = false,padding = 2,};atlas.SetPackingSettings(packSetting);SpriteAtlasTextureSettings textureSetting = new SpriteAtlasTextureSettings() {readable = false,generateMipMaps = false,sRGB = true,filterMode = FilterMode.Bilinear,};atlas.SetTextureSettings(textureSetting);AssetDatabase.CreateAsset(atlas, output);return atlas; }
  • 大概就是這樣設置

    • 網上很說不要勾選 Include In Build, 說勾選了會有冗余的一份散圖打進去, 實際上這個Bug早已經在 Unity2018.4.6 中修復了, 所以我們在使用中放心大膽地勾選 Include In Build 就好了


  • 打成 AssetBundle

    將 xxx.spriteatlas 圖集文件打成 ab 后, 引擎需要根據 每個人自定義加載 方式加載 ab 后, 回調回引擎, 不然會出現圖片是 空白 的情況

    需要添加 SpriteAtlasManager.atlasRequested, 不添加的會會報錯: spriteatlasmanager.atlasrequested wasn't listened to while xxx requested


    添加 atlasRequested

  • 代碼

    using UnityEngine; using UnityEngine.U2D;public class AtlasLoader : MonoBehaviour {void OnEnable() {SpriteAtlasManager.atlasRequested += RequestAtlas;}void OnDisable() {SpriteAtlasManager.atlasRequested -= RequestAtlas;}void RequestAtlas(string tag, System.Action<SpriteAtlas> callback) {// 1. 自定義加載 ab 的邏輯. (這里最好不要用異步加載的方式, 否則會閃現一下空白圖片, 因為此時資源還未被加載出來)string path = string.Format("Assets/Res/SpriteAtlas/{0}.spriteatlas", tag);SpriteAtlas sa = (SpriteAtlas) ResourceMgr.Instance.LoadAsset(path, typeof(SpriteAtlas));// 2. 加載完 SpriteAtlas 回傳給引擎 callback(sa);} }

  • 打包方式

  • 舊方式把 某個 圖片 文件夾打成一個 ab 的還是要的, 原有的資源加載方式都不變.
  • 只是新增了將 xxx.spriteatlas 打成 ab. 然后運行時回調 atlasRequested 加載這個 ab 回傳給 引擎 即可.

  • 資源對比

    新打包方式
  • 圖集 ab

    • cards.assetbundle.manifest 里面記錄了引用的 圖片文件夾 ab

      ... Assets: - Assets/Res/SpriteAtlas/cards.spriteatlas Dependencies: - E:/its/tdmj_itc/patch/temp_patch_root/tdmj/common/resource/assets/res/ui/atlas/cards.assetbundle
  • 圖片文件夾 ab

    • cards.assetbundle.manifest 里面記錄了引用的 圖片資源

      ... Assets: - Assets/Res/UI/Atlas/cards/11.png - Assets/Res/UI/Atlas/cards/15.png Dependencies: []
    • AssetStudio 分析 cards

    • unity profiler 中內存快照

      多出來幾個 xxx.spriteatlas 所在 ab


  • 舊打包方式
  • 圖片文件夾 ab

    • cards.assetbundle.manifest 里面記錄了引用的 圖片資源

      ... Assets: - Assets/Res/UI/Atlas/cards/11.png - Assets/Res/UI/Atlas/cards/15.png Dependencies: []
    • AssetStudio 分析 cards


  • 結論
  • AssetStudio 可以看出, 新的方式的 圖集是打到 xxx.spriteatlas 所在的 ab 中.

  • unity profiler 中內存快照看到多出了

  • 使用新的 SpriteAtlas 圖集方式可以隨時預覽某個圖集


  • 總結

    以上是生活随笔為你收集整理的unity-SpriteAtlas图集的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。