如何使用 playerprefs 在统一 3d 中保存我的游戏货币

Posted

技术标签:

【中文标题】如何使用 playerprefs 在统一 3d 中保存我的游戏货币【英文标题】:How to i save my game currency in unity 3d using playerprefs 【发布时间】:2021-11-29 11:26:10 【问题描述】:

我想为我的游戏创建一个游戏内商店,我想通过玩家偏好来省钱,但代码不起作用

public float AmountNumber;
public Text AmountText;

void Start() 
    AmountText.text = PlayerPrefs.GetFloat("Amount").ToString();


// Update is called once per frame
void Update()


    AmountText.text = AmountNumber.ToString();

    PlayerPrefs.SetFloat("Amount", AmountNumber);

【问题讨论】:

它没有任何错误,它在我这边运行,它是最终脚本吗?我假设代码不是完整的代码,例如从 Monobehaviour 的类定义和继承,......它是否正确分配给场景中的 gameobject but the code isn't working 没有有效的问题描述......你的问题到底是什么? 另外请使用正确的标签!请注意,unityscript 是或更好的是曾经是一种 javascript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在已经不推荐使用了!你的代码显然是c# 【参考方案1】:

Start 中,您仅使用存储的值更新显示,因此AmountNumber 将保持0,然后在Update 中用0 覆盖PlayerPrefs 中的值

...宁可做

void Start() 

    AmountNumber = PlayerPrefs.GetFloat("Amount");
    AmountText.text = AmountNumber.ToString();


那么一般来说你不应该在Update每一帧中做其余的事情,而是让你的代码更受事件驱动。

我会例如宁可将实际值设为private,而应具有类似的属性,例如

private int _amountNumber;

public int AmountNumber

    get => _amountNumber;
    set
    
        _amountNumber = value;
        AmountText.text = value.ToString();
        PlayerPrefs.SetFloat("Amount", value);
    


private void Start ()

    AmountNumber = PlayerPrefs.GetFloat("Amount");

这样,每当有东西给AmountNumber属性赋值时,它也会自动

更新显示 将值存储在播放器首选项中

不必在每一帧都这样做。

【讨论】:

有没有其他办法

以上是关于如何使用 playerprefs 在统一 3d 中保存我的游戏货币的主要内容,如果未能解决你的问题,请参考以下文章

如何节省统一花费的最少时间?

Unity 3D 之Playerprefs

Unity3d数据存储 PlayerPrefs,XML,Json数据的存储与解析

Unity3D PlayerPrefs 问题

Unity3D 场景切换与持久化简单数据储存(PlayerPrefs类)

Unity3DUnity3D之 注册表动态存取游戏存档——PlayerPrefs类