关于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;

}

}

}

}

 

posted @ 2017-08-08 22:32  萌新小L  阅读(2579)  评论(0编辑  收藏  举报