Unity将float添加到PlayerPrefs.SetFloat

时间:2015-07-16 14:08:18

标签: c# unity3d

所以,当我按下按钮时,我正试图为playerprefs添加一个值,但是无法弄明白。以下是我到目前为止的情况:

    using UnityEngine;
    using System.Collections;

    public class Button21 : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    public void NextLevel() {
        Application.LoadLevel("Quiz2");
    }


    PlayerPrefs.setFloat("finalScore" + 1f);
}

这是第二个按钮,上一个场景中的第一个按钮将“finalScore”设置为1,2,3或4,具体取决于您按下的按钮。我希望将“finalScore”设置为1,2,3或4 + 1。

1 个答案:

答案 0 :(得分:0)

您定义了一个“Button21”类,它是MonoBehaviour的子类。您打算如何实现“OnTouched”事件(只是方法的可能名称的示例)?你应该在一些通用的UI类中使用OnGui()并绘制你的按钮,或者你可以拖放一些UI组件并“挂钩”到你的类公共方法。为了让您的生活更轻松,这里有一个片段:

void OnGui () {
   if (GUI.Button(Rect(10,70,50,30),"Click"))
            Debug.Log("Clicked the button with text");
}

阅读此处的文档http://docs.unity3d.com/ScriptReference/GUI.Button.html

接下来的事情 - 你使用UserPrefs是错误的。你想打电话:

PlayerPrefs.setFloat("finalScore",1);

然后,这会将关键的“finalScore”设置为值1.您希望将其设置为变量“finalScore”左右。

所以最后,片段看起来像:

void OnGui () {
       if (GUI.Button(Rect(10,70,50,30),"Save Score"))
                PlayerPrefs.setFloat("finalScore",finalScore);
    }

正如我所提到的,您可以通过将GUI元素添加到场景中来使用GUI元素,并通过在检查器中将它们挂钩来调用您自己的公共方法。

编辑#1

为了简化OP的事情,我将举另一个例子:

public class ScoreCalculator : MonoBehaviour {

    public int[] finalScore = new int[8];

    public void IncreaseMyScore (int increaseAmount, int forLevel) {
      finalScore[forLevel] += increaseAmount;
    }

    public void IncreaseByOne (int forLevel) {
       IncreaseMyScore(1, forLevel);
    }

    public void SaveMyScores () {
       for (int i = 0; i < 8; i++)
          PlayerPrefs.SetFloat("FinalScore"+i,finalScore[i]);
    }
}

只需从按钮调用方法“IncreaseByOne”。

这将保存您的所有分数:FInalScore0,FinalScore1等

注意:有更有效的方法来保存阵列,请阅读unity docs和PlayerPrefs文档。我刚刚为你绘制了快速解决方案。

编辑#3:编辑#3: 要点升级:  使用带有词典和级别名称/分数的列表来存储您的分数。这样您就不会受限于等级指数和扩大等级数量。

使用PlayerPrefsX保存/加载整个列表/数组:http://wiki.unity3d.com/index.php/ArrayPrefs2

单独逻辑,以便只有一个组件负责分数加载/保存和处理。