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级变量,意味着你可以在Distance
class的任何地方有效地使用它。所以你可以这样做:
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);
}
我正在尝试制作一个快速的 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级变量,意味着你可以在Distance
class的任何地方有效地使用它。所以你可以这样做:
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);
}