Unity 实现3D物体遮挡血条
前言:在游戏开发中,我们经常会遇到UI和3D物体的层级遮挡问题,最常见的比如血条跟随敌人的时候,多个敌人的血条会遮挡住玩家或者3D物体,去网上查了一下也没有很好的解决方案,自己尝试了一下,发现还是很简单的
UI血条的制作
利用Unity自带的UI组件Scrollbar
可以简单的做一个血条的预制体,如下图:
简单写一个血条跟随的代码,可以在Update
调用,让其跟随我的角色
public void HPFlow()
{
//坐标转换,这里是通过anchoredPosition给UI赋的位置
hpBar.GetComponent<RectTransform>().anchoredPosition = Camera.main.WorldToScreenPoint(transform.position + Vector3.up);
}
好了,现在就会遇到下面的问题:
可以看到血条将玩家的模型给遮挡住了,在大部分视角固定的情况下是没有问题的,但是难免会有视角移动的需求,这里就要考虑血条遮挡带来的问题了
设置HpLayer解决问题
解决方案很简单,我们知道Canvas
画布的渲染模式分为Screen Space - Overlay
,Screen Space - Camera
和World Space
详细的Canvas
讲解推荐:https://blog.csdn.net/weixin_45375968/article/details/124295976
这里我们将血条单独拿出来,放到一个Canvas下面,做一个血条的层级(HpLayer),并将这个Canvas
调成Screen Space - Camera
模式,剩余的UI功能我们可以直接放到另一个Canvas
下面(这个Canvas
的模式随意),避免3D物体遮挡到其他UI,这样就得到了以下的效果: