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