繁体   English   中英

Unity Health Bar在敌人头上

[英]Unity Health Bar over Enemy Head

我对此有一些问题,所以我想在这里问。

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

这是运行状况栏的脚本(canvasRect是画布的rect转换,myRect是运行状况栏的rect转换):

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

有没有办法让我的敌人获得“屏幕尺寸”的“边界”,这样我就始终可以知道要获得的偏移量是多少? 还是有其他解决方案?

提前致谢!

解决方案很简单。 不要将偏移量添加到屏幕位置。 而是将其添加到敌人的世界位置(target.position +偏移量)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM