Unity3D中Update()循环方法中的执行顺序

时间:2014-04-04 16:16:08

标签: c# c#-4.0 unity3d logic unityscript

我正在尝试找到适当的词来描述我所遇到的问题,希望这可以解释这个问题。

我在两个不同的类中有两个 Update()方法,其中一些功能依赖于另一个的数据。代码A依赖于代码B的数据,使用 Debug.Log()我发现代码B的更新()正在执行代码A的更新()< /强>

我的问题是,是否有一个开箱即用的方法来控制Update方法的Call堆栈?如果它是如何完成的?如果没有,是否有人可以使用任何技术来解决问题。我意识到我可以在代码B中创建可以在更新中从代码A调用以解决问题的方法,但我很想知道是否有其他方法可以解决问题。

3 个答案:

答案 0 :(得分:4)

来自Unity&#39; reference manual

  

默认情况下,不同脚本的Awake,OnEnable和Update函数按脚本加载的顺序调用(这是任意的)。但是,可以使用“脚本执行顺序”设置修改此顺序。

那应该可以解决你的问题。

答案 1 :(得分:0)

基本机制可以用 locks 表示。

作为一个例子,让我们假设A的块依赖于B的块。你可以控制&#34;依赖&#34;这样:

//B script:
var BLogicPerformed = false;

//...
//Code on which A depends:
function Update(){
    if (BLogicPerformed == false){
        //your operations...
        BLogicPerformed = true;
    }
}

//------------------------------------------------
//A script:

//...
//Code that depends on B:
 function Update(){
    if (this.GetComponent("B").BLogicPerformed == true){
        //Perform logic that depends on B
        this.GetComponent("B").BLogicPerformed = false;
    }
 }

与布尔值的丑陋比较,其中只是为了尽可能清楚地保持代码: - )

我在Unityscript中编程,由于您的问题都标有,我希望这对您来说足够了。

答案 2 :(得分:0)

如果只有它可以在其中一个脚本中使用LateUpdate()而不是Update()