Unity学习日志_UGUI下

本文围绕Unity UGUI展开,介绍Draw Call优化中的精灵打包,包括精灵打包器的使用、打包模式及策略,如默认、紧密、紧密可旋转打包策略,还提及自定义打包策略的实现。同时简述Event事件,依赖Canvas上的Graphic RayCaster组件,并介绍了添加Event事件的几种方法。

Unity学习日志_UGUI下

Draw Call优化

精灵打包:

精灵打包原博客链接:https://blog.youkuaiyun.com/ios_song/article/details/52292042

概述:

当美术设计师在制作精灵图像时,会给每个精灵创建一个单独的文件,因为这样方便制作。但是,每个精灵纹理周围都会留有大量空白区域,这些区域不会记录任何精灵数据信息,但依然会消耗各种资源。为了达到最优性能,我们会把多个精灵放在一张图片上,并且紧紧地排列在一起,这张大图我们就叫做图集(Atlas)。Unity 中就提供了一个自动把多个精灵纹理放在一张大图上生成图集(Atlas)的工具——精灵打包器(Sprite Packer)。

精灵打包器:

Unity 会在后台处理精灵图集(Sprite Atlas)纹理的生成和使用,这样,用户就不需要手动操作了。图集(Atlas)会在进入Play模式或Build时有选择得将精灵打包,精灵对象在创建时会从图集(Atlas)中获取到图像。我们需要提前在纹理的导入设置中指定好打包标签(Packing Tag),这样才能进行打包。

精灵打包器(Sprite Packer)在默认情况下有可能是禁用的,但是可以在编辑器设置中打开(Edit -> Project Settings -> Editor)。其中精灵打包的模式(Mode)可以选择禁用(Disabled);也可以选择只在 Build 时启用(Enabled For Builds),此时进入Play模式不会启用,只在打包发布时启用;或者总是启用(Always Enabled),此时在Play模式下也会启用。

我们可以在菜单中打开精灵打包器(Sprite Packer)视图(Window -> Sprite Packer)。在视图左上角有个Pack按钮,点击之后就开始打包,但别忘了提前给精灵的导入设置中设置好打包标签(Packing Tag)。打包之后我们就能够看到多个精灵被打包在一张图集(Atlas)中,紧凑地排列在一起。

在精灵打包器(Sprite Packer)视图的上方的工具条中,可以控制精灵的打包和显示。打包(Pack)按钮用来开始打包,但如果图集(Atlas)没有任何修改,已经是之前打包过了的,就不会有任何反应。重新打包(Repack)按钮只有当我们使用了非默认打包策略时才会可用。显示图集(View Atlas)和后面的页码(Page)菜单让我们选择哪个图集中的那一页显示在精灵打包器(Sprite Packer)视图中。如果某个图集中的精灵太多,超过了最大纹理尺寸,图集可能会被切割成多个页(Page)。页码(Page)菜单后面是打包策略(Packing Policy)菜单,这个后面再说。最右侧的两个滑杆分别用来控制视图的缩放和像素分辨率。在这两个滑杆左侧有一个像彩色条纹的按钮,用来切换显示模式,可以显示彩色或者显示透明度。

打包策略:

精灵打包器(Sprite Packer)通过打包策略(Packing Policy)来决定精灵如何打包进图集(Atlas)中。在精灵打包器(Sprite Packer)视图中提供给我们三种打包策略(Packing Policy):默认打包策略(Default Packer Policy)、紧密打包策略(Tight Packer Policy)和紧密可旋转打包策略(Tight Rotate Enabled Packer Policy)。除此以外,我们还可以自定义打包策略。使用这些策略时,我们在精灵的导入设置中设置的打包标签(Packing Tag)会决定精灵最终被打包进哪个图集(Atlas)中,具有相同打包标签(Packing Tag)的精灵会存放在同一张图集(Atlas)中,并且打包标签(Packing Tag)也会是图集(Atlas)的名称。图集(Atlas)会进一步根据纹理的导入设置进行分页,这样无论用户有如何设置源图像,最终都能够索引的到。具有相同纹理压缩设置的精灵会更可能分到同一个图集中。

1、默认打包策略(Default Packer Policy)默认会使用矩形对精灵进行打包,除非在精灵的打包标签(Packing Tag)中带有[TIGHT](比如,打包标签(Packing Tag)设置为了[TIGHT]Character,此时会进行紧密打包)。

2、紧密打包策略(Tight Packer Policy)默认会使用紧密打包,如果精灵的打包标签(Packing Tag)中带有[RECT](比如,打包标签(Packing Tag)设置为了[RECT]Character)此时会使用矩形进行打包。

3、紧密可旋转打包策略(Tight Rotate Enabled Packer Policy)默认会使用紧密打包,并且允许精灵进行旋转,如果精灵的打包标签(Packing Tag)中带有[RECT](比如,打包标签(Packing Tag)设置为了[RECT]Character)此时会使用矩形进行打包。

自定义打包策略:

一般情况下使用默认打包策略(Default Packer Policy)即可完成我们的大部分需求,但如果需要的话也可以使用自定义的打包策略。想要实现自定义打包,我们需要在一个编辑器脚本类中实现UnityEditor.Sprites.IPackerPolicy接口。这个接口需要以下方法:

1、GetVersion(),返回你的打包策略的版本号。如果策略脚本已被修改,应该更新版本号,并且这一策略会被保存到版本控制。

2、OnGroupAtlases(),需要在这个方法中实现打包的逻辑。需要在打包过程中定义图集,并且从指定的纹理中指定精灵。

默认打包策略(Default Packer Policy)会使用矩形包围盒进行打包,如果我们要使用不同的网格渲染精灵,可以使用自定义的策略,它会使用紧密打包。

重新打包(Repack)按钮只有当我们选择了非默认打包策略时才会可用。

OnGroupAtlases()方法只有在纹理元数据发生变化或者打包策略版本发生变化时才会被调用。

当我们使用的是自定义的打包策略时也可以使用重新打包(Repack)按钮。

如果选择了紧密可旋转打包策略(Tight Rotate Enabled Packer Policy),在打包时精灵可以自动旋转以节省更多空间。

精灵打包旋转(Sprite Packing Rotation)是一个保留类型,为未来 Unity 的功能所准备的。

Event事件简介

EventUI事件依赖于Canvas上的Graphic RayCaster组件。一款游戏中的UI往往需要多个Canvas一起实现,其中部分UI并不需要点击事件,可以选择将这部分Canvas的Graphic RayCaster设置为不可用或者直接删除。

几种添加Event事件的方法:

1. 编译器直接添加

2. AddListener方法

  1. 变量名[RectTransform].事件名.Addlistener()

3. 实现接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值