产生原因:由于跨线程访问数据,因为在Unity中,继承mono的组件都在主进程上访问数据,当你在新的线程访问任何组件基本上都会存在这个问题。
解决办法:通过继承Mono的组件,通过事件监听的方式对方法进行执行
声明:MainThreadCall,类,挂载在场景的场景中
public class MainThreadCall : MonoBehaviour
{
static object locker = new object();
static List<Action> aList = new List<Action>();
static int count = 0;
public static int MainThreadID { get; private set; }
private void Awake()
{
MainThreadID = Thread.CurrentThread.ManagedThreadId;
}
// Update is called once per frame
void Update()
{
if (count != 0)
{
lock (locker)
{
foreach (var a in aList)
&nbs

该博客介绍了Unity中因跨线程访问数据导致的问题及其解决方案。通过创建MainThreadCall类,利用MonoBehaviour的Update方法在主线程中安全执行回调,确保对组件的正确访问。此外,还提供了一组静态方法来安全地封装不同参数数量的方法调用。
最低0.47元/天 解锁文章
9899





