UI与特效的层级

在制作UI的过程中经常会遇到UI上面放特效的情况,这涉及到UI与特效的重叠关系。
当Canvas的RenderMode为ScreenSpace-Overlay的时候,特效是永远不会覆盖显示在这个Canvas下的UI的上面的。
当Canvas的RenderMode为ScreenSpace-Camera的时候,其下的UI才能与特效的层级进行调节,此时注意Canvas的属性SortingLayer和 Order in Layer,如下图所示:
[UGUI进阶知识十一]UI与特效

在特效的inspector 面板中,也有叫做Sorting Layer和Order in Layer的属性,如下图所示
[UGUI进阶知识十一]UI与特效
他们之间的排序规则和我这篇文章写的是一样的 UGUI进阶知识[六]影响UI层级显示的因素
所以在这个时候,他们之间可以按照这个规则来进行排序。

关于这个原理的拓展当做界面的时候,界面上的主Canvas是默认被特效盖住的, 一些可见的UI需要覆盖特效则需要为其额外添加一个Canvas。下面顺带提及的一种方法也是可以进行UI图片与特效的层级调节的

UI与特效的遮罩

和UI的遮罩(Mask)一样,通俗的理解就是只有在UI上面的特效能够显示或者只有在UI外部的特效能够显示。
这个效果的实现用到的不是Image而是SpriteRenderer,和MeshRenderer用于渲染3D物体一样,SpriteRenderer是用于渲染2D世界的物体,这和UI又有些不一样,SpriteRenderer有些像Image,只是如果将SpriteRenderer放置在Canvas下面,它的适配性可能不会像Image那样好。
如图所示:
[UGUI进阶知识十一]UI与特效
可以注意到SpriteMask上面也有SortingLayer和Order In Layer,经过测试SpriteMask也符合与特效的层级调节,如果觉得添加Canvas会比较耗性能,可以考虑临时将Image替换成SpriteRenderer,但是可能要考虑替换后的缩放适配。
我们给SpriteRenderer添加一个组件叫做SpriteMask,并且将其Sprite设置成和SpriteRenderer一样的图片,如图所示,
[UGUI进阶知识十一]UI与特效
粒子系统有个Masking属性,可以选中Visible Inside Mask 和 Visble OutSide Mask和No Masking选项,当选择Visible Inside Mask的时候,其会检测场景中存在的SpriteMask,粒子在SpriteMask的屏幕区域内的图像会显示出来,否则就不会显示出来,Outside是同理的,只是不在SpriteMask区域内的才会显示出来。

相关文章:

  • 2021-08-30
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
  • 2021-10-05
  • 2022-12-23
  • 2021-11-22
  • 2021-11-04
猜你喜欢
  • 2021-08-12
  • 2022-12-23
  • 2021-09-06
  • 2021-09-02
  • 2022-01-03
  • 2021-10-23
  • 2021-05-13
相关资源
相似解决方案