Buffer icon Проекты

7 октября 2016-го

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Выполнение в главном потоке 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 {
// выполнение в главном потоке
}));
19 сентября 2016   · · ·
← Ctrl →
· · ·   17 октября 2016