今天在UGUI上显示粒子特效的时候遇到的一些问题,Mark一下。原理:修改特效中每个ParticleSystem的Layer为UI,而且把ParticleSystemRenderer.sortingOrder值设置为大于Canvas中的sortingOrder值。其实就是控制两个组件html
的Render Order。this
1).首先建立一个Canvas,RenderMode = Screen Space-Camera ,而后建立一个UICamera ,参数设置为:Clear Flags: Depth Only; Culling Mask : UI;spa
而后把这个UICamera设置为Canvas的RenderCamera。以下图:3d
2). 添加一个粒子特效预设Boom到Image1下面,咱们须要在Image1上显示粒子效果。而后咱们须要对这个Boom特效的中的粒子系统设置对应的sortingOrder为1code
添加一个脚本UIEffectPlayer.cs到这个go上,它会递归遍历这个预设上的全部子对象,分别设置它们的sortingOrder和所属Layer。代码以下:orm
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class UIEffectPlayer : MonoBehaviour { // Use this for initialization void Awake() { if (gameObject.GetComponent<RectTransform>() == null) { RectTransform rt = gameObject.AddComponent<RectTransform>(); rt.anchorMin = Vector3.zero; rt.anchorMax = Vector3.zero; rt.anchoredPosition = new Vector2(130, 160); } //设置全部的粒子特效的Layer为UI,把粒子系统的Render的sortingOrder设置为大于Canvas的OrderInLayer //Canvas的Order In Layer默认为0,因此这里默认设置为1 SetLayerAndSortOrder(gameObject.transform,5,1); } void SetLayerAndSortOrder(Transform parent,int layer,int sortOrder) { parent.gameObject.layer = layer; ParticleSystem ps = parent.GetComponent<ParticleSystem>(); if (ps != null) { ParticleSystemRenderer psRender = gameObject.GetComponent<ParticleSystemRenderer>(); if(psRender != null) { psRender.sortingOrder = sortOrder; } } foreach(Transform child in parent) { SetLayerAndSortOrder(child, layer,sortOrder); } } void Start () { } // Update is called once per frame void Update () { } }
3).运行游戏便可看见特效显示在Image1上面。htm
很容易想到的办法是新建立一个Canvas,(这个Canvas相似NGUI中的UIPanel)将其sortingOrder的值设置为大于粒子系统的sortingOrder的值,而后将Image2放到Canvas2下面进行绘制。对象
效果以下:blog
能够看到Boom特效显示在Image1和Image2之间了,Image2显示为半透明。好像还有别的办法不用新建一个Canvas,递归
后续试试再写进去。欢迎留言指教。
参考:https://docs.unity3d.com/ScriptReference/Renderer-sortingOrder.html
https://docs.unity3d.com/ScriptReference/Canvas.html
https://docs.unity3d.com/ScriptReference/ParticleSystem.html
https://answers.unity.com/questions/306777/how-to-access-particlesystemrenderer.html
----码字不易,欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/beeasy/