使用委托时,报了如上错误,大致意思是,你不能在委托中使用XXX方法,只能在主线程中使用
那么咱们对症下药:将需要使用的代码放到主线程中去使用
步骤一:
在任意位置创建一个新脚本命名为:"MainThreadDispatcher",将下面代码复制粘贴到该脚本内。并将其挂接到场景中任意的物体上
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class MainThreadDispatcher : MonoBehaviour
{
private static MainThreadDispatcher instance;
private Queue<Action> actionQueue = new Queue<Action>();
private void Awake()
{
if (instance == null)
{
instance = this;
}
else
{
Destroy(gameObject);
}
}
private void Update()
{
lock (actionQueue)
{
while (actionQueue.Count > 0)
{
Action action = actionQueue.Dequeue();
action.Invoke();
}
}
}
public static void RunOnMainThread(Action action)
{
lock (instance.actionQueue)
{
instance.actionQueue.Enqueue(action);
}
}
}
步骤二:
在报错的委托中使用如下方法
MainThreadDispatcher.RunOnMainThread(() =>
{
// 输入你要运行的代码
});
注意:一定要将"步骤一"中创建的脚本放在场景中
小白第一次发布文章,有错误望指正
如果侵权,请联系我