天天看点

# 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