我最近一直在使用教程制作游戏。不幸的是,他们没有涵盖保存分数功能。多亏了另一个用户,我才知道我需要使用playerprefs。我在线上观看了教程,但没有一个有帮助。如果可以,请帮助我!
每秒金币脚本:
using UnityEngine;
using System.Collections;
public class GoldPerSec : MonoBehaviour {
public UnityEngine.UI.Text gpsDisplay;
public Click click;
public ItemManager[] items;
void Start () {
StartCoroutine(AutoTick ());
}
void Update () {
gpsDisplay.text = GetGoldPerSec() + " Money Per Sec";
}
public float GetGoldPerSec() {
float tick = 0;
foreach (ItemManager item in items) {
tick += item.count * item.tickValue;
}
return tick;
}
public void AutoGoldPerSec() {
click.gold += GetGoldPerSec() / 10;
}
IEnumerator AutoTick() {
while (true) {
AutoGoldPerSec();
yield return new WaitForSeconds(0.10f);
}
}
}
每次点击金币脚本:
using UnityEngine;
using System.Collections;
public class Click : MonoBehaviour {
public UnityEngine.UI.Text gpc;
public UnityEngine.UI.Text goldDisplay;
public float gold = 0.00f;
public int goldperclick = 1;
void Update () {
goldDisplay.text = "" + gold.ToString("F0");
gpc.text = "Money Per Click: " + goldperclick;
}
public void Clicked(){
gold += goldperclick;
}
}
我的想法是让游戏在退出游戏时保存,并在您重新加载游戏后立即加载。我是一个完整的初学者,如果有人可以告诉我该怎么做,请告诉我!谢谢! :D
最佳答案
请注意,PlayerPrefs是保存数据的简便方法,但也是非常不安全的方法。播放器可以轻松操纵其“ goldValue”,因为它只是作为整数存储在设备上的某些文件中。 PlayerPrefs通常应仅用于玩家可以在游戏中以任何方式更改的值,例如音量设置等。
示例代码
void Save()
{
string filename = "/filename.dat";
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath+filename);
bf.Serialize(file, goldValue); //Use can easily use e.g. a List if you want to store more date
file.Close();
}
bool Load()
{
string filename = "/filename.dat";
if (File.Exists(Application.persistentDataPath + filename))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + filename, FileMode.Open);
goldValue=(int) bf.Deserialize(file);
file.Close();
return true;
}
return false;
}
关于unity3d - 使用PlayerPrefs(统一),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39015560/