Unity 实现3D物体遮挡血条

前言:在游戏开发中,我们经常会遇到UI和3D物体的层级遮挡问题,最常见的比如血条跟随敌人的时候,多个敌人的血条会遮挡住玩家或者3D物体,去网上查了一下也没有很好的解决方案,自己尝试了一下,发现还是很简单的

UI血条的制作

利用Unity自带的UI组件Scrollbar可以简单的做一个血条的预制体,如下图:

Unity实现3D物体遮挡血条-LMLPHP

简单写一个血条跟随的代码,可以在Update调用,让其跟随我的角色

public void HPFlow()
{
    //坐标转换,这里是通过anchoredPosition给UI赋的位置
    hpBar.GetComponent<RectTransform>().anchoredPosition = Camera.main.WorldToScreenPoint(transform.position + Vector3.up);
}

好了,现在就会遇到下面的问题:

Unity实现3D物体遮挡血条-LMLPHP

可以看到血条将玩家的模型给遮挡住了,在大部分视角固定的情况下是没有问题的,但是难免会有视角移动的需求,这里就要考虑血条遮挡带来的问题了

设置HpLayer解决问题

解决方案很简单,我们知道Canvas画布的渲染模式分为Screen Space - OverlayScreen Space - CameraWorld Space
详细的Canvas讲解推荐:https://blog.csdn.net/weixin_45375968/article/details/124295976
这里我们将血条单独拿出来,放到一个Canvas下面,做一个血条的层级(HpLayer),并将这个Canvas调成Screen Space - Camera模式,剩余的UI功能我们可以直接放到另一个Canvas下面(这个Canvas的模式随意),避免3D物体遮挡到其他UI,这样就得到了以下的效果:

Unity实现3D物体遮挡血条-LMLPHP

03-24 16:41