2024
11.07

 

튜토리얼 구현 때문에 마우스를 클릭했을 때

마우스가 특정 네모 영역 (여기서는 특정 버튼) 위에 있었는지를 체크하려고 했다.

 

처음 구현은 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);
}

 

 

'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글

C# Enumerable.SequenceEqual 시퀀스 같음  (1) 2024.05.28
C# 클래스, 구조체, 레코드의 같음  (0) 2024.05.27
소수의 판별  (0) 2023.01.25
약수의 개수  (0) 2023.01.25
C# LINQ GroupBy, Group by into  (0) 2023.01.07