본문 바로가기
Unity 공부

[Unity] Text Mesh Pro Text (TMP text) Script 동적 생성 / 제어하기

by 개발하는 디토 2022. 10. 21.

TMP Text를 동적으로 생성해야 하는 일이 있었는데 Component 접근과 Font 변경에서 헤맸다.

그래서 정리해보는 TMP text Script로 동적 생성 및 제어하기!

 

요약

동적 생성 gameObject.AddComponent<TextMeshProUGUI>();
폰트 변경 미리 Font Asset을 Inspector 창에서 받아놓고 TMP component의 Font에 넣어준다.

public TMP_FontAsset font = 사용할 폰트;
TMP_Text.font = font;
텍스트 사이즈 변경 TMP_Text.fontSize = 13;
텍스트 정렬 TMP_Text.alignment = TextAlignmentOptions.Midline;

사실 이것 말고도 옵션이 많은데 기본적으로 텍스트 생성할 때 건드리는 부분이 글씨 크기, 폰트, 정렬이라서 일단 이것만 정리해봤다.

 

헤맨 부분

보통 TextMeshPro - Text component를 Script에서 받을 때 자료형을 TMP_Text로 선언하기 때문에 AddComponent<TMP_Text>() 로 Text Mesh Pro의 Text component를 더해주어야 하는 줄 알았는데 아니었다...!

AddComponent<TextMeshProUGUI>()를 사용한다! 3D Object - Text Mesh Pro를 생성할 때에는 TextMeshPro component를 더해주면 된다.

 

3D 텍스트

 

UI 텍스트

 

Text Alignment

TextMeshPro Text의 장점은 정렬이 다양하다는 것인데 이것을 코드로 설정하기 위해서는 TestAlignmentOptions의 종류를 알아야할 필요가 있다. 마우스를 가져다 대면 하나씩 옵션 이름이 뜬다. 그것을 기초로 enum TextAlignmentOptions에서 접근할 수 있다.

Alignment 옵션 종류

Text Alignment 종류
Left Center Right Justified Flush Geometry Center
Top Middle Bottom Baseline Midline Capline

 

TextAlignmentOption는 Enum(열거형)으로 구현되어 있어서 TextAlignmentOptions.옵션이름 으로 접근하거나, (TextAlignmentOptions)옵션번호로 사용할 수 있다.

옵션 이름은 하나의 옵션만 적용하거나 윗줄+아랫줄 옵션이다. TextAlignmentOptions.Midline, TextAlignment TopLeft 등이다. 옵션의 종류는 아래의 사이트에서 더 자세히 확인할 수 있다.

 

Enum TextAlignmentOptions

 

docs.unity3d.com

 

 

예제 코드

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class ConnectManager : MonoBehaviourPunCallbacks
{
    public TMP_InputField inputName;
    public Transform playerListGrid;

    public TMP_FontAsset mapleBold;
    public TMP_FontAsset mapleLight;

    public void ShowPlayerList()
    {

        if (playerListGrid.childCount < PhotonNetwork.PlayerList.Length)
        {
            GameObject textObj = new GameObject();
            textObj.transform.SetParent(playerListGrid.transform, false); // set parent

            // Add TMP component & Get
            textObj.AddComponent<TextMeshProUGUI>();            

            var textCompo = textObj.GetComponent<TextMeshProUGUI>();

            textCompo.text = PhotonNetwork.LocalPlayer.NickName;
            textCompo.font = mapleLight;
            textCompo.fontSize = 13;
            textCompo.alignment = TextAlignmentOptions.Midline;

        }

    }
}

 

더 많은 정보는 GOD Scripting API에...!

 

Unity - Scripting API:

Searching Script Reference, please wait.

docs.unity3d.com

 

TextMeshProUGUI 문서

 

Class TextMeshProUGUI

Class TextMeshProUGUI Inherited Members Namespace: TMPro Assembly : solution.dll Syntax public class TextMeshProUGUI : TMP_Text, ILayoutElement Fields m_subTextObjects Declaration protected TMP_SubMeshUI[] m_subTextObjects Field Value Type Description TMP_

docs.unity3d.com

 

 

 

 

댓글