首页 >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. 这名想不出了说:

    momo 如果 特效和UI 是 在mask 下面的话 UI的image 不会显示 这是为何 ,找了好多资料都没解决 麻烦momo帮忙看下

  2. 雪焰说:

    貌似isUI不管为true还是false都不影响最终效果?

  3. 加了canvas之后点击事件捕捉不到,怎么解决?说:

    加了canvas之后点击事件捕捉不到,怎么解决?

  4. べ_夏mò___说:

    momo你的demo项目能发一下么 我按照你的步骤做了 但是不行

  5. 徐阳春说:

    我按照步骤尝试了,但是粒子特效还是依旧显示在上方,并没有在两个界面之间

  6. 说:

    先点个赞,但是这种用法在模拟器里没问题,到手机上面就又给遮挡了

  7. stt说:

    修改renderQueue可以达到不添加摄像机,让特效在两个UI间显示

  8. TJM说:

    雨松大拿,真心求教个问题,加多个Canvas会对性能有多大影响呢?比如像刀塔传奇那样的游戏,都是用Stack弹出式UI,如果每一层用一个Canvas会不会有问题呢?

  9. 村长说:

    请问为什么有两个摄像机?分别是如何使用的?

  10. Alvin说:

    我也試不出來,大大能提供個範例專案嗎?

  11. ZFHM说:

    假设我要用Mesh的特效(想用他做按钮边框流光效果),要他和UI的按钮一样大小,且在按钮上面(假设这个可以解决)。当按钮自适应屏幕后,大小和位置发生了变化。那么Mesh这个GameObject怎么弄呢(把他拉到按钮的孩子里,他只会改位置,不会改大小)。

  12. 思密达说:

    感谢分享,我使用上面的代码,停止运行程序后会报以下的错误,请问该怎么解决呢m_TransformInfo.localAABB.IsValid()UnityEditor.DockArea:OnGUI()m_TransformInfo.worldAABB.IsValid()UnityEditor.DockArea:OnGUI()IsFinite(outDistanceForSort)UnityEditor.DockArea:OnGUI()IsFinite(outDistanceAlongView)UnityEditor.DockArea:OnGUI()

  13. 不能用,麻烦把工程给下吧。

  14. 爱上你说:

    我的粒子系统在UGUI里面根本连显示都不显示。好像是被UGUI挡住了一样。雨凇大大,你试试移动你的粒子系统到其他位置试试?

  15. 爱上你说:

    示例工程可以发一下不?我用的一直有问题

  16. 这个有个非常大的缺陷哎,每个在这物体上的物体都要加个UIDepth吧,而且还要加Canvas

  17. 邵兵说:

    这个方法,上下两个UGUI的图片需要在同一个CANVAS里还是两个sortingOrder不同的两个CANVAS下呢

  18. Canvas的Render Mode得设置成Screen Space – Camera,我刚开始用的第一个无效……

  19. 晨曦说:

    刚刚开始先就UGUI,给MOMO点个赞

留下一个回复

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