我在Unity3D中有一个应用程序,我正在为Android制作,你可以收集硬币作为游戏的货币。每次我开始游戏时,我的硬币金额初始化为0,即使我使用setInt和getInt尝试在下次玩家玩游戏时保存硬币金额。
完全不确定为什么它没有保存coinAmount,任何想法? (可能是一些愚蠢的事,因为我有点像菜鸟)。
using UnityEngine;
using System.Collections;
public class pickupCoin : MonoBehaviour {
public int amountOfCoins;
public AudioClip coinPing;
public AudioSource playerAudio;
void Start () {
if(PlayerPrefs.GetInt("TotalCoinsPlayerPrefs") == null){
PlayerPrefs.SetInt("TotalCoinsPlayerPrefs", 0);
}
amountOfCoins = PlayerPrefs.GetInt("TotalCoinsPlayerPrefs");
}
void OnCollisionEnter(Collision other){
if(other.gameObject.name.Contains("coin")){
playerAudio.PlayOneShot(coinPing);
amountOfCoins+=1;
PlayerPrefs.SetInt("TotalCoinsPlayerPrefs", amountOfCoins);
Debug.Log("amount of coins is: " + amountOfCoins);
Debug.Log("Player Prefs Coin Amount Is" + PlayerPrefs.GetInt("TotalCoinsPlayerPrefs").ToString());
Destroy(other.gameObject);
}
}
}
答案 0 :(得分:2)
你的启动功能应如下所示。
void Start () {
amountOfCoins = PlayerPrefs.GetInt("TotalCoinsPlayerPrefs"); // handles case it doesn't exist and provides a default value of zero unless otherwise specified
}
我刚刚确认您不必致电PlayerPrefs.Save()
。
您能否验证此脚本是否适合您。
using UnityEngine;
using System.Collections;
public class PlayerPrefsScript : MonoBehaviour {
public int amountOfCoins;
void Start () {
amountOfCoins = PlayerPrefs.GetInt("TotalCoinsPlayerPrefs");
}
void OnGUI()
{
if (GUI.Button (new Rect (0, 0, 100, 50), "Coins: " + amountOfCoins)) {
amountOfCoins++;
}
}
void OnDestroy(){
PlayerPrefs.SetInt ("TotalCoinsPlayerPrefs", amountOfCoins);
}
}
答案 1 :(得分:2)
您用于检查PlayerPref存在(PlayerPrefs.GetInt("TotalCoinsPlayerPrefs") == null
)的测试是“错误的”。该任务的正确方法是调用HasKey函数。
基本上,我认为您当前的测试总是返回TRUE,并且随着游戏的开始,您的PlayerPref内容始终会初始化为0
。