/// <summary> /// Initialize selected object. /// </summary> /// <param name="_prefab"> Prefab asset reference. </param> /// <param name="_callBack"></param> /// <returns> False if there is no this prefab type in PoolHandler setup. /// True if you setted this type up. </returns> private bool InitializeObject(AssetReference _prefab, Action <PoolObject> _callBack) { PoolObject _poolObject = null; int _poolIndex = -1; if (TryFindPoolObjectDataByAssetReference(_prefab, ref _poolIndex) == false) { Debug.LogWarning("There is no this prefab type in setup"); return(false); } ObjectsRegister _register = objectPools[_poolIndex].Register; if (_register.TryGetAvailableObject(ref _poolObject) == true) { objectPools[_poolIndex].UpdateRegister(_register); _poolObject.OnHandlerReturnInvoke += ReturnToPool; _callBack?.Invoke(_poolObject); _poolObject.GetFromPool(_poolIndex); return(true); } ObjectInstatniationCallback _instatniationCallback = InitializeNewPoolObject; InvokeData _invokeData = new InvokeData(_poolObject, _poolIndex, _callBack); StartCoroutine(InstantiateObject(_prefab, _instatniationCallback, _invokeData)); return(true); }