Unity教程之-Unity3d渲染顺序统一解决方案(主要是2d游戏)

 

其实3D物体基本不用考虑渲染顺序问题,但是在纯2D以及3D和2D混杂的情况下就要考虑这个问题了。比如2D游戏当中的游戏场景,UI,UI特效,场景内特效。那么,使用一个统一的渲染顺序显然是有必要的。

事实上这个问题unity3d自身已经提供了解决方案。

http://docs.unity3d.com/ScriptReference/Renderer.html

我们可以看到,所有的Renderer组件都具备两个成员。

sortingLayerName Name of the Renderer’s sorting layer.
sortingOrder Renderer’s order within a sorting layer.

在Unity3D当中,最优先的渲染顺序是Camera的Depth。然后才是使用sortlayerName和sortingOrder。事实上还可以使用shader来控制RenderQueque,不过现在我们可以不需要使用如此复杂的方式。

我们可以对所有的2D物体(以及需要统一渲染顺序的3D物体,以及粒子特效)使用同一个depth的相机(同一个相机也行)来进行渲染。然后对这些物体的sortLayer和sortingOrder进行设置。大部分的物件,包括粒子在内,都可以直接在inspector上设置这两个属性(unity5里面增加了设置)。

如果无法设置,请在脚本当中通过GetComponent<Renderer>()这个方法来进行设值。当然,直接通过脚本来设置也是可以的。

这里面要特别说明的是,新uGUI系统的canvas,整个canvas下所有的UI都属于同一个渲染顺序,所以它们的sortlayer和sortingOrder是一样的。这点要特别注意。好了,本篇unity3d教程到此结束,下篇我们再会!