我有一些问题,所以我想我应该在这里问。
我编写了一个代码来实例化一个健康条(一个简单的滑块)和一个敌人。然后,它将敌人(刚刚产生的)设置为该生命栏的目标,并且健康栏更新其位置,使其始终保持在敌人的头部之上。
这是健康栏的脚本(canvasRect是画布的rect转换,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相机),这意味着偏移是错误的。我放大的越远,健康栏就会越低(因为15华氏度的偏移量已经不够了)。然后,当我把相机移近敌人时,它又一次把健康棒推到敌人身上。
有没有办法让我的敌人在屏幕大小的“边界”,这样我总是可以知道有什么偏移?还是有别的解决办法?
提前感谢!
发布于 2018-05-25 08:29:21
解决办法很简单。不要将偏移量添加到屏幕位置。相反,将其添加到敌人的世界位置(target.position +偏移)。
此外,您还可以使用MeshRenderer.bounds获得网格的边界。
https://stackoverflow.com/questions/50523101
复制相似问题