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