Избранное Все заметки GitHub icon Мой Github Обо мне

Выполнение в главном потоке 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 {
// выполнение в главном потоке
}));
Поделиться
Отправить
Популярное