Unity 5 C# GUI - 根据目标完成距离制作进度条。

Unity 5 C# GUI - Making a progress bar based on goal completion distance.

我正在尝试制作一个快速的 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);
}
}    

finalGoal_dist是一个私有的class级变量,意味着你可以在Distanceclass的任何地方有效地使用它。所以你可以这样做:

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);

首先,你需要存储初始距离,因为你想用进度条显示完成,而完成是相对的。

所以在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);
}