【问题标题】:Execution order within the Update() loop method in Unity3DUnity3D中Update()循环方法中的执行顺序
【发布时间】:2014-04-04 16:16:08
【问题描述】:

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

我在两个不同的类中有两个 Update() 方法,其中的一些功能依赖于另一个类的数据。代码 A 依赖于代码 B 的数据,使用 Debug.Log() 我发现代码 B 的 Update() 是在代码 A 的 Update()。

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

【问题讨论】:

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


    【解决方案1】:

    来自 Unity 的reference manual

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

    这应该可以解决您的问题。

    【讨论】:

      【解决方案2】:

      一个基本的机制可以用来表示。

      例如,假设 A 的块依赖于 B 的块。您可以通过这种方式控制“依赖”:

      //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 中编程,并且由于您的问题被标记为 ,我希望这对您来说已经足够了。

      【讨论】:

      • 即使您假设每个帧的 A 和 B 的 Update 的执行顺序相同(我不确定是否可以假设),A 也不会在第一帧,除非 B 碰巧先走。如果 A 和 B 可以在后续帧上以不同的顺序执行,则您可能只能每两帧进入 if 语句。此外,您还区分了锁和简单的布尔值。
      • 谢谢安德里亚!这为我描绘了一幅美好的画面。我开始在我的代码中实现它,现在它工作得很好。有时我忘记了我可以使用布尔逻辑来解决这种情况。另外,我的项目是 C# Unity Script,所以你假设正确,我很感激。将来我会尽量让我的问题更清楚。非常感谢。
      • @PeterGrantBue:我很高兴我的解决方案符合您的需求。 :-) 如果真的对您有所帮助,请接受我的回答。祝你游戏好运! ;-)
      【解决方案3】:

      如果只有一种方式,您可以在其中一个脚本中使用 LateUpdate() 而不是 Update()

      【讨论】:

        猜你喜欢
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        • 2018-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多