我正在尝试制作一个快速的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 :(得分: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);
答案 1 :(得分: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);
}