天天看點

# Unity技術之UGUI-SpriteAtlasImage元件Unity技術之UGUI-SpriteAtlasImage元件簡介聲明SpriteAtlasImage元件參考資源

Unity技術之UGUI-SpriteAtlasImage元件

簡介

在使用UGUI進行開發時,經常會遇到需要根據狀态切換Sprite的需求,使用Image元件可以通過指定Sprite來解決,但是往往項目中資源加載會采用AssetBundle或者異步資源加載的方式,這就要求在使用Image時需要處理Sprite的加載問題。

本文中将通過繼承Image元件實作一個新的元件SpriteAtlasImage,可以通過Sprite的名稱就可以切換Sprite。

聲明

本文中的内容屬于個人總結整理而來,個人水準有限,對于部分細節難免有了解錯誤及遺漏之處,如果您在閱讀過程中有所發現,希望您能指正,同時文章中的部分内容也參考了其它大神的文章,如果文章中的内容侵犯了您的權益,表示非常歉意,請您指出,我将盡快修改。

如果您進行轉載,請标明出處。

Unity技術之UGUI-SpriteAtlasImage元件(http://www.liyubin.com/articles/2019/08/21/1566355202073.html)

SpriteAtlasImage元件

優勢與劣勢

優勢:

  • 使用SpriteAtlasImage元件可以強調需要顯示的Sprite與Atlas的關系
  • 指定完需要使用的Atlas後,可以非常直覺的選擇需要顯示的Sprite
  • 切換位于相同的Atlas中的Sprite時,可以直接通過名稱進行指定,不用再處理Sprite的加載問題

劣勢:

  • 由于Sprite的顯示是通過所屬的Atlas進行指定的,也就意味着将Sprite更換所屬的Atlas,SpriteAtlasImage需要修改後才能正确顯示

注意:在實際使用時往往會在同一SpriteAtlas切換顯示不同的Sprite,使用此元件通過名稱可以直接指定需要顯示的Sprite,不需要再處理Sprite的加載及釋放問題了。

開啟SpriteAtlas自動打包

在正确使用元件前,需要修改Sprite Packer的打包方式,可以通過菜單

Editor->Project Setting->Editor->Sprite Packer

,将其方式設定為

Always Enable

.

# Unity技術之UGUI-SpriteAtlasImage元件Unity技術之UGUI-SpriteAtlasImage元件簡介聲明SpriteAtlasImage元件參考資源

建立SpriteAtlasImage元件

建立元件的方式主要有以下兩種:

  • 在Hierarchy中右鍵菜單中UI->AtlasImage,即可建立SpriteAtlasImage
  • 建立空的GameObject後添加SpriteAtlasImage元件

SpriteAtlasImage的檢視面闆說明

為了友善操作,對SpriteAtlasImage的檢視面闆中添加了部分屬性,可以友善進行初始設定。

# Unity技術之UGUI-SpriteAtlasImage元件Unity技術之UGUI-SpriteAtlasImage元件簡介聲明SpriteAtlasImage元件參考資源

相比較于Image來說,SpriteAtlasImage元件隐藏了直接設定sprite,同時添加了以下兩個屬性

  • SpriteAtlas

    可以通過點選SpriteAtlas後的下拉清單,從下拉菜單中選擇需要使用的Atlas(此元件可以自動檢索項目中所有的Atlas,如果項目中Atlas過多造成選擇清單過長的話,可以自行進行修改)

    # Unity技術之UGUI-SpriteAtlasImage元件Unity技術之UGUI-SpriteAtlasImage元件簡介聲明SpriteAtlasImage元件參考資源
  • SpriteName

    可以通過點選SpriteName後的下拉清單,進而顯示出Sprite選擇器,選擇需要的Sprite即可。

    # Unity技術之UGUI-SpriteAtlasImage元件Unity技術之UGUI-SpriteAtlasImage元件簡介聲明SpriteAtlasImage元件參考資源

檢視面闆中還有一些其它的屬性,這些屬性與原來的Image的作用是一樣的,此處就不再過多說明

使用代碼切換Sprite

SpriteAtlasImage元件可以很友善的通過Sprite的名稱進行切換

  • 切換的Sprite位于指定的SpriteAtlas的情況
    public SpriteAtlasImage altasImage;
    
    atalsImage.SpriteName = "";
    
               
  • 切換Sprite的同時需要切換SpriteAtlas的情況
    public SpriteAtlasImage atlasImage;
    
    atlasImage.Atlas = Resources.Load<SpriteAtlas>("");
    atlasImage.SpriteName = ""
    
               
    注意:此處對于Atlas的加載采用的Resource的同步方法,如果項目中對于資源加載使用的AB或者其它異步的方式,對應修改為指定的加載方式即可

示例

  • SpriteAtlasImage-GitHub
  • SpriteAtlasImage-Package

參考資源

  • AtlasImage
  • Unity-Technologies/ui