2018년 10월 18일 목요일

WorldToScreenPos in UGUI

개발 중인 게임의 UGUI 캔버스 모드가 Screen Space - Overlay 에서 Screen Space - Camera 로 변경되게 되었다.

별 일 없을줄 알았는데, 월드 좌표를 UI 좌표로 바꿨을때 이생해져서 열심히 구글링을 한 결과, Render Mode에 따라 변환하는 방식이 다르다는것을 알게되었다.

Overlay 모드에서는 단순히 

rectTransform.position = RectTransformUtility.WorldToScreenPoint (Camera.main, target.position);

로 해결되었지만 Camera모드에서는 좀더 복잡한 계산이 필요하다

  var pos = Vector2.zero;
  var uiCamera = Camera.main;
  var worldCamera = Camera.main;
  var canvasRect = canvas.GetComponent<RectTransform> ();

  var screenPos = RectTransformUtility.WorldToScreenPoint (worldCamera, target.position);
  RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, screenPos, uiCamera, out pos);
  rectTransform.localPosition = pos;


참고 링크

일본 개발자들이 정리를 참 깔끔하게 하는것 같다. 번역도 편하고.

댓글 1개:

  1. 너무 필요하던 정보였습니다. 감사합니다

    답글삭제