본문 바로가기
::protected/언리얼4&5

FName / FString

by 해맑은욱 2019. 12. 9.

FName

콘텐츠 브라우저에서 새 애셋 이름을 지을 때, 다이내믹 머티리얼 인스턴스의 파라미터를 변경할 때, 스켈레탈 메시에서 본에 접근할 때, 모두 FName 을 사용. 주어진 문자열이 재사용된다 해도 데이터 테이블에 한 번만 저장됨. 대소문자를 구분하지 않음. 변경도 불가능하여, 조작할 수 없음. 접근하는 속도가 빠름.

FName TestFName = FName(TEXT("ThisIsMyTestFName"));

// FName을 변환
FName -> FString
FNametoFString = TestFName.ToString();

FName -> FText
FNameToFText = FText::FromName(TestFName);

// FName으로 변환(대소문자 구분안함으로 손실 위험있음)
FString -> FName
FStringToFName = FName(*TestHUDString);

FText -> FString -> FName  //FString으로 변환 후 FName으로 변환 가능.

 

FString

조작이 가능한 유일한 스트링 클래스. 대소문자 변환, 부분 문자열 발췌, 역순 등 사용가능한 메서드가 많음. 검색, 변경에 다른 스트링과의 비교도 가능.

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

// FString에서 변환
FString -> FName
FStringToFName = FName(*TestFString); //대소문자 구분안함으로 손실 위험있음

FString -> FText
FStringToFText = FText::FromString(TestFString); //'true' 거나 'false' 거나

bool
TestFString.ToBool();

int
FCString::Atoi(*TestFString);

float
FCString::Atof(*TestFString);


// FString으로 변환
FName
FNametoFString = TestFName.ToString();

FText
FTextToFString = TestFText.ToString();

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::Printf()
 

FString 문자열 나누기 - ParseIntoArray

; 파일의 경로에서 폴더명이나 파일명을 구하는 상황등에서 문자열을 나눌때 사용하자. like C++ strtok!

FString AssetPath = TEXT("/Game/DB/Text/UITextTable.UITextTable");
TArray<FString> Paths;
AssetPath.ParseIntoArray(Paths, TEXT("/"));

for (FString& Element : Paths)
{
    UE_LOG(LogClass, Warning, TEXT("Path : [%s]"), *Element);
    // [Game], [DB], [Text], [UITextTable.UITextTable]
}

AssetPath = TEXT("/Game/DB//Text/UITextTable.UITextTable");
AssetPath.ParseIntoArray(Paths, TEXT("/"), false);
for (FString& Element : Paths)
{
    UE_LOG(LogClass, Warning, TEXT("Path No Cull : [%s]"), *Element);
    // [Game], [DB], [], [Text], [UITextTable.UITextTable]
    // 세번째 param InCullEmpty = false 일 경우 공백도 배열에 담김
}

FString 스페이스(띄우기) 없애기 - RemoveSpaceInline

FString Message = TEXT("Hello World is Beautiful World");
Message.RemoveSpacesInline();
// Message = "HelloWorldisBeautifulWorld"