Unity的渲染层级(layer),决定了2D游戏的渲染顺序,值越大的层级越后渲染,因渲染层级大的物体会覆盖渲染层级小的物体。在Sprite Renderer中,分为Sorting Layer和Order in Layer,通过这两个属性可以设置物体的渲染层级。
然而在2D游戏中,常常会有角色一会儿跑到物体前,一会儿跑到物体后面的情况,如下图。
如果只设置物体的Layer,无法实现正确的遮挡关系,会产生这种情况:
这里介绍一种引擎自带方法,通过在unity中设置自定义轴向控制精灵的渲染。
在Edit->Project Settings->Graphics中,找到Camera Settings(摄像机渲染设置),将Transparency Sort Mode(透明度排序模式)设置为Custom Axis,即根据自定义的轴向进行渲染。【透明度排序模式是用来决定sprite精灵的绘制顺序的】
由于2D的遮挡关系常常是由y轴确定的,越往上越会被覆盖,所以将Transparency Sort Axis中的y设为1,其余设置为0。
完成上述设置后的效果如下,此时已经有初步的遮挡效果,但可以看出现在比较的是游戏物体中心(Center)的y值,而要比较的其实是物体底部的y值,因此我们要更改物体的轴心。
在物体的SpriteRanderer中找到Sprite Sort Point(精灵渲染顺序点),在默认情况下是物体的中心点(Center),这里需要选择的是轴心点,即物体以此为支点旋转的点Pivot。
之后找到游戏物体对应的图片,将轴心点设置在物体的最底端Bottom或自定义Custom。
之后再根据实际需要,给物体加上碰撞就大功告成啦~
【ps:还有一种通过代码直接修改物体的Layer的方式,如下:】
void Update()
{
if (player.position.y > tree.position.y)
{
player.transform.GetComponent<SpriteRenderer>().sortingOrder = 2;
tree.transform.GetComponent<SpriteRenderer>().sortingOrder = 1;
}
if (player.position.y < tree.position.y)
{
player.transform.GetComponent<SpriteRenderer>().sortingOrder = 1;
tree.transform.GetComponent<SpriteRenderer>().sortingOrder = 2;
}
}
//通过“游戏对象.transform.GetComponent<SpriteRenderer>().sortingOrder”可以直接修改层级
版权声明:本文为B17160410原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。