【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)

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。

【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)_第1张图片

【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)_第2张图片

完成上述设置后的效果如下,此时已经有初步的遮挡效果,但可以看出现在比较的是游戏物体中心(Center)的y值,而要比较的其实是物体底部的y值,因此我们要更改物体的轴心。

 在物体的SpriteRanderer中找到Sprite Sort Point(精灵渲染顺序点),在默认情况下是物体的中心点(Center),这里需要选择的是轴心点,即物体以此为支点旋转的点Pivot。

【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)_第3张图片

 之后找到游戏物体对应的图片,将轴心点设置在物体的最底端Bottom或自定义Custom。

【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)_第4张图片

【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)_第5张图片【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)_第6张图片

之后再根据实际需要,给物体加上碰撞就大功告成啦~

【ps:还有一种通过代码直接修改物体的Layer的方式,如下:】

void Update()
{
    if (player.position.y > tree.position.y)
    {
        player.transform.GetComponent().sortingOrder = 2;
        tree.transform.GetComponent().sortingOrder = 1;
    }
    if (player.position.y < tree.position.y)
    {
        player.transform.GetComponent().sortingOrder = 1;
        tree.transform.GetComponent().sortingOrder = 2;
    }
}
//通过“游戏对象.transform.GetComponent().sortingOrder”可以直接修改层级

你可能感兴趣的:(unity,游戏引擎,2d游戏)