游戏开发中不免要在两个UI元素之间插入一个粒子特效(Partice Sysrtem),使我们的粒子处于两个UI元素中间。
实现方案1
1.通过设置Canvas层级和粒子渲染层级达到效果
如图,粒子夹在ImageA和ImageB中间
这里实现方式有很多种
1.ImageA和ImageB处于两个不同渲染层的Canvas
两个Canvas的RenderMode使用相机模式(Screen Space-Camera)
A的Canvas渲染层级为10,B为0
然后粒子特效的RenderOrder为0-10之间即能显示在两UI之间
2.同样的在一个使用(Screen Space-Camera模式下)的Canvas下,粒子的渲染层与Canvas的层级相同,则可以通过Z轴的距离来调整渲染先后顺序
实现方案2
通过代码重写设置Canvas的sortingOrder层级
public class UIDepth : MonoBehaviour
{
public int order;
public bool isUI = true;
private void Start()
{
if (isUI)
{
Canvas canvas = GetComponent<Canvas>();
if (canvas == null)
{
canvas = gameObject.AddComponent<Canvas>();
canvas.overrideSorting = true;
canvas.sortingOrder = order;
}
}
else
{
Renderer[] renders = GetComponentsInChildren<Renderer>();
foreach (Renderer render in renders)
{
render.sortingOrder = order;
}
}
}
}
在同一Canvas下,ImageA,B同时挂上UIDepth脚本,设置order一个为0,一个为10,粒子特效的渲染层为0-10之间
运行即能看到效果
还可以通过Shader修改渲染顺序