Unity では、子スレッドでのメインスレッドのメソッドの呼び出しは、Unity が提供するメインスレッドのタスクキューを使用して実現できます。これは、次の手順に従って行うことができます。
1. デリゲート型を定義し、メインスレッドで実行する必要があるメソッドを宣言します。
public delegate void MainThreadAction();
2. メイン スレッドで実行する必要があるメソッドを格納するために、メイン スレッドで実行されるメイン スレッド タスク キューを作成します。
public static class MainThreadTaskQueue
{
private static readonly Queue<MainThreadAction> tasks = new Queue<MainThreadAction>();
private static readonly object queueLock = new object();
public static void EnqueueTask(MainThreadAction action)
{
lock (queueLock)
{
tasks.Enqueue(action);
}
}
public static void ExecuteTasks()
{
lock (queueLock)
{
while (tasks.Count > 0)
{
var task = tasks.Dequeue();
task?.Invoke();
}
}
}
}
3. 子スレッドのメインスレッドのタスクキューを使用して、メインスレッドで実行する必要があるメソッドを呼び出します。
// 示例子线程方法
private void SomeBackgroundThreadMethod()
{
// 在子线程中添加任务到主线程任务队列
MainThreadTaskQueue.EnqueueTask(() =>
{
// 这里是需要在主线程中执行的代码
MyMethod();
});
}
// 在主线程 Update 或其他适当的地方执行主线程任务队列中的方法
private void Update()
{
MainThreadTaskQueue.ExecuteTasks();
}
注: Unity の API のほとんどはメイン スレッドでのみ呼び出すことができるため、スレッド間で呼び出す場合は、メイン スレッドで実行する必要があるコードをデリゲートでラップし、メイン スレッドを介して渡す必要があることに注意してください。 . 実行をスケジュールするためのタスクキュー。また、キュー内のタスクを実行するには、メインスレッド内の適切な場所でメインスレッドのタスクキューの ExecuteTasks メソッド (Update メソッドなど) を必ず呼び出してください。