본문 바로가기
게임 개발/Unreal Engine

[Unreal Engine] FString API

by 불타는홍당무 2021. 12. 28.

UDN 링크

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/

 

FString

FName, FText와 다르게 검색, 변환 및 비교가 가능한 문자열 클래스. 문자열 관련 여러 기능을 제공한다. 하지만 그렇기 때문에 FName, FText에 비해 더 많은 자원을 소모한다.

 

1. 생성

FString TestHUDString = FString(TEXT("This is my test FString."));

 

2. 변환

1) String 변수

[From FString]

에서 으로 예제
FString FName TestHUDName = FName(*TestHUDString);
FString -> FName 은 손실성 변환이라 위험합니다. FName 은 대소문자를 구분하지 않기 때문입니다.
FString FText TestHUDText = FText::FromString(TestHUDString);
FString -> FText 은 가능한 경우도 있지만, FString 의 내용이 FText 의 "자동 현지화" 혜택을 받지 못할 수 있음에 유념해 주시기 바랍니다.

[To FString]

에서 으로 예제
FName FString TestHUDString = TestHUDName.ToString();
FText FString TestHUDString = TestHUDText.ToString();
FText -> FString 은 안전하지 않습니다. 일부 언어에서는 변환시 손실될 위험이 있습니다.

2) 숫자 및 기타 변수

[To 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

[From FString]

FString 에서 int 나 float 숫자 변수로의 변환은 물론, 부울 변수로의 변환도 존재합니다.

변수 유형 스트링에서 변환 참고
bool TestHUDString.ToBool();  
int FCString::Atoi(*TestHUDString);  
float FCString::Atof(*TestHUDString);  

3. 비교

TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);

 

4. 탐색

1) FString::Contains() 는 서브스트링을 찾은 경우 true 를, 아니면 false 를 반환합니다.

TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);

2) FString::Find() 는 처음 찾은 서브스트링 인스턴스의 인덱스를 반환합니다.

TestHUDString.Find(TEXT("test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd, 10);

 

5. 조작

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;
}