血条遮挡问题详解

方案:

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博客

猜你喜欢

转载自blog.csdn.net/qq_46043095/article/details/129764081