C# Unity3D中Update()循环方法内的执行顺序
我试图找到合适的词语来描述我所面临的问题,希望这能解释问题 我在两个不同的类中有两个Update()方法,其中一个类的一些功能依赖于另一个类的数据。代码A依赖于代码B的数据,使用Debug.Log()我发现代码B的Update()是在代码A的Update()之后执行的 我的问题是,是否有现成的方法来控制Update方法的调用堆栈?如果有,怎么做?如果没有,是否有人有任何技术,我可以用来解决这个问题。我意识到我可以在代码B中创建方法,可以从更新中的代码A调用这些方法来解决问题,但我很好奇是否有其他方法来解决问题。来自Unity的: 默认情况下,不同脚本的Awake、OnEnable和Update函数是按照加载脚本的顺序调用的(这是任意的)。但是,可以使用脚本执行顺序设置修改此顺序 那应该能解决你的问题 来自Unity的: 默认情况下,不同脚本的Awake、OnEnable和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调用这些方法来解决问题,但我很好奇是否有其他
那应该能解决你的问题 基本机制可以用锁来表示 例如,假设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:我很高兴我的解决方案适合您的需要。:-)请接受我的回答,如果它真的帮助了你。祝你的比赛好运!;-)