게임을 만들다 보면 게임오브젝트에 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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
위와 같은 스크립트 코드를 추가하면 H2가 두 개 이상이거나 H3가 두 개 이상인 경우 첫 번째 H2 헤딩 태그 앞에 목차를 표시합니다. 만약 H2가 한 개도 없으면 목차가 표시되지 않습니다. H3 이상부터 있는 경우에는 코드를 조금 수정해야 합니다. 다음과 비슷하게 하면 잘 작동합니다.