Порядок выполнения в методе цикла Update() в Unity3D

Я пытаюсь найти соответствующие слова для описания проблемы, которая у меня есть, надеюсь, это объяснит проблему.

У меня есть два метода Update() в двух разных классах, а некоторые из функций в одном зависят от данных от другого. Код A зависит от данных кода B, используя Debug.Log() Я обнаружил, что Code B Update() выполняется после обновления кода A ().

Мой вопрос: есть ли метод "ящика" для контроллера стек вызовов метода Update? Если есть, как это делается? Если этого не происходит, есть ли у кого-нибудь техника, которую я мог бы использовать для решения проблемы. Я понимаю, что могу просто создать методы в коде B, которые можно было бы вызвать из кода А в обновлении, чтобы решить проблему, но мне любопытно узнать, есть ли другой способ решить проблему.

3 ответа

Из справочника 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, и, поскольку ваш вопрос отмечен как unityscript, так и c#, я надеюсь, что этого вам достаточно.


если его единственный oneway вы можете использовать LateUpdate() вместо Update() в одном из скриптов

licensed under cc by-sa 3.0 with attribution.