Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity3D中Update()循环方法内的执行顺序_C#_C# 4.0_Unity3d_Logic_Unityscript - Fatal编程技术网

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

C# Unity3D中Update()循环方法内的执行顺序,c#,c#-4.0,unity3d,logic,unityscript,C#,C# 4.0,Unity3d,Logic,Unityscript,我试图找到合适的词语来描述我所面临的问题,希望这能解释问题 我在两个不同的类中有两个Update()方法,其中一个类的一些功能依赖于另一个类的数据。代码A依赖于代码B的数据,使用Debug.Log()我发现代码B的Update()是在代码A的Update()之后执行的 我的问题是,是否有现成的方法来控制Update方法的调用堆栈?如果有,怎么做?如果没有,是否有人有任何技术,我可以用来解决这个问题。我意识到我可以在代码B中创建方法,可以从更新中的代码A调用这些方法来解决问题,但我很好奇是否有其他

我试图找到合适的词语来描述我所面临的问题,希望这能解释问题

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

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

来自Unity的:

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

那应该能解决你的问题

来自Unity的:

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


那应该能解决你的问题

基本机制可以用锁来表示

例如,假设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编程,由于您的问题同时带有and和and,我希望这对您来说已经足够了。

基本机制可以用锁来表示

例如,假设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中编程,由于您的问题带有and标记,我希望这对您来说足够了。

如果在其中一个脚本中只能使用LateUpdate()而不是Update(),

如果只能使用LateUpdate()而不是Update()在其中一个脚本

中,即使假设A和B的
Update
的执行顺序对于每一帧都是相同的(我不确定是否可以假设),A也不会在第一帧中执行,除非B恰好先执行。如果A和B可以在随后的帧上以不同的顺序执行,那么每两帧只能进入If语句。此外,您还区分了锁和简单布尔值。谢谢Andrea!这对我来说是一幅好画。我开始在我的代码中实现它,现在它工作得很好。有时我忘记了我可以使用布尔逻辑来解决这样的情况。另外,我的项目是C#Unity脚本,所以您假设正确,我对此表示感谢。以后我会尽量把我的问题弄清楚。非常感谢。@PeterGrantBue:我很高兴我的解决方案适合您的需要。:-)请接受我的回答,如果它真的帮助了你。祝你的比赛好运!;-)即使假设A和B的
Update
的执行顺序对于每一帧都是相同的(我不确定这是否可以假设),A也不会在第一帧中执行,除非B恰好先执行。如果A和B可以在随后的帧上以不同的顺序执行,那么每两帧只能进入If语句。此外,您还区分了锁和简单布尔值。谢谢Andrea!这对我来说是一幅好画。我开始在我的代码中实现它,现在它工作得很好。有时我忘记了我可以使用布尔逻辑来解决这样的情况。另外,我的项目是C#Unity脚本,所以您假设正确,我对此表示感谢。以后我会尽量把我的问题弄清楚。非常感谢。@PeterGrantBue:我很高兴我的解决方案适合您的需要。:-)请接受我的回答,如果它真的帮助了你。祝你的比赛好运!;-)