새소식

C#,Unity Programming

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 등 말도 안되는 키워드로 구글링 삽질을 하다가, 결국 공식포럼에서 확인할 수 있었다. 인스펙터창에 빈 변수에 오브젝트를 할당하는 것을 "레퍼런스로 할당한다"고 표현한다는 것도 이번에 알게 되었다.

 

대부분에게는 너무 당연한 내용이라 찾기가 어려웠는지, 검색키워드가 문제였는지는 잘 모르겠지만, 혹시나 같은 문제로 헤매는 분이 계신다면 도움이 되었으면 한다.

 

 

Contents
  • -

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.