Kil*_*ert 2 c# unity-game-engine
我有一个变量,我需要在游戏运行时经常检查.为了简化这一点,检查是:if (score >= achievement1) {do something}.
把这个检查放在Update()每帧调用的函数中似乎有点过分了.
所以相反,我在InvokeRepeating函数中调用Start ();函数:
InvokeRepeating ("checkscoreforachievement", 0f, 2f);
Run Code Online (Sandbox Code Playgroud)
这样聪明还是有更好的方法呢?最终结果应该是在达到一定分数后的几秒钟内,触发成就.
我问的原因是,当我的游戏运行时,我还需要做更多的事情,所以我最终会选择其中的一些进程.想知道这是不是太多的资源消耗.找不到关于这个主题的好文档.
不,InvokeRepeating在这种情况下不是更好.
它并不是更好,因为你每2秒调用一次该函数,这意味着当score >= achievement1评估时true,它将需要大约2秒来检测.此外,InvokeRepeating使用缓慢的反射.在这里使用它没有任何优势.使用Update像你目前正在做的功能是完全没问题的.
比使用该Update功能更好的解决方案是检查是否score >= achievement1 仅在使用auto属性更改分数时.
public int achievement1 = 0;
private float _score;
public float score
{
get
{
return _score;
}
set
{
if (_score != value)
{
_score = value;
if (_score >= achievement1)
{
//Do something
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只会在score设置或更改变量而不是每一帧时进行检查,但Update代码很好.