UDN 링크
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/
FString
FName, FText와 다르게 검색, 변환 및 비교가 가능한 문자열 클래스. 문자열 관련 여러 기능을 제공한다. 하지만 그렇기 때문에 FName, FText에 비해 더 많은 자원을 소모한다.
생성
FString TestHUDString = FString(TEXT("This is my test FString."));
변환
String 변수
- FString FName TestHUDName = FName(*TestHUDString);
FString -> FName 은 손실성 변환이라 위험합니다. FName 은 대소문자를 구분하지 않기 때문입니다.
- FString FText TestHUDText = FText::FromString(TestHUDString);
FString -> FText 은 가능한 경우도 있지만, FString 의 내용이 FText 의 "자동 현지화" 혜택을 받지 못할 수 있음에 유념해 주시기 바랍니다.
- FName FString TestHUDString = TestHUDName.ToString();
- FText FString TestHUDString = TestHUDText.ToString();
FText -> FString 은 안전하지 않습니다. 일부 언어에서는 변환시 손실될 위험이 있습니다.
숫자 및 기타 변수 : 다른 숫자 변환의 경우, FString::Printf() 함수에 적합한 인수를 곁들어 사용하면 됩니다.
- float FString::SanitizeFloat(FloatVariable);
- int FString::FromInt(IntVariable);
- bool InBool ? TEXT("true") : TEXT("false"); 'true' 거나 'false' 거나
- FVector VectorVariable.ToString(); 'X= Y= Z='
- FVector2D Vector2DVariable.ToString(); 'X= Y='
- FRotator RotatorVariable.ToString(); 'P= Y= R='
- FLinearColor LinearColorVariable.ToString(); '(R=,G=,B=,A=)'
- UObject (InObj != NULL) ? InObj->GetName() : FString(TEXT("None")); UObject 의 FName
FString 에서 int 나 float 숫자 변수로의 변환은 물론, 부울 변수로의 변환도 존재합니다.
- bool TestHUDString.ToBool();
- int FCString::Atoi(*TestHUDString);
- float FCString::Atof(*TestHUDString);
비교
TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);
탐색
FString::Contains() 는 서브스트링을 찾은 경우 true 를, 아니면 false 를 반환합니다.
- TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);
FString::Find() 는 처음 찾은 서브스트링 인스턴스의 인덱스를 반환합니다.
- TestHUDString.Find(TEXT("test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd, 10);
조작
FString AShooterHUD::GetTimeString(float TimeSeconds)
{
// 분과 초만 관련이 있습니다.
const int32 TotalSeconds = FMath::Max(0, FMath::TruncToInt(TimeSeconds) % 3600);
const int32 NumMinutes = TotalSeconds / 60;
const int32 NumSeconds = TotalSeconds % 60;
const FString TimeDesc = FString::Printf(TEXT("%02d:%02d"), NumMinutes, NumSeconds);
return TimeDesc;
}