C# 如何仅在软件更新时初始化新值?

C# 如何仅在软件更新时初始化新值?,c#,unity3d,C#,Unity3d,我想在Unity游戏第一次打开时初始化一些变量 我试过这个 private void Awake() { if (PlayerPrefs.GetInt("Onfirst") == 0) { PlayerPrefs.SetInt("Onfirst", 1); for (int i = 0; i < CHbutton.Count; i++) { PlayerPrefs

我想在Unity游戏第一次打开时初始化一些变量

我试过这个

private void Awake()
{
    if (PlayerPrefs.GetInt("Onfirst") == 0)
    {
        PlayerPrefs.SetInt("Onfirst", 1);
        for (int i = 0; i < CHbutton.Count; i++)
        {
            PlayerPrefs.SetInt("buyCH" + MenuNum.ToString() + i.ToString(), 0);
            PlayerPrefs.SetInt("selectCH" + MenuNum.ToString() + i.ToString(), 0);
        }
        PlayerPrefs.SetInt("buyCH" + MenuNum.ToString() + '0', 1);
        PlayerPrefs.SetInt("selectCH" + MenuNum.ToString() + '0', 1);
    }
}
论新的软件更新

private void Awake() 
{
    if (PlayerPrefs.GetInt("Onfirst") == 0)
    {
        PlayerPrefs.SetInt("Onfirst", 1);
        PlayerPrefs.SetInt("firstUpdate", 1);
        PlayerPrefs.SetInt("SecUpdate", 1);
    }
}
现在,当玩家更新游戏时,他将永远不会收到这些更改, 所以要解决这个问题

private void Awake() 
{
    if (PlayerPrefs.GetInt("Onfirst") == 0)
    {
        PlayerPrefs.SetInt("Onfirst", 1);
        PlayerPrefs.SetInt("firstUpdate", 1);
    }
    if (PlayerPrefs.GetInt("Onfirst2") == 0)
    {
        PlayerPrefs.SetInt("Onfirst2", 1);
        PlayerPrefs.SetInt("SecUpdate", 1);
    }
}
等等

假设我使用了10个以上的脚本(无法合并),经过多次更新后,我无法处理所有这些行

我真正想要的是在每次软件更新时使用init脚本,但不重置已经存在的值。

您可以使用来检查这些变量是否已经设置。如果已经设置了它们,只需不初始化它们:

private void Awake() 
{
    // first update
    if (!PlayerPrefs.HasKey("firstUpdate")) 
    { 
        PlayerPrefs.SetInt("firstUpdate", 1); 
    } 

    // second update
    if (!PlayerPrefs.HasKey("secondUpdate")) 
    {
        PlayerPrefs.SetInt("secondUpdate", 1); 
    }
}

我投票结束这个问题,因为你的问题和它的,听起来像是代码改进和/或审查,如果是这样的话,可能是离题了。它可能更适合其他SE站点,但请务必阅读相关常见问题解答;和/或在交叉发布前根据需要重新措辞您的问题。祝你好运OP:“…是的,
它很好
,但是有没有更好的方法来做到这一点呢?”也许我应该对最后一行做更多的解释,我将编辑这个问题,然后决定使用一个带有静态初始值设定项的静态类来保存这些值。如果值正在更改,则需要某种形式的持久性。这是一个实际问题:代码仅在最初几次更新时工作正常,但不能长期支持。关于术语:“更新”是一种软件更新,与新版本类似,而不是unity的update()函数,对吗?正如我所了解的,在每次(或特定)更新之后,您都需要执行一些代码。如果是这样的话,我想,你可以使用增量更新数而不是布尔值。你知道,这是我第一次看到这个get方法“HasKey”,这正是我想要的,谢谢你的帮助help@MohamedAwad很高兴我能帮忙。考虑这个答案帮助类似问题的人发现这个答案更容易。这也给了我更多的声誉点:)
private void Awake() 
{
    // first update
    if (!PlayerPrefs.HasKey("firstUpdate")) 
    { 
        PlayerPrefs.SetInt("firstUpdate", 1); 
    } 

    // second update
    if (!PlayerPrefs.HasKey("secondUpdate")) 
    {
        PlayerPrefs.SetInt("secondUpdate", 1); 
    }
}