0

Unity3d には明示的な同期ロックがないことを知りました (http://answers.unity3d.com/questions/284228/how-to-synchronize-in-unity.html#answer-284522) が、私のゲームでは行う必要がありますこれ。

両方のエージェント (パイロット A とパイロット B) が飛行機の速度を変更する必要があります。擬似コードは次のとおりです。

if (speed < threshold)
   speed += 1

ロックがなく、現在の速度: 速度 = しきい値 - 1 の場合。パイロット A がチェックして速度がしきい値未満であることを確認すると、速度を増加させます。彼がそれを行っているとき、パイロット B はチェックし、速度 < しきい値も確認し、それを再度インクリメントします。そのため、速度が大幅に増加し、2 倍になり、最終的に >= しきい値になる可能性があります。飛行機が墜落します。

Unity がこれをサポートしていないことに驚きました。回避策は何ですか?

ありがとう。

4

1 に答える 1

1

参照してください: http://answers.unity3d.com/questions/146372/are-update-and-fixedupdate-called-in-different-thr.html

存在しないスレッドの同時実行が心配です。Unity3D Update() 呼び出しはマルチスレッド化されていません。あなたが含めたリンクは、Unity3D がスクリプトの順序を保証しないと言っていますが、それは本当です。ただし、これは、A が B の前に来るかどうかを Unity が保証しないことを意味します。2 つのスクリプトが同時に同じ値を更新することはできません。

于 2012-07-16T03:17:43.600 に答える