周数为1/10秒

时间:2014-02-13 00:25:12

标签: c# timer unity3d

我试图找出如何每秒计数10次并显示它。

我有一个名为countpoints的int,它是用户以点开头的。让我们说800。

我想每秒下降10分,但显示每个点下降而不是像我下面的脚本那样每10分。

这是我到目前为止的表现:

if(miliseconds <= 0){

    if(seconds <= 0){
        minutes--;
        seconds = 59;
    }
    else if(seconds >= 0){
        seconds--;
        countpoints = countpoints-10;

    }

    miliseconds = 100;

}

miliseconds -= Time.deltaTime * 100;

这在无效更新中运行,此处计数点每秒下降10。但我希望能够像秒表一样每秒钟显示数字。我怎么做?

任何帮助都表示赞赏,并提前感谢: - )

2 个答案:

答案 0 :(得分:0)

您应该使用coroutine进行该计算,而不是使用Update()。使用协程可以很容易。你只需要启动croutine然后等待0.1秒并将对策点减少1.再次调用其中的coroutine以使其保持运行。只要你想继续调用它就可以添加条件。

private int countpoints=800;
private float t=0.1f;
private int noOfSeconds=90;
private int min;
private int sec;
private int temp=0;

void Start () 
{
    StartCoroutine(StartTimer());
}

IEnumerator StartTimer ()
{
    yield return new WaitForSeconds(t);
    countpoints--;
    temp++;
    if(temp==10)
    {
        temp=0;
        noOfSeconds--;
    }
    min = noOfSeconds/60;
    sec = noOfSeconds%60;

    if(noOfSeconds>0)
    {
        StartCoroutine(StartTimer());
    }
}

void OnGUI () 
{
    GUI.Label(new Rect(100f,100f,100f,50f),countpoints.ToString());
    GUI.Label(new Rect(100f,160f,100f,50f),"Time : "+min.ToString("00")+":"+sec.ToString("00"));
}

答案 1 :(得分:0)

您可以在Update方法中执行此操作并每100分钟减少一次点数,您需要注意不要向上或向下舍入事物,因为错误是系统性的,您将得到不稳定的结果。

使用协同程序将无法正常工作,因为无法保证间隔。

private float _milliseconds = 0;
private int points = 800;

void Update()
{
  _milliseconds += Time.delta * 1000;

  if( _milliseconds > 100 )
  {
   points--;
   //add updating GUI code here for points
   _milliseconds -= 100;
  }
}

当_milliseconds减少100时,你不会得到波动的减量,所以即使长期运行中帧的持续时间存在差异,你也会得到正确的处理。

脚本的一个问题是,如果帧占用时间超过100毫秒,但是如果花费那么长时间你可能会遇到更大的问题:D