유니티 전체폰트 바꾸는 스크립트
작성자 정보
- 마스터 작성
- 작성일
컨텐츠 정보
- 329 조회
- 목록
본문
1.전체코드
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
public class FontManager : MonoBehaviour
{
//싱글톤 패턴
public static FontManager instance = null;
//폰트 string 배열로 추가 하기 텍스트를 계속 추가하면 됨
public string[] Fonts = {
"Assets/Fonts/Ansungtangmyun-ESG.ttf", //0.안성탕면ESG
"Assets/Fonts/BMHANNA_11yrs_ttf.ttf", //1.BM한나
"Assets/Fonts/ChosunCentennial_ttf.ttf", //2.조선센티널
"Assets/Fonts/ChosunSm.TTF", //3.조선SM
"Assets/Fonts/CookieRun Black.ttf", //4.쿠키런 블랙
"Assets/Fonts/CookieRun Bold.ttf", //5.쿠키런 볼드
"Assets/Fonts/CookieRun Regular.ttf", //6.쿠키런 레쥴러
"Assets/Fonts/Dovemayo_gothic.ttf", //7.도베마요고딕
"Assets/Fonts/Sejong hospital Bold.ttf", //8.세종호텔 볼드
"Assets/Fonts/Sejong hospital Light.ttf" //9.세종호텔 라이트
};
public void Awake()
{
//싱글톤
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
if (instance != this)
{
Destroy(this.gameObject);
}
}
}
//모든 폰트 바꾸기
public void ChangeAllFonts(int num)
{
var allTextObjects = Resources.FindObjectsOfTypeAll(typeof(Text));
foreach (Text t in allTextObjects)
{
t.font = AssetDatabase.LoadAssetAtPath<Font>(Fonts[num]);
}
}
}
2.코드 설명
2-1폰트 매니저에 있는 코드를 어디서든 접근 할 수 있게 싱글톤으로 생성, 및 싱글톤 awake로 깨우기
public static FontManager instance = null;
public void Awake()
{
//싱글톤
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
if (instance != this)
{
Destroy(this.gameObject);
}
}
}
2-2 폰트 매니저가 씬을 넘어가도 파괴되지 않도록 DontDestroyOnLoad를 설정함
DontDestroyOnLoad(this.gameObject);
2-3 폰트의 경로 값을 담을 string배열을 설정, 배열에 폰트를 추가하면 Fonts의 길이가 증가하여 원하는 만큼 담을 수 있다.
//폰트 string 배열로 추가 하기 텍스트를 계속 추가하면 됨
public string[] Fonts = {
"Assets/Fonts/Ansungtangmyun-ESG.ttf", //0.안성탕면ESG
"Assets/Fonts/BMHANNA_11yrs_ttf.ttf", //1.BM한나
"Assets/Fonts/ChosunCentennial_ttf.ttf", //2.조선센티널
"Assets/Fonts/ChosunSm.TTF", //3.조선SM
"Assets/Fonts/CookieRun Black.ttf", //4.쿠키런 블랙
"Assets/Fonts/CookieRun Bold.ttf", //5.쿠키런 볼드
"Assets/Fonts/CookieRun Regular.ttf", //6.쿠키런 레쥴러
"Assets/Fonts/Dovemayo_gothic.ttf", //7.도베마요고딕
"Assets/Fonts/Sejong hospital Bold.ttf", //8.세종호텔 볼드
"Assets/Fonts/Sejong hospital Light.ttf" //9.세종호텔 라이트
};
2-4 모든 오브젝트를 찾아서 폰트 바꿔주기
public void ChangeAllFonts(int num)
{
var allTextObjects = Resources.FindObjectsOfTypeAll(typeof(Text));
foreach (Text t in allTextObjects)
{
t.font = AssetDatabase.LoadAssetAtPath<Font>(Fonts[num]);
}
}
폰트매니저에서 사용할 것이 아니기 때문에 public으로 생성하였습니다.
2-4 1) Resources.FindObjectsOfTypeAll를 사용하여 Text를 가진 모든 오브젝트를 찾습니다.
FindObjectsOfType과 달리 비활성된 오브젝트를 포함하여 모든 오브젝트를 찾습니다.
FindObjectsOfType는 활성화된 오브젝트만 찾습니다.
2-4 2) AssetDatabase.LoadAssetAtPath를 사용하여 Text를 해당 경로에 있는 폰트로 바꿉니다.
foreach문을 사용하여 돌렸기 때문에 2-4 1)에서 찾은 모든 오브젝트를 찾아서 바꾸게 됩니다.
AssetDatabase.LoadAssetAtPath(string assetPath, Type type)가 기본값입니다.
type의 경우 <Font>로 선언하였으며 assetPath는 Fonts[num]로
2-3에서 설정한 배열에 매개변수 (int num)의 값을 받아서 해당하는 폰트로 바꿔 줍니다.
3 주의사항
매개변수 사용시 매개변수에 해당하는 변수를 따로 설정하여
매개변수의 크기가 Fonts.Length보다 클경우 0으로 바꿔주는 코드를 추천합니다.
삼항 연산자를 사용하여 코드를 구성하시면 손쉽게 짤 수 있습니다.
int num = 0;
num = num > FontManager.instance.Fonts.Length ? 0 : num;
FontManager.instance.ChangeAllFonts(num);
관련자료
-
이전
-
다음