public void Update() { int count = 0; if (instantiateQueue.Count > instantiateLimit) { count = instantiateLimit; } else { count = instantiateQueue.Count; } for (int i = 0; i < count; i++) { InstantiateTask task = instantiateQueue.Dequeue(); GameObject result = Instantiate(task.prefab); if (task.callback != null) { task.callback(result); } if (task.completion != null) { task.completion.TrySetResult(result); } } }
/// <summary> /// 单线程异步分帧加载 /// </summary> /// <param name="prefab"></param> /// <returns></returns> public static UniTask <GameObject> InstantiateAsync(GameObject prefab) { UniTaskCompletionSource <GameObject> source = new UniTaskCompletionSource <GameObject>(); InstantiateTask task = new InstantiateTask(prefab, source, null); Instance.instantiateQueue.Enqueue(task); return(source.Task); }
/// <summary> /// 单线程异步分帧加载 /// </summary> /// <param name="prefab"></param> /// <returns></returns> public static void InstantiateAsync(GameObject prefab, Action <GameObject> callback) { InstantiateTask task = new InstantiateTask(prefab, null, callback); Instance.instantiateQueue.Enqueue(task); }