今天在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/