728x90
유니티 한글 폰트 적용하기(UGUI)
유니티는 기본적으로 한국어로 된 폰트를 지원하지 않는다. 영어만 가능하게 디폴트 세팅되어 있기 때문에 한국어로 된 텍스트를 사용해주려면 몇가지 설정을 해주어야 한다.
먼저 한국어 폰트(확장자 OTF,TTF 등)를 다운로드 받아주고 유니티 상으로 임포트해준다.
가져온 폰트 소스를 우클릭 - Create - TextMeshPro - Font Asset을 설정해주면 적용할 수 있게 폰트 에셋이 바뀐다.
텍스트를 작성해주려면 씬 상에서 Text를 가져와야 하는데, UI에 보면 Text와 Text Mesh Pro(TMP) 2개가 있다. 해당 텍스트에 파란색 폰트 애셋을 매핑해주면 한글이 적용되는 것을 확인할 수 있다.
다만 Text/TMP는 차이가 있다. 일반 Text(위)는 한국어 폰트 적용이 되긴 하지만 화질이 매우 깨져보인다. 반면, TMP(아래)로 제작한 한국어 폰트는 깔끔한 것을 확인할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class testText : MonoBehaviour
{
private TMP_Text m_TextComponent;
private bool hasTextChanged;
public float WaitTime1;
public bool LoopFlg;
bool LoopCheck;
void Awake()
{
LoopCheck = true;
m_TextComponent = gameObject.GetComponent<TMP_Text>();
}
void Start()
{
StartCoroutine(RevealCharacters(m_TextComponent));
}
void OnEnable()
{
// Subscribe to event fired when text object has been regenerated.
TMPro_EventManager.TEXT_CHANGED_EVENT.Add(ON_TEXT_CHANGED);
}
void OnDisable()
{
TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(ON_TEXT_CHANGED);
}
// Event received when the text object has changed.
void ON_TEXT_CHANGED(Object obj)
{
hasTextChanged = true;
}
/// <summary>
/// Method revealing the text one character at a time.
/// </summary>
/// <returns></returns>
IEnumerator RevealCharacters(TMP_Text textComponent)
{
textComponent.ForceMeshUpdate();
TMP_TextInfo textInfo = textComponent.textInfo;
int totalVisibleCharacters = textInfo.characterCount; // Get # of Visible Character in text object
int visibleCount = 0;
while (LoopCheck)
{
if (hasTextChanged)
{
totalVisibleCharacters = textInfo.characterCount; // Update visible character count.
hasTextChanged = false;
}
if (visibleCount > totalVisibleCharacters)
{
yield return new WaitForSeconds(1.0f);
visibleCount = 0;
if(LoopFlg)
{
LoopCheck = true;
}
else
{
LoopCheck = false;
}
}
textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display?
visibleCount += 1;
yield return new WaitForSeconds(WaitTime1);
}
}
}
추가적으로 폰트가 시간이 지남에 따라 한 글자씩 나오도록 하는 코드를 작성해 보았다. Public으로 선언된 Wait Time을 통해 시간 간격을 설정하고, Loop Flg 설정을 통해 반복 여부를 설정하면 된다.
+마우스를 클릭하면 n초 뒤 오브젝트(캔버스) 생성 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class After3sec : MonoBehaviour
{
public GameObject CanvasObj;
public float waitSec;
void Update()
{
if(Input.GetMouseButtonDown(0))
{
StartCoroutine(AfterFunc(waitSec));
}
}
IEnumerator AfterFunc(float waitTime)
{
// A 동작
Debug.Log("클릭 했음");
yield return new WaitForSeconds(waitTime);
// B 동작
CanvasObj.SetActive(true);
}
}
728x90
'게임 프로그래밍 > 유니티 프로젝트' 카테고리의 다른 글
유니티 오브젝트/라이트/Shader 생성 관련 코드 (0) | 2021.10.20 |
---|---|
유니티 오브젝트 유리/거울 효과 만들기 (0) | 2021.10.14 |
유니티 VR환경에서 HUD(Head Up Display) 설정하기 (0) | 2021.10.13 |
유니티 Animation를 사용하여 Fade In/Out 연출효과 구현하기 (0) | 2021.10.13 |
유니티 Scene 상에서 Fade In&Fade Out 연출효과 구현하기(+ 메타 퀘스트 VR 환경에서 FI/FO 구현) (0) | 2021.10.13 |