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
.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI3pVdC5GT5ZlMhpmRHNGbShVY5J0MjRXVyoFaxcVY6Z0RiBjRXxEcWNjWxkzUhFDZXRmdrhEZwVzVkZXTYplaKhFZ25EWalXOTJmdO1GT1xWbZFDbYF2c1kHZzQ2MMZ3bENGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
建立SpriteAtlasImage元件
建立元件的方式主要有以下兩種:
- 在Hierarchy中右鍵菜單中UI->AtlasImage,即可建立SpriteAtlasImage
- 建立空的GameObject後添加SpriteAtlasImage元件
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的情況
注意:此處對于Atlas的加載采用的Resource的同步方法,如果項目中對于資源加載使用的AB或者其它異步的方式,對應修改為指定的加載方式即可public SpriteAtlasImage atlasImage; atlasImage.Atlas = Resources.Load<SpriteAtlas>(""); atlasImage.SpriteName = ""
示例
- SpriteAtlasImage-GitHub
- SpriteAtlasImage-Package
參考資源
- AtlasImage
- Unity-Technologies/ui