유니티에서 한글을 사용할경우
글자조합으로 표시해줄경우가 많습니다.
예를 들어
로봇을 클리어 했습니다.
보스를 클리어 했습니다.
로봇 + 을(를) 클리어 했습니다.
조합으로 표시해주는데요.
자연스로운 문장으로 만들기위해서 을 클리어 했습니다, 를 클리어 했습니다.
2개를 만들어 상황에 따라 사용해 주어야 합니다.
자주사용하는 을(를), 이(가), 은(는), 과(와) 숫자에 따라 조사가 자동으로 변환되는 코드입니다.
예를 들어
로봇을(를) 클리어 했습니다.
변환시
로봇을 클리어 했습니다. 로 자동 변환됩니다.
한글 | 앞 글자의 받침 유무에 따라 적합한 조사를 출력 |
숫자 | 0, 1, 3, 6, 7, 8은 받침이 있는 문자로 처리 |
2, 4, 5, 9는 받침이 없는 문자로 처리 | |
영문 등 | |
기타 문자 | 별도 처리 없이 “을, 은, 이”, “와”를 출력 |
<을>
|
앞 글자의 받침 유무에 따라 “을” or “를” 출력
|
<은>
|
앞 글자의 받침 유무에 따라 “은” or “는” 출력
|
<이>
|
앞 글자의 받침 유무에 따라 “이” or “가” 출력
|
<와>
|
앞 글자의 받침 유무에 따라 “와” or “과” 출력
|
public static class StringUtils
{
private const string KOREA_JONGSUNG1 = "을(를)";
private const string KOREA_JONGSUNG2 = "이(가)";
private const string KOREA_JONGSUNG3 = "은(는)";
private const string KOREA_JONGSUNG4 = "과(와)";
private const string KOREA_JONGSUNG1_VALUE1 = "을";
private const string KOREA_JONGSUNG1_VALUE2 = "를";
private const string KOREA_JONGSUNG2_VALUE1 = "이";
private const string KOREA_JONGSUNG2_VALUE2 = "가";
private const string KOREA_JONGSUNG3_VALUE1 = "은";
private const string KOREA_JONGSUNG3_VALUE2 = "는";
private const string KOREA_JONGSUNG4_VALUE1 = "과";
private const string KOREA_JONGSUNG4_VALUE2 = "와";
public static string ConvertKoreaStringJongSung(string koreaString)
{
if(koreaString.Contains(KOREA_JONGSUNG1))
{
koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG1, KOREA_JONGSUNG1_VALUE1,
KOREA_JONGSUNG1_VALUE2);
}
if(koreaString.Contains(KOREA_JONGSUNG2))
{
koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG2, KOREA_JONGSUNG2_VALUE1,
KOREA_JONGSUNG2_VALUE2);
}
if(koreaString.Contains(KOREA_JONGSUNG3))
{
koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG3, KOREA_JONGSUNG3_VALUE1,
KOREA_JONGSUNG3_VALUE2);
}
if(koreaString.Contains(KOREA_JONGSUNG4))
{
koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG4, KOREA_JONGSUNG4_VALUE1,
KOREA_JONGSUNG4_VALUE2);
}
return koreaString;
}
public static string ConvertKoreaStringJongSung(string koreaString, string check, string first, string second)
{
int emptyCheck = 1;
string fullString = string.Empty;
string[] result = koreaString.Split(new string[] {check}, StringSplitOptions.None);
if (result.Length >= 2)
{
for (int i = 0; i < result.Length - 1; i++)
{
emptyCheck = 1;
if (result[i].Length > 0)
{
char[] fullChar = result[i].ToCharArray(0, result[i].Length);
if (fullChar.Length > 0)
{
if (fullChar[fullChar.Length - 1] == ' ')
{
emptyCheck = 2;
}
}
char[] lastName = result[i].ToCharArray(result[i].Length - emptyCheck, 1);
if (lastName.Length > 0)
{
if (lastName[0] >= 0xAC00 && lastName[0] <= 0xD7A3)
{
String seletedValue = (lastName[0] - 0xAC00) % 28 > 0
? first
: second;
result[i] = result[i] + seletedValue;
}
//숫자에 따라 조사 변화
else if (lastName[0] == 0x0030 || lastName[0] == 0x0031 || lastName[0] == 0x0033 || lastName[0] == 0x0036 || lastName[0] == 0x0037 || lastName[0] == 0x0038) //0, 1, 3, 6, 7, 8
{
result[i] = result[i] + first;
}
else if (lastName[0] == 0x0032 || lastName[0] == 0x0034 || lastName[0] == 0x0035 || lastName[0] == 0x0039) //2, 4, 5, 9
{
result[i] = result[i] + second;
}
}
}
fullString += result[i];
}
fullString += result[result.Length - 1];
koreaString = fullString;
}
return koreaString;
}
}
koreaString : 문장
check : 검색할단어 예)을(를)
first : 받침있을경우 변경할 단어 예) 을
second : 받침이 없을경우 변경할 단어 예) 를
'Unity 유니티 기초강의' 카테고리의 다른 글
유니티 Unity 메모리 관리 가비지 컬렉션 (0) | 2022.05.17 |
---|---|
유니티 unity 씬 로브 및 전환 (0) | 2022.05.17 |
유니티 수학함수 Mathf (0) | 2022.05.17 |
유니티 게임 로직 타겟주변을 회전 스킬구현하기 (2) | 2022.04.19 |
[알고리즘] 셔플 알고리즘 (0) | 2020.06.05 |
댓글