Ordre d’exécution dans la méthode de boucle Update () dans Unity3D

J’essaie de trouver les mots appropriés à utiliser pour décrire le problème que je rencontre. J’espère que cela expliquera le problème.

J’ai deux méthodes Update () dans deux classes différentes, et certaines des fonctionnalités de l’une reposent sur des données provenant d’une autre. Le code A dépend des données du code B, à l’aide de Debug.Log (). J’ai constaté que la mise à jour du code B était exécutée après la mise à jour du code A.

Ma question est la suivante: existe-t-il une méthode prête à l’emploi pour contrôler la stack d’appels de la méthode Update? Si c’est le cas, comment fait-on? S’il n’y en a pas, est-ce que quelqu’un a une technique que je pourrais utiliser pour résoudre le problème? Je réalise que je pourrais simplement créer des méthodes dans le code B pouvant être appelées à partir du code A dans update pour résoudre le problème, mais je suis curieux de voir s’il existe un autre moyen de résoudre le problème.

Extrait du manuel de référence de Unity:

Par défaut, les fonctions Awake, OnEnable et Update de différents scripts sont appelées dans l’ordre de chargement des scripts (ce qui est arbitraire). Toutefois, il est possible de modifier cet ordre à l’aide des parameters Ordre d’exécution du script.

Ceci devrait régler votre problème.

Un mécanisme de base pourrait être représenté par des verrous .

Par exemple, supposons que le bloc de A dépende de celui de B. Vous pouvez contrôler la “dépendance” de cette façon:

//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; } } 

( des comparaisons moche avec des valeurs booléennes ont été faites pour que le code soit aussi clair que possible 🙂 )

Je programme en Unityscript et, comme votre question est balisée avec unitscript et c # , j’espère que cela vous suffit.

si ce n’est que sur une seule voie, vous pouvez utiliser LateUpdate () au lieu de Update () dans l’un des scripts