为什么我在playerprefs上的分数记录没有GetFloat方法?

时间:2014-02-19 14:18:30

标签: unity3d unityscript

为什么我的得分记录不在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");
}

1 个答案:

答案 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");

然后确保它出现了。如果没有,您需要修复碰撞检查。