我有一个整数,该整数保持玩家的高分,并且当玩家在面板上死于我的游戏时显示。当玩家获得新的高分时,我创建了一个函数来增加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 ();
}
}
答案 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>
这样做的好处是多方面的:
额外积分:您可以查看“缓动功能”,以更具体,更精细地控制动画。 Lerp看起来非常僵硬,因为它没有加速和减速,缓动功能本质上是Lerp的一种方法,但运动更平稳。我已经把这个问题弄得很复杂了,所以我不会为您提供更多的信息,但是他们值得寻找更多的抛光剂。
答案 1 :(得分:0)
之所以不能很快上升,是因为此代码位于Update
函数中,这意味着它将在游戏的每一帧都被调用。因此,该数目每帧将增加一次,这意味着每秒的帧数越低,到达高分的时间就越多。例如,如果游戏以20 fps的速度运行,并且最高分是400,则要花20秒才能达到最高分。这也意味着动画的速度会因系统而异。我会尝试将数字增加更多,以加快动画的播放速度,