猿问

敌人头上的 Unity Health Bar

我在这方面遇到了一些问题,所以我想我会在这里问。


我写了一个代码来实例化一个健康栏(一个简单的滑块)和一个敌人。然后将那个敌人(刚刚生成的)设置为该生命条的目标,并且生命条更新其位置以始终保持在敌人头顶上方。


这是健康栏的脚本(canvasRect 是画布的矩形变换,myRect 是健康栏的矩形变换):


private void Update() {

        if(target != null) {

            Vector2 targetPosition = Camera.main.WorldToViewportPoint(target.position);


            Vector2 screenPosition = new Vector2(((targetPosition.x * canvasRect.sizeDelta.x) - (canvasRect.sizeDelta.x * 0.5f)),

                ((targetPosition.y * canvasRect.sizeDelta.y) - (canvasRect.sizeDelta.y * 0.5f)));


            screenPosition += new Vector2(0f, 15f);


            myRect.anchoredPosition = screenPosition;

        }

    }

该脚本运行良好,但存在一个问题:如您所见,我在 y 坐标中添加了一个偏移量。这是为了将生命条放在敌人上方,而不是里面。


然而,当我移动相机时,问题就来了。如果我放大,它会旋转一点(如 RTS 摄像机),这意味着偏移量是错误的。我放大得越多,健康栏就越低(因为 15f 的偏移量已经不够了)。然后当我将相机移近敌人时,它再次将健康条推向他。


有没有办法在屏幕大小中获得敌人的“边界”,这样我就可以知道有什么偏移量?或者还有其他解决方案吗?


Qyouu
浏览 193回答 1
1回答

Helenr

解决方法很简单。不要将偏移量添加到屏幕位置。相反,将其添加到敌人的世界位置(target.position + offset)。除此之外,您可以使用 MeshRenderer.bounds 获取网格的边界。
随时随地看视频慕课网APP
我要回答