我遇到了一些问题所以我想我会问这里。
我编写了一个实例化健康栏(简单滑块)和敌人的代码。然后它将该敌人(刚刚产生的)设置为该健康栏的目标,并且健康栏更新其位置以始终保持在敌人头部上方。
这是健康栏的脚本 (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的偏移量不再足够)。然后当我将相机移近敌人时,它再次将健康棒推入他。
有没有办法在屏幕上获取我的敌人的“边界”所以我总能知道有什么偏移?还是有另一种解决方案吗?
提前致谢!
答案 0 :(得分:3)
解决方案很简单。不要将偏移量添加到屏幕位置。相反,将它添加到敌方世界位置(target.position + offset)。
除此之外,您还可以使用MeshRenderer.bounds获取网格的边界。