2012-07-15 4 views
0

J'apprends que dans Unity3d il n'y a pas de verrou de synchronisation explicite (http://answers.unity3d.com/questions/284228/how-to-synchronize-in-unity.html#answer-284522) mais dans mon jeu j'ai besoin pour faire ça.comment synchroniser avec unity3d?

Les deux agents (pilote A & pilote B) doivent modifier la vitesse d'un avion. Le pseudo-code est:

if (speed < threshold) 
    speed += 1 

S'il n'y a pas de verrou, et la vitesse actuelle: vitesse = seuil-1. Lorsque le pilote A vérifie et voit la vitesse < seuil, il l'incrémente. Quand il le fait, pilote B vérifie, il voit aussi la vitesse < seuil, il l'incrémente à nouveau. Donc la vitesse peut devenir sauvage, incrémentée deux fois et se terminant par> = seuil. L'avion va s'écraser. Je sais que c'est juste un vieux exemple de synchronisation, surpris que Unity ne supporte pas cela. Quelle est la solution de contournement?

Merci.

Répondre

1

S'il vous plaît voir: http://answers.unity3d.com/questions/146372/are-update-and-fixedupdate-called-in-different-thr.html

Vous êtes préoccupé par la concurrence fil là où il n'y. Les appels Unity3D Update() ne sont pas multithread. Le lien que vous incluez indique que Unity3D ne garantit pas l'ordre des scripts, c'est vrai. Mais tout cela signifie que Unity ne garantit pas que A vient avant B. Les scripts ne peuvent pas mettre à jour la même valeur en même temps.

Questions connexes