【Unity2D游戏】实现实时的正确的遮挡关系

【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。

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

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

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

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

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


       
       
  1. void Update()
  2. {
  3. if (player.position.y > tree.position.y)
  4. {
  5. player.transform.GetComponent<SpriteRenderer>().sortingOrder = 2;
  6. tree.transform.GetComponent<SpriteRenderer>().sortingOrder = 1;
  7. }
  8. if (player.position.y < tree.position.y)
  9. {
  10. player.transform.GetComponent<SpriteRenderer>().sortingOrder = 1;
  11. tree.transform.GetComponent<SpriteRenderer>().sortingOrder = 2;
  12. }
  13. }
  14. //通过“游戏对象.transform.GetComponent<SpriteRenderer>().sortingOrder”可以直接修改层级

</article>
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值