게임을 만들다 보면 게임오브젝트에 UI를 띄워야 하는 경우가 생긴다.
Canvas를 오브젝트마다 넣어 주고 RenderMode를 World Space로 만드는 방법도 있지만 그건 개발속도를 너무 더디게 만든다는 생각이 들었다.
그래서 스크린에 그려진 UI를 게임오브젝트의 위치로 옮기는 방법을 선택했다.
Camera uiCamera;
RectTransform targetRectTransform;
.
.
//월드 좌표를 스크린의 좌표로 변환
var screenPos = Camera.main.WorldToScreenPoint(gameObject.transform.position);
//RectTrensform 좌표값을 받을 변수
var localPos = Vector2.zero;
//스크린 좌표를 RectTrensform 기준의 좌표로 변화
RectTransformUtility.ScreenPointToLocalPointInRectangle
(parentRectTransform,screenPos,uiCamera,out localPos);
//UI 위치 변화
targetRectTransform.localPosition = localPos;
uiCamera의 경우 UI만을 위해 따로 만든 카메라다.
Clear Flags를 Depth only로 바꾸고 Culling Mask를 UI만 설정한다.
그리고 RectTransformUtility.ScreenPointToLocalPointInRectangle의 인자들을 설명하면
(
parentRectTransform : 부모가 될 RectTransform(보통 Canvas지만 당연히 아닐수도 있다.)
, screenPos : gameObject의 월드좌표를 변환시킨 스크린 좌표
, uiCamera : UI를 그리고 있는 카메라
, localPos : 스크린 좌표를 RectTranform 좌표로 변화시킨 데이터가 저장되는 변수
)
'게임 프로그래밍 > Unity' 카테고리의 다른 글
| AddComponent (0) | 2021.11.12 |
|---|---|
| Github와 유니티 연동하기 (0) | 2021.11.12 |
| 스크립트로 sprite 불러오기 (0) | 2021.11.12 |
| 캔버스 옵션 설명 (0) | 2021.11.12 |
| 게임오브젝트를 프리팹과 끊는 법 (0) | 2021.11.12 |




최근댓글