2015-04-14 18 views
0

我正在試圖製作一個快速的GUI進度條,顯示您在關卡中的進度。Unity 5 C#GUI - 根據目標完成距離製作進度條。

這是我現在的代碼,我必須做些什麼才能使它起作用?

using UnityEngine; 
using System.Collections; 

public class Distance : MonoBehaviour { 

private float finalGoal_dist = 0.0f; 
public Transform Player; 
public Transform finalGoal; 


public Vector2 pos = new Vector2(20, 40); 
public Vector2 size = new Vector2(120, 120); 
public Texture2D emptyTex; 
public Texture2D fullTex; 


void OnGUI(){ 
      GUI.Box(new Rect(0,0, size.x, size.y), emptyTex); 
      GUI.Box(new Rect(0,0, size.x*t, size.y), fullTex); 
} 

// Update is called once per frame 
void Update() { 

    finalGoal_dist = Vector3.Distance(Player.position, finalGoal.position); 
    print("Distance to Goal:" + finalGoal_dist); 
} 
}  
+0

什麼不工作? –

+0

GUI沒有連接到finalGoal_dist,我不確定如何做到這一點。 – user3708761

回答

1

finalGoal_dist是一個私有類級變量,這意味着你可以有效地在Distance類的任何地方使用它。所以,你可能只是這樣做:

GUI.Box(new Rect(0,0, size.x*finalGoal_dist, size.y), fullTex); 

但是,你首先要映射到範圍[0,1]讓你的進度條不超過size.x變得更長。你可以這樣做,首先將finalGoal_dist除以開始和結束之間的初始距離,我將這稱爲initial_dist

float t = finalGoal_dist/initial_dist; 
GUI.Box(new Rect(0,0, size.x*t, size.y), fullTex); 
+0

謝謝,由於某種原因,在我的調試日誌中,儘管目標位於地圖的盡頭,但球門距球門的距離再次遞減。這搞亂了進度條。 http://i.imgur.com/tiOa5nn.png 任何想法? – user3708761

+0

我不知道什麼會導致我的頭頂上,但如果你仍然有問題,我建議打開另一個問題。 –

1

首先,您需要存儲初始距離,因爲您想用進度條顯示完成度,並​​且完成度有些相對。

所以在Start()方法,存儲初始距離在一個新的成員變量:

float initialDistance; 
void Start() 
{ 
    initialDistance = Vector3.Distance(Player.position, finalGoal.position); 
} 

然後,在OnGUI()方法,首先你要畫一個大箱子總距離,再畫一個小在完成距離的第一個框上方框。

void OnGUI() 
{ 
    GUI.Box(new Rect(0,0, size.x, size.y), emptyTex); 
    GUI.Box(new Rect(0,0, size.x * (initialDistance/finalGoal_dist), size.y), fullTex); 
}