【问题标题】:Coin value wont save every time I run my game每次运行游戏时,硬币价值都不会保存
【发布时间】:2020-01-02 22:00:02
【问题描述】:

我正在Unity上制作2D游戏,我有一个脚本可以保存我的硬币价值,但是当我获得更多硬币后打开它时它并没有保存。

这是我保存数据的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coin : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D other)
    {
        if(other.gameObject.tag == "Player")
        {
            PlayerPrefsManager.coins += 1;
            PlayerPrefsManager.UpdateCoins();
        }
    }
}

还有我显示数据的脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CoinsDisplay : MonoBehaviour
{

    private Text text;
    void Start()
    {
        text = GetComponent<Text>();
    }

    void Update()
    {
        string[] temp = text.text.Split('X');
        text.text = temp[0] + "X: " + PlayerPrefsManager.coins;
    }
}

玩家偏好管理器脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerPrefsManager : MonoBehaviour
{
    public const string Coins = "Coins";
    public static int coins;
    void Start()
    {
        coins = PlayerPrefs.GetInt("Coins");
    }


    public static void UpdateCoins()
    {

        PlayerPrefs.SetInt("Coins", coins);
        coins = PlayerPrefs.GetInt("Coins");
        PlayerPrefs.Save();

    }

}

【问题讨论】:

  • 您不应该使用 PlayerPrefs 来存储游戏状态。
  • @Draco18snolongertrustsSE 是正确的。话虽如此,您在玩游戏时看到硬币的数量更新了吗?

标签: c# unity3d


【解决方案1】:

您的代码应该可以正常工作,但我猜您忘记将 PlayerPrefsManager 脚本分配给游戏对象。因为如果它的 Start 没有执行,我们会得到同样的结果。

顺便说一句,使用你的常量字符串“Coins”,你刚刚声明了它,但你没有在这些调用中使用它:SetInt、GetInt。

并尝试减少更新 PlayerPrefs (PlayerPrefs.Save()) 的频率,因为它会在磁盘上写入数据,并且每次硬币的价值发生变化时这样做都会有点昂贵。您可以在您的 prefManager 上使用一个名为“保存”的方法,仅在您完成关卡、任务完成等时调用...,或者如果您不想丢失数据,请减少调用它的频率,就像每 10 秒一次(看看Invokerepeating

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多