본문 바로가기
🌐 유니티 (Unity)

Day 64 - Unity 텍스트 색상 변경 및 기본 기능 확장 방법 🎨

by shin0707 2025. 1. 4.
728x90
반응형
728x90

  • 주제

>>  Unity의 Rich Text 활용하기

>>  다양한 Rich Text 태그 활용

>>  TextMeshPro를 사용해야 하는 이유

>>  Unity 기본 기능 확장: Rich Text와 함께 문자열 애니메이션 구현

>>  Unity에서 기본적으로 지원하지 않는 기능 구현

>>  꿀팁: Unity의 텍스트를 다룰 때 기억해야 할 것


  • 공부내용

Unity의 Text 컴포넌트는 기본적으로 문자열 내에 다양한 색상을 표시하는 기능을 제공하지 않는다.

하지만 Rich Text 기능을 활용하면 손쉽게 텍스트 색상, 크기, 스타일 등을 커스터마이징할 수 있다.

이번 게시글에서는 텍스트 일부의 색상을 변경하는 방법과 Unity에서 기본적으로 지원하지 않는 기능을 스크립트로 확장하는 팁을 함께 다뤄보겠다.

 

1. Unity의 Rich Text 활용하기

Unity의 Text 컴포넌트나 TextMeshPro는 Rich Text 태그를 지원한다.

이를 활용하면 텍스트의 일부를 강조하거나 색상을 변경할 수 있다.

 

예제: 텍스트 색상 변경

using TMPro;
using UnityEngine;

public class RichTextExample : MonoBehaviour
{
    public TextMeshProUGUI AirMileTxt;

    void Start()
    {
        AirMileTxt.richText = true; // Rich Text 활성화
        int currentMileage = 300;
        int totalMileage = 900;

        AirMileTxt.text = $"<color=green>{currentMileage}</color>/{totalMileage}Km";
    }
}

위 코드는 현재 마일리지를 초록색으로 강조하여 표시한다.

  • <color=green>: 텍스트 색상을 초록색으로 변경한다.
  • {currentMileage}: 표시할 동적 데이터.


 

2. 다양한 Rich Text 태그 활용

Rich Text는 색상뿐만 아니라 굵기, 기울임꼴, 크기 변경 등도 가능하다.

태그 설명 사용 예시
<color> 텍스트 색상 변경 <color=red>경고!</color>
<b> 굵게 표시 <b>중요</b>
<i> 기울임꼴 표시 <i>강조</i>
<size> 텍스트 크기 변경 <size=20>큰 텍스트</size>
<align> 텍스트 정렬 (TextMeshPro에서만 가능) <align=right>오른쪽 정렬</align>

 


 

3. TextMeshPro를 사용해야 하는 이유

Unity의 기본 Text 컴포넌트는 기능이 제한적이다.

TextMeshPro는 더 선명한 텍스트 렌더링풍부한 커스터마이징 옵션을 제공하므로,

아래와 같은 경우 반드시 사용하는 것을 추천한다.

  • 텍스트의 품질이 중요할 때
  • Rich Text를 자주 활용할 때
  • 여러 언어를 지원해야 할 때 (특히 한글이나 일본어 등 복잡한 글꼴)

 

4. Unity 기본 기능 확장: Rich Text와 함께 문자열 애니메이션 구현

Unity에서 기본적으로 텍스트 애니메이션 기능은 지원하지 않는다.

이를 구현하려면 코루틴을 활용해야 한다.

 

예제: 텍스트 색상 전환 애니메이션

using TMPro;
using UnityEngine;

public class AnimatedText : MonoBehaviour
{
    public TextMeshProUGUI AnimatedTxt;
    private bool isAnimating = false;

    void Start()
    {
        StartAnimation();
    }

    public void StartAnimation()
    {
        if (!isAnimating)
            StartCoroutine(ColorAnimation());
    }

    private System.Collections.IEnumerator ColorAnimation()
    {
        isAnimating = true;

        while (true)
        {
            AnimatedTxt.text = $"<color=red>위험!</color>";
            yield return new WaitForSeconds(0.5f);
            AnimatedTxt.text = $"<color=yellow>주의!</color>";
            yield return new WaitForSeconds(0.5f);
            AnimatedTxt.text = $"<color=green>안전!</color>";
            yield return new WaitForSeconds(0.5f);
        }
    }
}

이 코드는 텍스트의 색상을 빨강 → 노랑 → 초록으로 순환하면서 애니메이션 효과를 준다.


 

5. Unity에서 기본적으로 지원하지 않는 기능 구현

Unity에서는 일부 텍스트 관련 기능이 기본 제공되지 않으므로, 확장 스크립트를 통해 해결해야 한다.

 

기능 1: 텍스트 그라데이션
TextMeshPro를 사용하면 그라데이션 효과를 추가할 수 있다.

using TMPro;
using UnityEngine;

public class GradientText : MonoBehaviour
{
    public TextMeshProUGUI GradientTxt;

    void Start()
    {
        GradientTxt.fontMaterial.SetColor("_FaceColor", Color.red);   // 상단 색상
        GradientTxt.fontMaterial.SetColor("_OutlineColor", Color.blue); // 하단 색상
    }
}

 

기능 2: 텍스트 자동 크기 조정
텍스트가 UI 영역을 초과하지 않도록 크기를 자동 조정하는 방법이다.

using TMPro;
using UnityEngine;

public class AutoResizeText : MonoBehaviour
{
    public TextMeshProUGUI AutoResizeTxt;

    void Start()
    {
        AutoResizeTxt.enableAutoSizing = true; // 자동 크기 조정 활성화
        AutoResizeTxt.text = "이 텍스트는 UI 영역에 맞게 크기가 조정됩니다.";
    }
}

 

6. 꿀팁: Unity의 텍스트를 다룰 때 기억해야 할 것

 

  • Rich Text는 TextMeshPro에서 더 강력하게 작동한다
    TextMeshPro는 Unity의 기본 Text 컴포넌트보다 더 많은 Rich Text 태그를 지원한다.
  • 프리셋을 활용하라
    TextMeshPro에서 자주 사용하는 텍스트 스타일을 프리셋으로 저장하면 작업 속도가 빨라진다.
  • 최적화는 필수
    텍스트가 많아질 경우, TextMeshPro는 동적 글꼴 생성 비용을 줄이기 위해 정적 글꼴 애셋을 활용하는 것이 좋다.
  • 멀티 언어 지원을 고려하라
    다국어 지원이 필요한 경우, TextMeshPro는 지역화(Localization)를 쉽게 처리할 수 있다.
반응형
728x90
반응형

loading