我正在学习统一脚本。但我不明白以下几点:
static private var lastRecalculation = -1;
static function RecalculateValue () {
if (lastRecalculation == Time.frameCount)
return;
ProcessData.AndDoSomeCalculations();
}
我没有得到IF语句中的第三行或条件。我知道它有点业余,但请帮助。 谢谢。
答案 0 :(得分:2)
这来自Time.frameCount
documentation。此示例显示如何创建一个每帧仅执行一次的函数,无论您将脚本附加到多少个对象。我怀疑这个例子是不完整的,因为它永远不会更新lastRecalculation(或者假设你会在AndDoSomeCalculations()
中这样做。)
最初设置lastRecalculation = -1
的原因是这个函数在第一帧中运行。
工作版:
static var lastRecalculation = -1;
static function RecalculateValue () {
if (lastRecalculation == Time.frameCount) {
return;
}
lastRecalculation = Time.frameCount;
Debug.Log (Time.frameCount);
//ProcessData.AndDoSomeCalculations();
}
function Update () {
RecalculateValue();
}
将此脚本附加到2个不同的GameObjects
并运行它。您只会看到1,2,3,4,5 ....的唯一帧值,即使每个GameObjects
都调用RecalculateValue()
现在注释掉return
并再次运行它。现在,该代码的ProcessData
部分每帧都运行两个对象,你会看到类似1,1,2,2,3,3,4,4 ......