[내일배움캠프] 유니티 심화 개인과제 STEP 01 ~ 03

이민호·2025년 6월 9일
0

금일 프로젝트 진행도

Main Menu

Status Menu

오늘은 프로젝트의 UI를 대략적으로 다 만들었고, 필요한 스크립트를 작성하여 연결하였다.

금일의 문제점 및 해결

1. GetComponentInChildren<>()

보통 자식 오브젝트에 붙어있는 컴포넌트를 할당하기 위해서 GetComponentInChildren<>()를 사용한다. 하지만 Canvas의 자식 오브젝트들의 컴포넌트를 찾아와 할당하려 했지만 이상하게 두 개의 NULL이 발생했다.

당시 작성한 코드

_mainMenu = GetComponentInChildren<UIMainMenu>(); 
_status = GetComponentInChildren<UIStatus>();
_inventory = GetComponentInChildren<UIInventory>();

코드는 잘 못되지 않았다고 생각했기에 에디터를 실행하며 뭐가 문제인지 확인했다. 이를 통해 확인한 사실은 만약 오브젝트가 비활성화, 즉 오브젝트의 SetActive = false이라면 해당 오브젝트의 컴포넌트를 검색하지 않기에 일어난 일이였다.

의외로 이 문제의 해결 방법은 매우 간단한데, 사용할 일이 없을 것만 같던 ( )안에 true를 넣으면 오브젝트의 활성 비활성과 관계 없이 모두 검색을 한다.

문제를 해결한 코드

_mainMenu = GetComponentInChildren<UIMainMenu>(true); 
_status = GetComponentInChildren<UIStatus>(true);
_inventory = GetComponentInChildren<UIInventory>(true);

2. TextMeshPro와 TextMeshProUGUI

문제의 코드

public TextMeshPro jobText;
public TextMeshPro nameText;
public TextMeshPro levelText;

TextMeshPro의 텍스트에 접근하기 위해 위 코드를 작성하고 유니티에서 드래그로 TMP 오브젝트를 넣으려고 했는데 넣어지지 않는 문제가 발생했다.

정말 맞게 작성했는데 뭐가 문제일까라는 의문으로 지피티의 자문을 구하였는데, 지피티의 답은 이랬다.

TextMeshPro는 3D 텍스트로, MeshRenderer를 사용하는 경우에 사용하고, TextMeshProUGUI는 Unity GUI(주로 Canvas 위에 표시되는 UI 요소)에서 텍스트를 렌더링하는 데 사용되며 주로 2D 게임의 UI 텍스트 표시에 사용됩니다.

지피티의 답을 보고 코드를 수정하여 문제를 해결하였다.

수정된 코드

public TextMeshProUGUI jobText;
public TextMeshProUGUI nameText;
public TextMeshProUGUI levelText;
profile
게임 개발을 꿈꾸는 남자

0개의 댓글