【Unity】為什么拼UI時會用到圖集


寫在前面

  • 在搜“Unity優化”的相關文章時,常會看到"為了省DrawCall,模型上會盡可能用相同材質(其實就是把多個模型貼圖放到一個材質上)"這句話。如果是UI怎么辦呢?UI又不是模型,哪里能體現“相同材質”一說?其實這里就是使用相同圖集。本文旨在演示“使用UI圖集可以降低Batches”(Unity2017版本中,Stats面板中DrawCall換為Batches)。
  • 關於UI圖集,Unity以前是用SpritePacker,在2017版本中升級成SpriteAtlas,同時保留老版SpritePacker。在Unity2019版本中,SpriteAtlas和SpritePacker只能二選一,選擇啟用SpriteAtlas就不會再看到PackingTag。SpriteAtlas和SpritePacker的介紹和區別可以看看這篇博文

測試

  • 演示目的:同一界面下,UI盡可能用同一圖集,可以省Batches。
  • 測試准備:
    • Unity版本: 2017.2.1
    • 操作要求:因為Atlas要在運行時才啟用,以下所有測試都會在運行時用FrameDebug進行比較
    • 使用Sprite:

    • 實現效果:一個按鈕下放了很多圖片

 

【測試一】不使用任何Atlas,所有Sprite都是默認狀態

  •  總效果如下:

總效果

  • 打開FrameDebug,查看渲染過程。它先渲染所有藍瓶。

先渲染所有藍瓶

  • 再渲染所有綠瓶。

再渲染所有綠瓶

  • 最后渲染所有紅瓶。

最后渲染所有紅瓶

  • 為了渲染全部效果,分三步,共花費4個Batches。

【測試二】新建圖集Atlas1和Atlas2,紅瓶圖片放入Atlas1,綠瓶和藍瓶圖片放入Atlas2

  • 這里Atlas不管是放Texture還是Sprite效果都一樣
  • 總效果

總效果

  • 打開FrameDebug,查看渲染過程。先渲染藍瓶和綠瓶。

先渲染藍瓶和綠瓶

  • 最后渲染紅瓶

最后渲染紅瓶

  • 為了渲染全部效果,分兩步,共花費3個Batches。

【測試三】Atlas1刪除紅瓶圖片,將紅綠藍瓶所有圖片放入Atlas2

  • 如果Atlas1下仍保留紅瓶圖片,同時Atlas2也有紅瓶圖片,Unity仍會引用Atlas1中的紅瓶圖片
  • 總效果

總效果

  • 打開FrameDebug查看,為了渲染全部效果,只用一步,共花費2個Batches。

  由此可見,為了省Batches,同一UI上的sprite盡量放在同一Atlas中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM