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());
            }
        }