튜토리얼 구현 때문에 마우스를 클릭했을 때
마우스가 특정 네모 영역 (여기서는 특정 버튼) 위에 있었는지를 체크하려고 했다.
처음 구현은 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 |