Unity3D:加快高分计数

时间:2019-01-09 22:52:44

标签: c# unity3d

我有一个整数,该整数保持玩家的高分,并且当玩家在面板上死于我的游戏时显示。当玩家获得新的高分时,我创建了一个函数来增加int,以达到很酷的高分递增效果;它可以工作,但是并没有我希望的那么快,特别是如果玩家要获得很高的高分,例如:400。有没有办法让我的高分计数功能更快?

这是我的代码:

 public int i;
 public Text highScore;

 void Update () {
  if(playerDeath == false) {
     i = 0;
  }  
   else if (playerDeath == true) {
     i++;
     if (i >= PlayerPrefs.GetInt ("Highest", 0)) {
         i = PlayerPrefs.GetInt ("Highest", 0);
     }
    highCoinText.text = "" + i.ToString ();
  }
 }

2 个答案:

答案 0 :(得分:2)

这是使用lerp(线性插值)的理想场所

 public float t = 0.0f; //renamed i to t, for convention (i is for loops, t is for lerping or easing function "time" variables
 public Text highScore;
 public float highScoreAnimationLength = 2.0f; //how long in seconds it should take to go from score 0 to the players final score

 void Update () {
  if(playerDeath == false) {
     t = 0.0f;
  }  
   else if (playerDeath == true) {
     t = Mathf.MoveTowards(t, 1.0f, Time.deltaTime/highScoreAnimationLength); //move t closer to 1.0, we use Time.deltaTime to make it move in "realtime" rather than frame time, MoveTowards will always stop at the target value, so we never go over it.
     int displayedScore = (int)Mathf.Lerp(0, highScore, t); //Here we use a lerp to calculate what number to display, we then cast it to an int to display it correctly (no decimals)
    highCoinText.text = "" + displayedScore.ToString ();
  }
 }

在这里,我们使用了两个方便的功能,MoveTowards和Lerp,它们是相似的,并且都很方便。

MoveTowards将数字作为第一个参数,将目标作为第二个参数,将“最大距离”作为第三参数,它将第一个参数移向目标参数,但仅在第三个参数中加或减至第三个参数为了达到它。 MoveTowards将永远不会超过目标。您可以将其视为MoveTowards(从,到,金额)

Lerp采用相似的参数(Lerp(from,to,t),但行为不同。它采用相同的from和to参数,但是第三个参数是线性放置结果的位置。您可以想象一个数字行从以“ to”结尾的“ from”和第三个参数“ t”是沿着该行放置的距离,其中0恰好位于“ from”上,1恰好位于“ to”上,而0.5恰好位于中间。 / p>

在这里,我们使用movetowards来增加内部变量“ t”(我们将其用作计时器,将其从0滴答作响),我们使用Time.deltaTime(本质上是当前帧的持续时间,以秒为单位),将我们的计算与帧速率分开,这意味着该过程在10fps或60fps时实际上应该是相同的。我们要做的就是将“ t”从0移到1,超过“ highScoreAnimationLength”(2)秒。

然后我们将t的结果用作Lerp的参数,这意味着在这2秒钟内,我们将在初始得分(0)和目标得分(highScore)之间线性插值(更简单地说,是滑动)。 / p>

这样做的好处是多方面的:

  • 高分是10还是100000总是要花2秒
  • 它与帧速率无关,因此在每台计算机上始终需要2秒
  • 我们的编辑器变量以易于理解的单位(秒)为单位。调整值变得更加直观,因为您可以轻松地预测和估计其行为。 (此类情况的常见陷阱是将变量仅称为“速度”之类的变量,并且没有实际单位,因此您必须通过反复试验进行编辑才能使其正确设置)

额外积分:您可以查看“缓动功能”,以更具体,更精细地控制动画。 Lerp看起来非常僵硬,因为它没有加速和减速,缓动功能本质上是Lerp的一种方法,但运动更平稳。我已经把这个问题弄得很复杂了,所以我不会为您提供更多的信息,但是他们值得寻找更多的抛光剂。

答案 1 :(得分:0)

之所以不能很快上升,是因为此代码位于Update函数中,这意味着它将在游戏的每一帧都被调用。因此,该数目每帧将增加一次,这意味着每秒的帧数越低,到达高分的时间就越多。例如,如果游戏以20 fps的速度运行,并且最高分是400,则要花20秒才能达到最高分。这也意味着动画的速度会因系统而异。我会尝试将数字增加更多,以加快动画的播放速度,