Выполнение в главном потоке Unity
Обновлено 18.09.2017
Лучше использовать Dispatcher из UnityToolbag.
Как в Unity быстро запустить процедуру в основном потоке? Для таких вещей, у меня есть маленький скрипт Tasker.
using UnityEngine;
using System.Collections.Generic;
public delegate void Task ();
public class Tasker : MonoBehaviour {
private static Tasker _instance;
private Queue<Task> _taskQueue = new Queue<Task> ();
private object _queueLock = new object ();
void Awake () {
_instance = GetComponent<Tasker>();
}
void FixedUpdate () {
lock (_queueLock) {
if (_taskQueue.Count > 0)
_taskQueue.Dequeue ()();
}
}
public static void Run (Task newTask) {
lock (_instance._queueLock) {
if (_instance._taskQueue.Count < 100)
_instance._taskQueue.Enqueue (newTask);
}
}
}
Чтобы запустить что-то в главном потоке, нужно вызвать функцию Run:
Tasker.Run (new Task (delegate {
// выполнение в главном потоке
}));