【问题标题】:Unity saving foreach?统一保存foreach?
【发布时间】:2016-10-12 15:17:14
【问题描述】:

我对统一有点陌生,请帮助我。

我怎样才能保存这样的东西?

public float GetMoneyPerSec()
{
    float tick = 0;
    foreach (UpgradeManager item in items)
    {
        tick += item.tickValue;
    }
    return tick;
}

【问题讨论】:

  • “保存”是什么意思?我猜你可以将结果存储在一个变量中?
  • 我可以,但是我无法加载它。
  • 您需要保存多长时间?现在的场景?游戏环节?在多个游戏会话之间?
  • 我必须把它保存到一个文件中,所以当播放器回来时,如果你点击加载按钮,它就会加载它,我已经有了这些设置,但我只能保存/加载这个..

标签: unity3d static save load


【解决方案1】:

要将数据“保存”在文件中,您可以使用 xml 或 JSON 序列化为文本文档,并在游戏运行时对其进行反序列化。这比播放器首选项更方便,因为您可以轻松地在任何文本编辑器中复制或编辑值。

要在场景之间持久化数据,只需确保保存数据的类是静态类(使用单例方法)或设置为“加载时不破坏”的类。

【讨论】:

  • 我目前正在场景之间保存数据,但我有那个代码,我不能使其成为静态,所以我不能保存它。 :/ 我需要一种方法使其成为静态,或者将其分配给静态变量或其他东西,这样我就可以保存并加载它。
  • 我不知道为什么你需要变量本身是静态的。静态类上的任何变量都将在运行时持续存在。您拥有的方法返回一个值,因此如果您有一个名为 SaveData 的类和一个名为 Tick 的浮动属性,那么您可以说 SaveData.Tick = GetMoneyPerSec();结果进入属性,你可以在你喜欢的地方使用它。
【解决方案2】:

您可以使用PlayerPrefs。假设你有类似float tick = GetMoneyPerSec() 的东西,然后你存储它:

PlayerPrefs.SetFloat("MoneyPerSec", tick);

并通过以下方式检索它:

float f = PlayerPrefs.GetFloat("MoneyPerSec");

【讨论】:

  • 我用的是Persistence Saving,没有办法保存到那里吗?
  • 查看来自 unity persistence的数据持久化教程
  • 我做到了,我就是这样制作的。 ://
  • 能否重建它以使用数据持久性,而不是 PlayerPrefs?
【解决方案3】:

Gerard RocheSakkas 的答案是正确的。
要在场景之间传递数据,您只需要PlayerPrefs
根据您的代码,保存ticks 的方法是:

public float CalculateMoneyPerSec()
{
    float tick = 0;
    foreach (UpgradeManager item in items)
    {
        tick += item.tickValue;
    }
    // save the value after calculation
    PlayerPrefs.SetFloat("MoneyPerSecond", tick);
    return tick;
}

从另一个场景中得到它:

// Another Scene
public float GetMoneyPerSec()
{
    float tick = PlayerPrefs.GetFloat("MoneyPerSecond");
}

将数据保存在PlayerPrefs被认为是安全的,因为PlayerPrefsOnApplicationQuit()向硬盘写入数据时会调用PlayerPref.Save(),这是传输数据最有效的方式。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2013-07-08
    • 1970-01-01
    • 2021-10-10
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多