0

我了解到在 Unity3d 中没有明确的同步锁定 (http://answers.unity3d.com/questions/284228/how-to-synchronize-in-unity.html#answer-284522) 但在我的游戏中我需要这样做这个。

两个代理(飞行员 A 和飞行员 B)都需要修改飞机的速度。伪代码是:

if (speed < threshold)
   speed += 1

如果没有锁,并且当前速度:speed=threshold-1。当飞行员 A 检查并看到速度 < 阈值时,他会增加它。当他这样做时,飞行员 B 检查,他也看到速度 < 阈值,他再次增加它。所以速度可能会变得疯狂,增加两次并最终> =阈值。飞机会坠毁。

我知道这只是一个简单的同步示例,令 Unity 不支持这一点感到惊讶。解决方法是什么?

谢谢。

4

1 回答 1

1

请参阅: http ://answers.unity3d.com/questions/146372/are-update-and-fixedupdate-call-in-different-thr.html

您担心不存在的线程并发。Unity3D Update() 调用不是多线程的。您包含的链接说 Unity3D 不保证脚本顺序,这是真的。但这意味着 Unity 不能保证 A 是否在 B 之前。2 脚本不能同时更新相同的值。

于 2012-07-16T03:17:43.600 回答