Unity - frameCount 何时变为负数

Posted

技术标签:

【中文标题】Unity - frameCount 何时变为负数【英文标题】:Unity - When does the frameCount goes negative 【发布时间】:2014-02-05 12:06:51 【问题描述】:

我正在学习统一脚本。但我不明白以下内容:

static private var lastRecalculation = -1;
    static function RecalculateValue () 
       if (lastRecalculation == Time.frameCount)
         return;
       ProcessData.AndDoSomeCalculations();
    

我没有得到第三行或 IF 语句中的条件。我知道它有点业余,但请帮忙。 谢谢。

【问题讨论】:

【参考方案1】:

这是来自Time.frameCountdocumentation。此示例说明如何创建一个每帧仅执行一次的函数,而不管您将脚本附加到多少个对象。我怀疑这个例子是不完整的,因为它永远不会更新 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.... 即使 2 个 GameObjects 都在调用 RecalculateValue()

现在注释掉return 并再次运行它。现在,该代码的ProcessData 部分每帧都针对两个对象运行,您会看到类似 1,1,2,2,3,3,4,4......

【讨论】:

感谢@Jerdak 解释得这么好。但我想知道为什么我们要检查 Time.frameCount 是否等于 -1。有没有可能是负面的。 @AshishBeuwria 以一种迂回的方式,这就是我的意思。不,Time.frameCount 永远不会是 -1,所以第一次调用这个函数时,ProcessData.AndDoSomeCalculations(); 将被调用。 现在,我明白了!非常感谢。

以上是关于Unity - frameCount 何时变为负数的主要内容,如果未能解决你的问题,请参考以下文章

将 NSDecimalNumber 变为负数

如何防止整数值变为负数

Unity3D 移动开发代码优化

倒数计时器变为负数 (00:00:00)

版本 3 AudioUnits:internalRenderBlock 中的最小 frameCount

MovieClip Y 位置在使用增量时间的更新循环上变为负数