總結:關於UI和粒子同屏技術,很重要的就是兩個東西:1.相機camera。2.畫布canvas。
(1)關於相機camera:如果只是制作2D游戲(只渲染UI)或是正交3D游戲,那么只需要有一個UI攝像機就夠了。攝像機要調到UI層(防止干擾其他層),投影模式調為正交投影,遮罩選擇UI(這樣就不會渲染其他層的物體了)。
(2)關於畫布canvas:渲染模式要調成camera模式(只有這種模式才可以為畫布添加UICamera),把之前設置好的UICamera放到畫布上,這個相機就只用來渲染UI層了。
(3)添加一個粒子效果ParticalSystem:添加粒子系統后,把粒子系統放到canvas下(不放也行,就是得自己找位置,有點麻煩),調整layer為UI層(這樣才會被渲染出來)。
(4)調整粒子與UI的渲染順序:
通過改變Order in Layer的數值來改變渲染順序(數值越小的越先渲染(小的會被遮罩))。UI物體如果沒有Order in Layer屬性,需要添加canvas組件后設置該屬性。粒子系統ParticalSystem的Order in Layer屬性在renderer標簽下。
注意:修改畫布canvas上的canvas組件中Order in Layer屬性對應的會修改下面所有沒有canvas組件的UI的Order in Layer屬性。這時Canvas的渲染順序還是從上到下進行逐個渲染,如果UI添加了canvas組件后並修改了Order in Layer屬性,那么UI的渲染順序就會按照Order in Layer的層級進行渲染。
(5)最終效果:上面的圖片被粒子遮罩,下面的圖片遮罩了粒子
插播一點sprite renderer的消息(Sprite 2D)不需要放置畫布就可以讓2D物體出現在3D世界內。(以一個紙片的形式。。所以很明顯,如果轉圈的話就會露餡,只適合用來做2D游戲。)
Sprite 2D 不需要canvas。只要把相機調成正交視圖(orthographic),然后直接放置空物體后添加sprite renderer組件后把圖片貼上去就可以了。然后地下還可以調整渲染順序。
雨凇momo之通過代碼添加canvas組件或獲取粒子order,進行排序與分層渲染(使用這個腳本就不用給UI添加canvas組件了,這個腳本會自動為UI添加該組件並設置層級)。而且這個組件只加給父物體就可以,設置整個物體的層級
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 |
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; } } } } |