[Error] Inputfield(TMP)에서 text를 가져오면 int로 변환이 되는데, Inputfield(TMP)의 안에 있는 TMP_Text에서 text를 가져와 int로 변환하면 Format 에러가 생기는 경우
Unity 2023. 7. 30. 10:04진위여부 확인 안됨
유니티에서의 TMP_InputField와 TMP_Text의 text 반환값은 모두 string 타입이지만, InputField에서 반환되는 text는 사용자가 입력한 값만을 포함하고, TMP_Text의 text는 추가적으로 포매팅이나 스타일에 대한 정보를 포함할 수 있습니다. 이는 TMP_Text에서 텍스트를 처리하는 방식과 관련되어 있습니다.
사용자가 "5004"라는 값을 입력했더라도, TMP_Text의 text 값을 가져오면 "\u200B5004" 또는 "5004\u200B"와 같이 보이지 않는 특수 문자가 포함된 문자열을 얻을 수 있습니다. 이 경우, int로 변환하는 과정에서 FormatException이 발생할 수 있습니다. 이는 int.Parse 또는 int.TryParse 메서드가 숫자 이외의 문자를 포함한 문자열을 int로 변환할 수 없기 때문입니다.
이 문제를 해결하려면, TMP_Text의 text에서 숫자만 추출하여 int로 변환하는 것이 필요합니다. 이를 위해서는 정규 표현식 등을 사용하여 숫자만 추출할 수 있습니다.
string inputString = _text.text;
string cleanedString = System.Text.RegularExpressions.Regex.Replace(inputString, "[^0-9]", "");
int stageIDX;
if (int.TryParse(cleanedString, out stageIDX))
{
// stageIDX 사용 가능
}
else
{
Debug.LogError($"Failed to parse {_text.text} to int");
}
이 코드는 _text.text에서 숫자 이외의 문자를 모두 제거한 후, 그 결과 문자열을 int로 변환하려고 시도합니다. 숫자 이외의 문자를 제거하는 것이 필요한 경우에 유용하게 사용될 수 있습니다.
'Unity' 카테고리의 다른 글
[Tool] Scene에 있는 모든 메시 컬라이더를 한꺼번에 제거 (0) | 2023.08.16 |
---|---|
[Unity] Text Mesh Pro 중국어 폰트 등록 (0) | 2023.08.05 |
[Unity] 구글 스프레드시트를 실시간 변경 테이블로 사용 (0) | 2023.07.14 |
VSCode를 Unity에 연결 (0) | 2023.05.08 |
[Unity] enum에 [System.Flags]를 쓰는 이유? (0) | 2023.04.22 |