개발/Unity
Unity) RectTransform 스크린 좌표로 변환해서 위치값 찾기
테샤르
2025. 2. 12. 23:30
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 처리를 할 수 있다.
★☆☆☆☆
반응형