본문 바로가기

코딩 공부/Unity C#

Unity 텍스트 출력 (Canvas, HUD)

게임에 사용자 인터페이스나 UI 요소를 추가하기 위한 큰 아이디어

: Canvas에 해당 요소를 넣는다 (2D 게임에서)

 

씬 뷰에서 오른쪽 클릭 - UI - Canvas 클릭

>>> 하이라키 창에 Canvas 오브젝트가 생성됨 

- TextMeshPro 를 사용하기 위해서 추가적으로 패키지를 임포트할 필요가 있다

캔버스를 추가할 때 이벤트 요소도 추가된다

(메뉴 버튼과 상호작용하거나 게임의 일부로 텍스트 입력을 제공하는 경우 이벤트 시스템이 필요하다)

 

- Canvas의 이름을 HUD로 변경

- HUD에 Text - TextMeshPro 를 클릭하여 추가

- 아까와 같이 실행하면 게임뷰에서 텍스트가 뜬다

텍스트를 상단에 고정시키는 앵커

- 텍스트를 특정 위치에 고정시킬 수 있다

- 해상도가 변화해도 텍스트는 특정 위치에 고정되어 있다

캔버스의 인스펙터 창

- UI Sclae Mode를 Scale With Sreen Size로 변경한다, 스크린 사이즈에 따라 텍스트의 크기가 조정됨

- Constant Pixel Size는 텍스트의 크기가 고정되는 모드이며, 매우 비추천

- 텍스트의 너비와 높이, 굵기 등 여러 설정을 조작할 수 있다

- 'HUD' 태그를 추가하여 HUD의 태그를 설정한다

- HUD에 HUD 스크립트를 부착한다


HUD 스크립트

- TextMeshProGUI 데이터 타입을 사용하려면 using TMPro 지시문이 필요하다

- 점수를 표시하기 위해 int 형의 score 변수를 저장하였다

- TextMeshProGUI 객체에 대한 참조이며, text 속성에 엑세스할 수 있다
- text를 string으로 설정하기 위해 ToString 메서드로 score변수를 string으로 변환한다

(TextMeshPro는 유니티 레퍼런스와 통합되어 있지 않음. 

해당 정보에 대해 알고 싶다면 구글에 Unity TextMeshPro를 검색하여 문서를 찾자.)

 

- HUD 스크립트의 유일한 다른 점: void 타입 공개 메서드가 존재한다
- score 점수를 증가시킨다
- 변경된 score 변수의 값을 적용하기 위해 텍스트를 설정한다
- 해당 메서드를 호출하기 가장 적절한 오브젝트는 TeddyBear이다.

 

TeddyBear 스크립트

- TeddyBear가 파괴됐을 때 해당 메서드를 호출해서 게임에 포인트를 추가할 수 있기 떄문에 가장 적절하다

- TeddyBear의 가치를 설정하는 변수 BearPoints를 저장한다

update score 부분 추가

- 곰돌이가 물고기와 충돌해서 곰돌이가 죽으면 HUD에서 점수를 업데이트해야 한다
- GetComponent 메서드로 HUD에 연결된 HUD스크립트를 가져와서 hud 변수에 저장한다

- 저장된 hud에서 AddPoints 메서드에 접근한다. BearPoints만큼 점수 추가.

 

- Score Text에 텍스트를 넣지 않으면 빌드 시 null 오류가 발생한다

- 위의 사진같이 하면 오류 해결