오늘은 FosmonInfoPanel 클래스에 대한 리팩토링 작업을 진행했다.
기존 코드는 몬스터 정보를 표시하는 데 필요한 모든 텍스트 필드를 단일 헤더 아래에 두었다.
리팩토링된 코드에서는 각 섹션(이름, 설명, 선호도, 행동)별로 헤더를 분리하여 가독성과 관리 용이성을 향상시켰다.
[Header("Text")]
[SerializeField] private TMP_Text monsterNameText;
[SerializeField] private TMP_Text monsterDescriptionText;
[SerializeField] private TMP_Text monsterPrefersText;
[SerializeField] private TMP_Text monsterBehaviorText;
[Header("Name")]
[SerializeField] private TMP_Text fosmonNameText;
[Header("Description")]
[SerializeField] private TMP_Text fosmonDescriptionText;
[Header("Prefer")]
[SerializeField] private TMP_Text fosmonTempratureText;
[SerializeField] private TMP_Text fosmonCleanlinessText;
[SerializeField] private TMP_Text fosmonBrighnessText;
[SerializeField] private TMP_Text fosmonLikeFoodTypeText;
[SerializeField] private TMP_Text fosmonHateFoodTypeText;
[Header("Behaviour")]
[SerializeField] private TMP_Text fosmonHostileText;
[SerializeField] private TMP_Text fosmonCuriousText;
[SerializeField] private TMP_Text fosmonFoodLovingText;
[SerializeField] private TMP_Text fosmonFearfulValueText;
새로운 코드는 다양한 언어 지원을 위해 GlobalSettings.CurrentLocale과 HandleLocaleChanged 함수를 사용한다.
이를 통해 애플리케이션의 언어 설정에 따라 몬스터 정보를 다른 언어로 표시할 수 있게 된다.
private string _locale;
private MonsterSO currentMonsterData;
private int key;
private string locale
{
get => _locale;
set
{
if(_locale != value){
_locale = value;
UpdateLocalizedText();
}
}
}
ConvertTemperatureToString, ConvertCleanlinessToString 등의 새로운 함수들을 추가하여, 몬스터 데이터의 원시값을 사용자가 이해하기 쉬운 문자열로 변환한다.
코드의 읽기 쉬움과 유지 보수성을 크게 향상시켰다.
private string ConvertTemperatureToString(int preferTemperature)
{
key = 5000 + preferTemperature - 1;
return GetLocalizedString(key);
}
private string ConvertCleanlinessToString(int preferCleanliness)
{
key = 5004 + preferCleanliness;
return GetLocalizedString(key);
}
private string ConvertBrightnessToString(int preferBrightness)
{
key = 5009 + preferBrightness;
return GetLocalizedString(key);
}
FosmonInfoSO 객체를 통해 로컬라이즈된 문자열을 관리한다. 이를 통해 언어별로 다른 문자열을 효율적으로 관리하고, 필요에 따라 쉽게 업데이트할 수 있다.
[Header("Localizaiotn")]
[SerializeField] private FosmonInfoSO fosmonInfoSO;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public struct LocalizedStirng
{
public int localeKey;
public string English;
public string Korean;
}
[CreateAssetMenu(fileName = "FosmonInfoSO", menuName = "UI/FosmonInfoSO", order = 0)]
public class FosmonInfoSO : ScriptableObject
{
public LocalizedStirng[] localizedStirngs;
}
locale 속성이 변경될 때마다 UpdateLocalizedText 함수를 호출하여 UI의 텍스트를 적절히 업데이트한다.
다국어 지원을 더 유동적이고 효과적으로 만든다.
private void UpdateLocalizedText()
{
if(currentMonsterData != null)
{
SetMonsterInfo(currentMonsterData);
}
}
GetLocalizedString 함수를 통해 키에 기반한 로컬라이즈드 문자열을 가져온다.
다양한 언어의 텍스트를 관리하는 데 있어 효율성을 제공한다.
private string GetLocalizedString(int key)
{
foreach (var item in fosmonInfoSO.localizedStirngs)
{
if (item.localeKey == key)
{
return locale == "en-US" ? item.English : item.Korean;
}
}
return "Unknown";
}
포스몬 사전 버튼 개선
세이브 로드 암호화 및 복호화
UI 개선 및 도움말 기능 추가