我目前正在开发一款具有计时器功能的游戏,而最好的时间是可以最快完成课程的时间。例如,如果我获得40秒的第一次跑步将被保存为高分,但是如果我获得30秒的第二次跑步将被保存为新的高分。我的应用程序当前做的恰恰相反,如果我有更多的时间来获得新的高分。
注意:是的,我试图将符号切换为小于'(t
源代码C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Internal;
public class TImer : MonoBehaviour {
public Text timerText;
public Text highscore;
private float startTime;
private bool finished = false;
void Start () {
startTime = Time.time;
highscore.text = PlayerPrefs.GetFloat ("HighScore", 0).ToString();
}
void Update ()
{
float t = Time.time - startTime;
string minutes = ((int)t / 60).ToString ();
string seconds = (t % 60).ToString ("f2");
timerText.text = minutes + ":" + seconds;
if (t > PlayerPrefs.GetFloat ("HighScore", 0)) {
PlayerPrefs.SetFloat ("HighScore", t);
highscore.text = t.ToString ();
}
}
最佳答案
有一些问题。
第一种,如果您想保存最低的价格,则需要执行Peter Bons的建议并使用float.MaxValue进行比较
第二,您要在更新过程中更新HighScore,它只应在玩家结束游戏时更新。现在发生的是,您开始游戏,在更新中HighScore设置为0或接近0。如果您将最短的时间存储为HighScore,则该时间将永远无法工作,因为Player在游戏开始时会达到“最高”(或最佳)得分。
考虑到这一点,我对您的代码进行了一些更改。确保当玩家到达关卡/游戏结束时调用GameFinished()。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Internal;
public class TImer : MonoBehaviour {
public Text timerText;
public Text highscore;
private float startTime;
private bool finished = false;
void GameFinished()
{
float t = Time.time - startTime;
if (t < PlayerPrefs.GetFloat ("HighScore", float.MaxValue)) {
PlayerPrefs.SetFloat ("HighScore", t);
highscore.text = t.ToString ();
PlayerPrefs.Save();
}
}
void Start () {
startTime = Time.time;
highscore.text = PlayerPrefs.GetFloat ("HighScore", 0).ToString();
}
void Update ()
{
float t = Time.time - startTime;
string minutes = ((int)t / 60).ToString ();
string seconds = (t % 60).ToString ("f2");
timerText.text = minutes + ":" + seconds;
if(/* Check if player finished the game */)
GameFinished();
}
关于c# - 保存计时器HighScore Unity C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45262255/