PlayerPrefs.SetInt和.GetInt具有不良影响

时间:2014-04-21 12:49:24

标签: c# android unity3d save

我在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);



    }

}

}

2 个答案:

答案 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