반응형
FName
- 정적이며 가장 가벼운 문자열 클래스
- 비교시 대소문자 구분하지 않음
- 한 번만 저장하며 변경 및 조작 불가능
- 찾기나 키로 FName에 접근하는 속도 빠름
문자열 비교
FName Name1 = FName(TEXT("TestFName"));
FName Name2 = FName(TEXT("TESTFNAME"));
FName Name3 = FName(TEXT("TestFName3"));
bool bCompare1 = (Name1 == Name2); // true, 대소문자 구분을 하지 않는다
bool bCompare2 = (Name1 == Name3); // false
UE_LOG(TestProject, Warning, TEXT("bCompare1=%d bCompare2=%d"), bCompare1, bCompare2);
// 출력 : TestProject: Warning: bCompare1=1 bCompare2=0
FName TestName1 = FName(TEXT("A"));
FName TestName2 = FName(TEXT("f"));
FName TestName3 = FName(TEXT("F"));
FName TestName4 = FName(TEXT("K"));
int32 Compare1 = TestName2.Compare(TestName1); // 양수
int32 Compare2 = TestName2.Compare(TestName3); // 0
int32 Compare3 = TestName2.Compare(TestName4); // 음수
UE_LOG(TestProject, Warning, TEXT("Compare1=%d Compare2=%d Compare3=%d"), Compare1, Compare2, Compare3);
// 출력 : TestProject: Warning: Compare1=5 Compare2=0 Compare3=-4
FText
- 텍스트 지역화(localization)를 위해 사용하는 클래스
- 사용자에게 보여지는 텍스트는 지역화를 지연해야 하늪로 FText를 사용한다.
지역화를 위한 매크로
NSLOCTEXT | 네임스페이스, 키, 소스 스트링을 정의하는 텍스트 현지화 조각을 생성합니다. |
LOCTEXT | 키와 소스 스트링을 정의하고, 네임스페이스는 LOCTEXT_NAMESPACE 로 정의하는 현지화 텍스트 조각을 생성합니다. |
FText constFTextHelloWorld = NSLOCTEXT("MyNamespace", "HelloWorld", "Hello World!");
#define LOCTEXT_NAMESPACE "MyNamespace"
FText constFTextGoodbyeWorld = LOCTEXT("GoodbyeWorld", "Goodbye World!");
#undef LOCTEXT_NAMESPACE
Format을 사용하여 생성
#define LOCTEXT_NAMESPACE "MyNamespace"
int32 CurrentHealth = 100;
FText text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);
#undef LOCTEXT_NAMESPACE
FString
- FString 클래스는 FName이나 FText와는 달리 조작이 가능한 문자열 클래스
- 대소문자 변환, 부분문자열 발췌, 역순 등 사용가능한 함수들이 많다.
- FString 클래스는 검색, 변경 및 다른 스트링과의 비교 또한 가능하다
FString 생성
FString TestHUDString = FString(TEXT("This is my test FString."));
비교
- 오버로딩된 == 연산자를 사용
- FString 과 TCHAR*s 배열을 비교
- FString::Equals() 사용
- 대소문자를 무시 여부 설정 가능(ESearchCase::IgnoreCase, ESearchCase::CaseSensitive)
// 대소문자를 구분하여 문자열 비교합니다.
TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);
검색
- FString::Contains()
- 서브스트링을 찾은 경우 true 를, 아니면 false 를 반환합니다.
- 검색 대상은 FString 거나 TCHAR* 의 서브스트링입니다.
- ESearchCase를 사용해서 검색시 대소문자를 무시 여부 결정, 기본값은 대소문자 무시
- ESearchDir을 사용해서는 검색 방향을 지정, 기본값은 처음서부터 시작
TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);
- FString::Find()
- 찾고자 하는 문자열의 처음 인덱스를 반환, 못 찾으면 -1을 반환
- 검색 시작 인덱스를 지정할 수 있음
- FString::Contains() 함수와 동일하게 대소문자 비교 여부와 검색 방향을 지정 가능
int32 iCompare = TestString.Find(OtherString, ESearchCase::CaseSensitive, ESearchDir::FromStart, 10);
FString 접합
연산자 | 설명 | 사용법 |
+= | 제공된 스트링을 FString 오브젝트에 덧붙입니다. | StringResult += AddedString; |
+ | 새 FString 오브젝트를 만들어 제공된 스트링을 덧붙입니다. | TwoString = OneString + AddedString; |
Printf로 조립
FString::Printf 로 조립된 FString 은 FString 에 저장 가능할 뿐만 아니라, UE_LOG 디버그 메시징으로 화면에 출력시킬 수도 있습니다. 형식 인수는 지정자는 아래 예제에서 볼 수 있듯이 C++ printf 함수와 같습니다.
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;
}
문자열 변환 관련에서는 다음 글을 참고해 주세요,.
[게임 개발/Unreal Engine 기본] - [UE4] 문자열 변환 - FName, FText, String
출처
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/
https://docs.unrealengine.com/4.27/ko/ProductionPipelines/Localization/Formatting/
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
[UE4] 스마트포인터 - TSharedPtr, TWeakPtr, TUniquePtr (0) | 2022.02.09 |
---|---|
[UE4] 문자열 변환 - FName, FText, String (2) | 2022.02.09 |
[UE4] 리플렉션 (0) | 2022.02.08 |
[UE4] CDO (Class Default Object) (1) | 2022.02.06 |
[UE4] 언리얼 오브젝트(UObject) (0) | 2022.02.06 |