【问题标题】:How to i save my game currency in unity 3d using playerprefs如何使用 playerprefs 在统一 3d 中保存我的游戏货币
【发布时间】: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#

标签: c# unity3d game-development


【解决方案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属性赋值时,它也会自动

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

不必在每一帧都这样做。

【讨论】:

  • 有没有其他办法
猜你喜欢
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2012-12-06
相关资源
最近更新 更多