我有一个变量,我需要在游戏运行时经常检查。为简化此操作,请检查:if (score >= achievement1) {do something}
。
将此检查放在每个帧调用的Update()
函数中似乎有些过分;
相反,我在InvokeRepeating
函数中调用Start ();
函数:
InvokeRepeating ("checkscoreforachievement", 0f, 2f);
这样聪明还是有更好的方法呢?最终结果应该是在达到一定分数后的几秒钟内,就会触发成就。
我之所以要问的是,当我的游戏运行时,我还需要做更多的事情,所以我最终会选择其中的一些进程。想知道这是不是太多的资源消耗。找不到关于这个主题的好文档。
答案 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;
}