所以,当我按下按钮时,我正试图为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。
答案 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。
单独逻辑,以便只有一个组件负责分数加载/保存和处理。