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

 

★☆☆☆☆

 

반응형