Unity TextMeshPro(TMP) public text 텍스트로 넣는 방법(레퍼런스 할당)
-
728x90
TextMeshPro 오브젝트가 Text에 할당이 안된다.
대부분의 유니티 강의들이 UI를 구성할 때 레거시 Text로 예시를 보여주고 있다.
하지만 레거시가 레거시가 되는 이유는 분명히 있을 것이고, 유니티에서 TextMeshPro(TMP)를 추천하고 있으므로 언젠가는 완전히 대체될 수도 있지않을까 생각해서 나도 TMP를 쓰기 시작했다.
레거시 Text 와 사용법도 동일하고, 스타일이나 쉐이더 등 보다 다양한 옵션들을 쓸 수 있어서 용이하다.
그런데 뜬금없는 포인트에서 문제가 발생했다.
UIManager에서 텍스트를 컨트롤하기 위해 text를 public으로 선언 후 인스펙터에서 TMP 오브젝트를 할당하려하자, 할당이 안되는 것.
public class UIManager : MonoBehaviour
{
public Text goldDisplayer;
public DataController dataController;
void Update()
{
goldDisplayer.text = "GOLD: " + dataController.GetGold();
}
}
Text는 UnityEngine.UI의 클래스로 text오브젝트만 할당 받을 수 있기 때문.
TMP는 TMP로 정의해서 할당하자.
TextPeshPro로 생성한 오브젝트는 UnityEngine.UI가 아니라 TMPro라는 다른 네임스페이스에 속한 클래스를 활용한다.
코드 상단에 using TMPro 를 작성해주고, Text가 아닌 TextMeshProUGUI 클래스를 public으로 변수선언해주면 TMP text를 레퍼런스로 할당할 수 있게 된다. 코드는 아래.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro; // 네임스페이스
public class UIManager : MonoBehaviour
{
public TextMeshProUGUI goldDisplayer; // TMP로 수정
public DataController dataController;
void Update()
{
goldDisplayer.text = "GOLD: " + dataController.GetGold();
}
}
TextMeshPro text 추가, 할당, TextMeshPro public text 등 말도 안되는 키워드로 구글링 삽질을 하다가, 결국 공식포럼에서 확인할 수 있었다. 인스펙터창에 빈 변수에 오브젝트를 할당하는 것을 "레퍼런스로 할당한다"고 표현한다는 것도 이번에 알게 되었다.
대부분에게는 너무 당연한 내용이라 찾기가 어려웠는지, 검색키워드가 문제였는지는 잘 모르겠지만, 혹시나 같은 문제로 헤매는 분이 계신다면 도움이 되었으면 한다.