示例#1
0
    /// <summary>
    /// 判读左右吸附
    /// </summary>
    /// <param name="vector3"></param>
    public void IsLeftAnRight(Vector3 vector3, bool isShake = true)
    {
        Vector3 left  = new Vector3(-(_canvasScaler.referenceResolution.x / 2) + (_btnRect.sizeDelta.x / 2), vector3.y);
        Vector3 right = new Vector3((_canvasScaler.referenceResolution.x / 2) - (_btnRect.sizeDelta.x / 2), vector3.y);

        float radiusY = _thisRect.rect.height / 2;
        float maxY    = radiusY - _btnRect.sizeDelta.y / 2;
        float minY    = (-radiusY) + _btnRect.sizeDelta.y / 2;

        float distanceLeft  = Vector3.Distance(vector3, left);
        float distanceRight = Vector3.Distance(vector3, right);

        if (vector3.y > maxY)
        {
            vector3 = new Vector3(vector3.x, maxY);
        }
        else if (vector3.y < minY)
        {
            vector3 = new Vector3(vector3.x, minY);
        }

        if (distanceLeft < distanceRight)
        {
            _btn.localPos          = new Vector2(left.x, vector3.y);
            _btnRect.localPosition = new Vector2(left.x, vector3.y);
        }
        else
        {
            _btn.localPos          = new Vector2(right.x, vector3.y);
            _btnRect.localPosition = new Vector2(right.x, vector3.y);
        }

        if (isShake)
        {
            StartCoroutine(ChatTool.BtnShake(_btnRect, new Vector3(10, 0, 0), 1, 500, () =>
            {
                _canvasGroup.alpha = 0.5f;
                IsLeftAnRight(_btnRect.localPosition, false);
                StopAllCoroutines();
            }));
        }
    }