public System.Object GetOne() { lock (this) { if (_listFreeIndex.Count == 0) { if (_nCurrentSize == _nCapacity) { UnityEngine.Debug.LogError("ObjectPool has no more capacity to create new object"); return(null); } PoolItem pnewitem = new PoolItem(_typeObject, _objCreateParam); Debug.Log("Create New PoolItem!! ID:" + pnewitem.InnerObjectHashcode); _listObjects.Add(pnewitem.InnerObjectHashcode, pnewitem); _listFreeIndex.Add(pnewitem.InnerObjectHashcode); _nCurrentSize++; } //Debug.Log("UsingIndex Add Object :" + _listFreeIndex[0]); int nFreeIndex = (int)_listFreeIndex[0]; PoolItem pitem = (PoolItem)_listObjects[nFreeIndex]; _listFreeIndex.RemoveAt(0); _listUsingIndex.Add(nFreeIndex); //Debug.Log("UsingIndex Add Object :" + nFreeIndex); if (!pitem.IsValidate) {//这里需要注意,Recreate()很可能会改变InnerObject的HashCode, //所以考虑在这里,使用 pitem.Recreate(); if (nFreeIndex != pitem.InnerObjectHashcode) { _listObjects.Remove(nFreeIndex); _listUsingIndex.Remove(nFreeIndex); nFreeIndex = pitem.InnerObjectHashcode; _listObjects.Add(nFreeIndex, pitem); _listUsingIndex.Add(nFreeIndex); } } pitem.Using = true; return(pitem.InnerObject); } }