[英]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.