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