检查变量何时等于另一个值的更好方法

时间:2017-09-29 13:36:10

标签: c# unity3d

我有一个变量,我需要在游戏运行时经常检查。为简化此操作,请检查:if (score >= achievement1) {do something}

将此检查放在每个帧调用的Update()函数中似乎有些过分;

相反,我在InvokeRepeating函数中调用Start ();函数:

InvokeRepeating ("checkscoreforachievement", 0f, 2f);

这样聪明还是有更好的方法呢?最终结果应该是在达到一定分数后的几秒钟内,就会触发成就。

我之所以要问的是,当我的游戏运行时,我还需要做更多的事情,所以我最终会选择其中的一些进程。想知道这是不是太多的资源消耗。找不到关于这个主题的好文档。

2 个答案:

答案 0 :(得分:5)

不,InvokeRepeating在这种情况下不是更好。

它并不是更好,因为你每2秒调用一次这个函数,这意味着当score >= achievement1评估为true时,检测到它将花费大约2秒钟。此外,InvokeRepeating使用缓慢的反射。在这里使用它没有任何优势。使用像你目前正在做的Update函数完全没问题。

比使用Update功能更好的解决方案是仅在使用自动属性更改分数时检查是否score >= achievement1

public int achievement1 = 0;
private float _score;

public float score
{
    get
    {
        return _score;
    }

    set
    {
        if (_score != value)
        {
            _score = value;

            if (_score >= achievement1)
            {
                //Do something
            }
        }
    }
}

这只会在设置或更改score变量而不是每一帧时进行检查,但Update代码正常。

答案 1 :(得分:0)

其他一些用户已经指出了类似的事情,但基本上当分数改变时,请调用自己的功能进行检查。不要重复或使用更新,因为老实说,分别不经常或经常这样做是不必要的。

逐字地设置当你的分数递增或递减(以任何方式改变)时,你调用函数进行检查。

您还可以创建成就数组,并在调用函数显示/更新成就之前检查索引:

if(arrayname[i] != "Unlocked"){
//Call function;
}