现在手头的项目是用NGUI实现的2D游戏,其中穿插各种模型和特效...总之,各种蛋疼。问了好多人,也没解决面片特效层级调整的问题,颇为感概:不是unity不人性,只是项目非主流...
但是当问题解决后,才发现,unity也挺人性的,只是自己知道的还太少。
整理一下unity和NGUI的各种层级关系。在NGUI下,有这么几层(按优先级从高到低排列):
1,摄像机的深度 Camera.Depth
1.5,SortLayer
2,SortOrder,这个属性可以在NGUIPanel和粒子的Render里调整,默认都是0
3,RenderQueue属性,这个在Inspector面板中只能在UIPanel中显示调整(从3000开始,设置以后“4”和“5”的
Depth就会失效,即便这个属性值一致),并且每个Material也可以通过代码设置这个值
4,UIPanel的Depth
5,UIWidget的Depth
6,空间坐标,在以上属性一致的情况下,根据与摄像机的位置渲染
补充:以上关系都是在shader的ZWrite属性设置为OFF的前提下,如果是ON,就呵呵了
之前一直比较蛋疼的是,不知道怎么设置用面片模型制作的特效的层级。
void ChangeQueue(int layer)
{
if (layer >= 3300) layer = 3300;
gameObject.GetComponent<Renderer>().sharedMaterial.renderQueue = layer;
}
用上面这个去设置,一切OK!
这种方式同样对于粒子有效。通过这种方式,就不用调整SortOrder
欢迎转载。转载请注明:
Hello光头原创
如有建议或意见,欢迎留言。
也欢迎大家加我qq,一起学习进步:1009570451