private AssetReferenceGameObjectPool(AssetReferenceGameObject _reference, string _referenceKey, int _capacity, Transform _parent, Scene _scene, string _rootName) { if (_rootName != null) { var root = new GameObject(_rootName); SceneManager.MoveGameObjectToScene(root, _scene); parent = root.transform; parentCreatedAtRuntime = true; } else { parent = _parent; parentCreatedAtRuntime = false; } reference = _reference; referenceKey = _referenceKey; aliveCount = 0; currentUsingIndex = 0; expandCount = Mathf.Max(1, _capacity / 2); list = new List <AssetReferenceGameObjectTracker>(_capacity); if (reference != null) { for (int i = 0; i < _capacity; ++i) { list.Add(reference.InstantiateAsyncAndTrack(OnInstantiateDone, parent)); } } else { for (int i = 0; i < _capacity; ++i) { list.Add(referenceKey.InstantiateAsyncAndTrack(OnInstantiateDone, parent)); } } OnListExpanded(list.Count); }
public GameObject TryGet() { if (list == null) { return(null); } if (currentUsingIndex >= aliveCount) { if (aliveCount == list.Count) { //EXPAND if (reference != null) { for (int i = 0; i < expandCount; ++i) { list.Add(reference.InstantiateAsyncAndTrack(OnInstantiateDone, parent)); } } else { for (int i = 0; i < expandCount; ++i) { list.Add(referenceKey.InstantiateAsyncAndTrack(OnInstantiateDone, parent)); } } OnListExpanded(list.Count); } return(null); //还没加载完毕 } else { ++currentUsingIndex; return(list[currentUsingIndex - 1].AsGameObject()); } }