找到一个不用添加多个Camera在两个UI中叠加UI特效的方法。如下图所示,两个Image之间放了个UI特效。
上代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class UIDepth : MonoBehaviour {
public int order;
public bool isUI = true;
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;
}
}
}
}
原理就是设置 sortingOrder ,给需要修改order的UI元素挂上UIDepth脚本 。如下图所示,在UI容器中设置order。
注意: UI0 我设置了order =0 (可以不设置,因为默认所有UI的Order都是0)
ParticleSystem 我设置了order =1
UI2 我设置了order =2
所以效果是,UI2 挡住 ParticleSystem 挡住 UI0
这段代码必须运行了才能看到效果。
补充一下 Unity5.3的粒子特效里已经有sortingOrder属性了,也就是说以后就不需要加Canvas组件了。如下图所示
- 本文固定链接: https://www.xuanyusong.com/archives/3435
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!




大大,我测试时发现,三个物体我都添加脚本了,也设置好了,只是运行时,特效会渲染在最后面,等待两秒钟后,会自动跳到两个图片中间渲染,也就是运行时不能直接就得到想要的效果
高佳 ————-LJ?
雨松大大,请教一下,按照你的方法,我在Scene视图中能够实现效果,但是在Game视图却不能够显示出粒子,这是为什么?