본문 바로가기
개발/Unity

Unity) RectTransform 스크린 좌표로 변환해서 위치값 찾기

by 테샤르 2025. 2. 12.

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 처리를 할 수 있다.

 

★☆☆☆☆

 

반응형

댓글