關於UI粒子同屏與渲染順序的調整


總結:關於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組件的UIOrder 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;

}

}

}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM