✅ 기능
TMP 폰트를 바꿔 유니티 씬 내에(하이어라키) 있는 모든 TMP를 바꾸기 위해서는 일일이 하나씩 찾아 폰트를 바꾸는 방법뿐입니다. 하지만 이것을 쉽고 간편하게 해결하는 스크립트를 작성하여 정리하였습니다. 매우 간단하며 쉽게 적용이 가능합니다. 아래 링크는 유니티포럼에 질문한 글을 보고 답변한 내용입니다.
폰트를 새로 생성하여 씬 내에 적용하고 싶을 때 찾을 필요 없이 버튼 하나로 설정할 수 있도록 해주는 스크립트입니다.
✅ 구현
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
#if UNITY_EDITOR
using UnityEditor;
#endif
/*
https://bonnate.tistory.com/
Insert the script into the game object
insert the TMP font in the inspector
and press the button to find and replace all components.
It may work abnormally, so make sure to back up your scene before using it!!
*/
public class TMP_FontChanger : MonoBehaviour
{
[SerializeField] public TMP_FontAsset FontAsset;
}
#if UNITY_EDITOR
[CustomEditor(typeof(TMP_FontChanger))]
public class TMP_FontChangerEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Change Font!"))
{
TMP_FontAsset fontAsset = ((TMP_FontChanger)target).FontAsset;
foreach(TextMeshPro textMeshPro3D in GameObject.FindObjectsOfType<TextMeshPro>(true))
{
textMeshPro3D.font = fontAsset;
}
foreach(TextMeshProUGUI textMeshProUi in GameObject.FindObjectsOfType<TextMeshProUGUI>(true))
{
textMeshProUi.font = fontAsset;
}
}
}
}
#endif
[SerializeField] public TMP_FontAsset FontAsset;
- 인스펙터에서 적용하고 싶은 TMP 폰트 에셋을 넣습니다.
if (GUILayout.Button("Change Font!"))
- 인스펙터에서 버튼이 있으며 해당 버튼을 누르면 씬 내에 존재하는 모든 폰트를 변경해 줍니다.
- 에디터모드에서 실행합니다.
✅ 사용(에디터에서 사용)
- 씬에 아무 오브젝트(기존에 존재하는 것도 상관없음)에 스크립트를 추가합니다.
- Font Asset에 적용하고 싶은 폰트를 사용합니다.
- 버튼을 눌러 적용합니다.
'unity etc. > others' 카테고리의 다른 글
[유니티] 오브젝트 핑크색 오류 해결 (쉐이더 오류) (0) | 2023.03.21 |
---|---|
[유니티] 텍스트 맨 앞에 표시하기 (0) | 2023.03.10 |
[유니티, C# 오류] InvalidOperationException: Collection was modified; enumeration operation may not execute (0) | 2022.12.02 |
[유니티] 오디오믹서 사운드 관리 (0) | 2022.11.21 |
유니티 애니메이션 합치기(애니메이션 레이어, 마스크) (2) | 2022.11.21 |