找到一个不用添加多个Camera在两个UI中叠加UI特效的方法。如下图所示,两个Image之间放了个UI特效。
上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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视图却不能够显示出粒子,这是为什么?