RectTransform 스크린 좌표로 변환해서 위치값 찾기
특정 상황에서 Target Object를 기준으로 좌표를 처리해야하는 작업에서
유용하게 사용한 코드이다.
반응형
< 코드 >
public Vector3 GetOffsetPosition()
{
if (targetTranform == null || Camera.main == null)
{
Debug.LogError("Target Transform 또는 Main Camera가 없습니다!");
return Vector3.zero;
}
// 타겟의 월드 좌표 가져오기
Vector3 worldPosition = targetTranform.position;
Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(Camera.main, worldPosition);
// ScrollRect의 content를 기준으로 좌표 변환 (범용적으로 처리)
RectTransform parentRect = targetTranform.GetComponentInParent<RectTransform>();
RectTransform scrollContent = targetTranform.GetComponentInParent<ScrollRect>()?.content;
Vector2 localPoint;
if (scrollContent != null)
{
// targetTranform이 ScrollRect 내부에 있을 경우
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(scrollContent, screenPoint, Camera.main, out localPoint))
{
localPoint += offsetPosition;
return scrollContent.TransformPoint(localPoint); // ScrollRect 기준으로 변환
}
}
else if (parentRect != null)
{
// 일반적인 UI 요소일 경우
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRect, screenPoint, Camera.main, out localPoint))
{
localPoint += offsetPosition;
return parentRect.TransformPoint(localPoint); // RectTransform 기준으로 변환
}
}
Debug.LogError("스크린 좌표 -> 로컬 좌표 변환 실패");
return worldPosition;
}
월드 좌표로 계산한 좌표를 기준으로 Offset 처리를 할 수 있다.
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity) OnGUI Attribute 작업하기 (0) | 2025.02.18 |
---|---|
Unity) 특정 주기마다 호출되는 코드 만들기 (PeriodicInvoker) (1) | 2025.02.13 |
Unity) 2D Grid 만들기 ( 2D Grid ) (0) | 2025.02.04 |
개발) 문자열 검색 필터(*와일드 카드 , 정규식 변환 활용하기) (0) | 2025.01.31 |
Unity) Main Thread Dispactcher (메인 쓰레드에서 사용하기) (0) | 2025.01.27 |
댓글