【发布时间】:2018-05-25 06:50:05
【问题描述】:
我遇到了一些问题,所以我想我会在这里问。
我编写了一个代码来实例化一个健康条(一个简单的滑块)和一个敌人。然后,它将那个敌人(刚刚生成的)设置为该生命值条的目标,并且该生命值条会更新其位置以始终保持在敌人头顶上方。
这是健康栏的脚本 (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 的偏移量已经不够用了)。然后当我将相机移近敌人时,它再次将生命条推到他身上。
有没有办法让我的敌人的“边界”以屏幕尺寸显示,这样我就总能知道有什么偏移量?还是有其他解决方案?
提前致谢!
【问题讨论】:
-
您可以尝试使用涉及缩放因子和偏移的公式。当您缩小时,偏移量会相应增加(缩小两倍、偏移量两倍等)。
-
创建一个空的游戏对象,将其作为子对象放置在敌人的头顶上。并在空的游戏对象中实例化健康栏。这样它就会一直呆在那里。
-
缩放偏移有效,但仅在我移动相机之前。即使缩放时偏移是正确的,一旦我将相机移向敌人,它仍然会搞砸。
-
我可以在空的游戏对象中实例化健康条吗?我认为它必须将画布作为其父级,否则无法正确渲染?
标签: c# user-interface unity3d