private ICarouselElement FindCenterElement(float deltaX)
    {
        ICarouselElement centerElement = null;

        for (int i = 0; i < elements.Count; i++)
        {
            if (elements[i] == currentElement)
            {
                if (deltaX > 0 && i > 0)
                {
                    centerElement = elements[i - 1];
                    numberLvl     = i - 1;
                }
                else if (deltaX < 0 && i < elements.Count - 1)
                {
                    centerElement = elements[i + 1];
                    numberLvl     = i + 1;
                }
                else
                {
                    centerElement = currentElement;
                }
                break;
            }
        }
        return(centerElement);
    }
    private ICarouselElement FindCenterElement(float deltaX)
    {
        ICarouselElement centerElement = null;
        int k = 0;

        for (int i = 0; i < elements.Count; i++)
        {
            if (elements[i] == currentElement)
            {
                k = i + 1;

                if (deltaX > 0 && i - 1 >= 0)
                {
                    centerElement        = elements[i - 1];
                    NumberLvl            = (k - 1);
                    textNumberLevel.text = NumberLvl.ToString();
                }
                else if (deltaX < 0 && i + 1 < elements.Count)
                {
                    centerElement        = elements[i + 1];
                    NumberLvl            = (k + 1);
                    textNumberLevel.text = NumberLvl.ToString();
                }
                else
                {
                    centerElement = currentElement;
                }
                break;
            }
        }
        return(centerElement);
    }
    private void CheckCurrentElement(float deltaX)
    {
        ICarouselElement centerElement = FindCenterElement(deltaX);

        if (centerElement != currentElement)
        {
            SetCurrentElement(centerElement);
        }
    }
    private IEnumerator TweenToElement(ICarouselElement target)
    {
        while (true)
        {
            Vector2 currentPosition = target.Position;
            Vector2 targetPosition  = Vector2.Lerp(currentPosition, Vector2.zero, tweenSpeed * Time.deltaTime);
            foreach (var element in elements)
            {
                element.Translate(targetPosition - currentPosition);
            }

            if (Mathf.Abs(target.Position.x) < 0.01f)
            {
                yield break;
            }
            yield return(null);
        }
    }
    /// <summary>
    /// Инициализация элементов карусели
    /// </summary>
    public void Initialization()
    {
        StopAllCoroutines();
        buttonLvl[0].onClick.AddListener(() => ChangePage(false));
        buttonLvl[1].onClick.AddListener(() => ChangePage(true));

        numberLvl      = 0;
        currentElement = null;

        elements = new List <ICarouselElement>();

        foreach (RectTransform child in transform)
        {
            AddElement(child);
        }
        elementsIndex = new List <ICarouselElement>(elements);

        SetCurrentElement(elementsIndex[0]);
    }
    private void SetCurrentElement(ICarouselElement element)
    {
        buttonLvl[0].gameObject.SetActive(true);
        buttonLvl[1].gameObject.SetActive(true);

        if (elements.Count == 1)
        {
            buttonLvl[0].gameObject.SetActive(false);
            buttonLvl[1].gameObject.SetActive(false);
        }
        else if (numberLvl == 0)
        {
            buttonLvl[0].gameObject.SetActive(false);
        }
        else if (numberLvl == elements.Count - 1)
        {
            buttonLvl[1].gameObject.SetActive(false);
        }

        currentElement = element;
    }
    private void SetCurrentElement(ICarouselElement element)
    {
        for (int i = 0; i < elements.Count; i++)
        {
            buttonLvl[0].SetActive(true);
            buttonLvl[1].SetActive(true);
            if (NumberLvl == 1)
            {
                buttonLvl[0].SetActive(false);
            }
            else if (NumberLvl == 2)
            {
                buttonLvl[1].SetActive(false);
            }

            if (element == elementsIndex[i])
            {
                OnChangeElement?.Invoke(i);
            }
        }
        currentElement = element;
    }