[TIL] FosmonInfoPanel Refactoring - day 94

뭉크의 개발·2023년 11월 29일
0

Unity - Camp

목록 보기
62/70
post-thumbnail

🐧 들어가기 앞서

오늘은 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 개선 및 도움말 기능 추가

0개의 댓글