团结健康酒吧超过敌人头

时间:2018-05-25 06:50:06

标签: c# user-interface unity3d

我遇到了一些问题所以我想我会问这里。

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

这是健康栏的脚本 (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的偏移量不再足够)。然后当我将相机移近敌人时,它再次将健康棒推入他。

有没有办法在屏幕上获取我的敌人的“边界”所以我总能知道有什么偏移?还是有另一种解决方案吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

解决方案很简单。不要将偏移量添加到屏幕位置。相反,将它添加到敌方世界位置(target.position + offset)。

除此之外,您还可以使用MeshRenderer.bounds获取网格的边界。