🌍 C# Study/C# 케이스 스터디
유니티 마우스가 특정 영역에 있는지 체크
맨텀
2024. 11. 7. 14:20
튜토리얼 구현 때문에 마우스를 클릭했을 때
마우스가 특정 네모 영역 (여기서는 특정 버튼) 위에 있었는지를 체크하려고 했다.
처음 구현은 RectTransform.GetCornerWorldPoint 를 사용하는 것.
이 함수는 코너 영역을 얻어올 수 있어서 툴팁을 만들 때 유용하게 사용했었다.
Vector3 leftBottom = (_unmaskFocus.transform as RectTransform).GetCornerWorldPoint(CornerPoint.LeftBottom);
Vector3 rightTop = (_unmaskFocus.transform as RectTransform).GetCornerWorldPoint(CornerPoint.RightTop);
var mousePos = Input.mousePosition;
if (mousePos.x >= leftBottom.x && mousePos.y >= leftBottom.y && mousePos.x <= rightTop.x && mousePos.y <= rightTop.y)
{
CallButtonEvent();
}
그런데 찾아보니 RectTransformUtility에 rectTransform위에있는지를 체크하는
RectTransformUtility.RectangleContainsScreenPoint 함수가 제공되고 있었다!
RectTransform rectTransform = _unmaskFocus.transform as RectTransform;
if (rectTransform != null && RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition))
{
CallButtonEvent();
}
함수로 뺀다면 다음과 같은 형태가 된다.
if (IsMouseOverUnMask())
CallButtonEvent();
bool IsMouseOverUnMask()
{
if (_unmaskFocus == null) return false;
if (_unmaskFocus.transform is not RectTransform rectTransform) return false;
return RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition);
}