为什么我的得分记录不在playerprefs上?有GetFloat方法吗?任何人都可以帮助我发布我的游戏中得分最低的,就像最少的秒数将获得有史以来最好的时间记录
var myTimer: float = 0;
var GUITimer: GUIText;
function Start() {
}
function Update() {
GUITimer.text = "Time: " + myTimer;
if (myTimer > -1) {
myTimer += Time.deltaTime;
}
}
function OnTriggerEnter(other: Collider) {
if (other.tag == "FinishLine") {
SaveTime();
}
}
function OnGUI() {
GUI.Label(Rect(10, 10, 500, 200), myTimer.ToString());
}
function SaveTime() {
if (myTimer < PlayerPrefs.GetInt("JeepneyScore3")) {
PlayerPrefs.SetInt("JeepneyScore3", myTimer);
}
Application.LoadLevel("Levels");
}
答案 0 :(得分:3)
我看到三个问题:
首先,您正在跟踪浮动,但是调用GetInt()
和SetInt()
。保持数据类型的一致性。你应该是圆形/地板/等,或者拨打GetFloat()
和SetFloat()
。
其次,您没有调用Save()
,这意味着您的更改永远不会写入磁盘。你可能会考虑这样的事情:
PlayerPrefs.SetFloat("JeepneyScore3", myTimer);
PlayerPrefs.Save();
第三,你没有处理没有数据的情况。您可以使用HasKey()
检查现有数据,但在这种情况下,依赖GetFloat()
的第二种形式更为简单。如果未设置请求的密钥,则您正在调用的默认表单将返回零:
//returns value of "foo", or zero if no such value
var prevBest = PlayerPrefs.GetFloat("foo");
如果你正在寻找一个低于玩家之前最佳状态的时间,但默认的“最佳”已经是0.0
,那么你将很难击败那个时间。
您可以改为提供自己的默认值:
//returns value of "foo", or ten thousand if no such value
var prevBest = PlayerPrefs.GetFloat("foo", 10000.0);
最后,您应确保在适当的时间实际调用SaveTime()
。您可以添加一个简单的调试行,如下所示:
Debug.Log("SaveTime was called");
然后确保它出现了。如果没有,您需要修复碰撞检查。