方案:
1、
2、
3、
血条总是要跟踪对象的
代码如下:
public RectTransform _game;
Vector3 _position;
Camera _camera;
void Start()
{
_camera=Camera.main;
}
// Update is called once per frame
void Update()
{
_position = _camera.WorldToScreenPoint(transform.position + Vector3.up);
// _position.y= 0;
_game.anchoredPosition3D= _position;
}
调整遮挡只需要调整Canvas的这里即可,根据你的需求调整unity的层级渲染完成遮挡如下图:
原理:
通过不同的层级面板进行不同的渲染,进行层级展示
利用screen space-camera模式,Canvas覆盖整个屏幕空间画布也是填满整个屏幕空间,Canvas 被放置于指定摄像机的前方
在这种,模式下面 UI 并不一定能渲染在 3d 元素之上
利用这种特性完成血条能够被3d物体遮挡
但:
必须在摄像机的远近平面之间才会被渲染
即使摄像机是 Perspective 模式,Canvas 距离摄像机的远近依然不会影响其显示大小
其它3元素可以和 Canvas 产生遮挡关系,距离摄像机更近的元素会遮盖住 Canvas 上面的 UI
摄像机的缩放/平移/旋转,以及 fov 的变化,不会影响 Canvas 显示结果,Canvas
永远是放置在距离摄像机视口一定距离的地方,且与摄像机水平视线垂直
所以用的时候要注意
要根据不同情况采用不同的相机渲染模式
血条在左下角是因为unity采用左手坐标系,它的屏幕转换坐标(0,0)的起始点在整个屏幕的左下角,人物转到屏幕,人物坐标可是从(0,0,0)算的
视口坐标与屏幕坐标
WorldToViewportPoint:世界坐标转视口坐标
WorldToScreenPoint:世界坐标转屏幕坐标
视口图:
屏幕图:
详细参见:(33条消息) Unity世界坐标转换屏幕坐标(详解)_unity 世界坐标转屏幕坐标_Unity鼓励师的博客-CSDN博客