C# 脚本中的线程安全

Thread safety in C# scripts

我正在为一款名为 Rust using a modding framework called Oxide 的游戏编写插件。我想知道我是否需要关注插件中的同步。统一的所有脚本(C# 或其他)都在同一个线程上执行吗?

是的,它们都是在主线程上执行的,事实上,当您尝试在主线程之外执行操作时,unity 真的不喜欢它。您进行的任何 Unity3D 特定调用(任何 Unity 命名空间中的任何内容)都必须在主线程上执行,否则您可能会得到非常模糊的错误,并且当错误确实发生在主线程之外时,unity 不会报告它们,也不会提供堆栈跟踪。

大多数人绕过 Unity 多线程的方法是创建一个 MonoBehaviour 对象,该对象启动不直接在另一个线程中涉及 unity 的处理,然后在完成后将其存储在 MonoBehaviour 对象中。然后,MonoBehaviour 对象可以检查每个更新,以查看它需要的数据是否已准备好进行特定于统一的调用,如果准备就绪,则执行此操作。