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

时间:2015-04-14 09:56:57

标签: c# user-interface unity3d progress-bar

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

2 个答案:

答案 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);
}