首页 >Unity3D频道 >【UGUI研究院】 > UGUI研究院之不添加摄像机解决UI与UI特效叠层问题(九)
2015
03-18

UGUI研究院之不添加摄像机解决UI与UI特效叠层问题(九)

找到一个不用添加多个Camera在两个UI中叠加UI特效的方法。如下图所示,两个Image之间放了个UI特效。

Snip20150318_2

上代码:

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

Snip20150318_4欢迎大家提意见。互相讨论互相学习UGUI~,嘿嘿。

这段代码必须运行了才能看到效果。

补充一下 Unity5.3的粒子特效里已经有sortingOrder属性了,也就是说以后就不需要加Canvas组件了。如下图所示

 

QQ20160514183903

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

UGUI研究院之不添加摄像机解决UI与UI特效叠层问题(九)》有 92 条评论

  1. 高佳说:

    大大,我测试时发现,三个物体我都添加脚本了,也设置好了,只是运行时,特效会渲染在最后面,等待两秒钟后,会自动跳到两个图片中间渲染,也就是运行时不能直接就得到想要的效果

  2. Tyrael说:

    雨松大大,请教一下,按照你的方法,我在Scene视图中能够实现效果,但是在Game视图却不能够显示出粒子,这是为什么?

留下一个回复

你的email不会被公开。 必填项已用 * 标注。