问题记录

来源:互联网 发布:穿越火线交易软件 编辑:程序博客网 时间:2024/05/21 17:55

1、发现按钮不能用——原来是图片翻转了180°


2、2D游戏中,使用TextMesh,通过代码TextMesh.GetComponent<Renderer>().sortingOrder = (int) ESortingOrder.DragingItem; 设置渲染顺序

搜索相关资料:

其实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是一样的。这点要特别注意。