【问题标题】:Unity 5 C# GUI - Making a progress bar based on goal completion distance.Unity 5 C# GUI - 根据目标完成距离制作进度条。
【发布时间】:2015-04-14 18:27:33
【问题描述】:

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

【问题讨论】:

  • GUI 没有连接到 finalGoal_dist,我不知道该怎么做。

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


【解决方案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);

【讨论】:

  • 谢谢,出于某种原因,在我的调试日志中,玩家与目标之间的距离会倒计时,然后再倒计时,尽管目标位于地图的最末端。这弄乱了进度条。 i.imgur.com/tiOa5nn.png 有什么想法吗?
  • 我不知道是什么原因让我无法理解,但如果您仍然遇到问题,我建议您打开另一个问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    相关资源
    最近更新 更多