728x90
UE5
FString
- FName 이나 FText 와는 달리, FString 은 조작이 가능한 유일한 스트링 클래스이다. 대소문자 변환, 부분문자열 발췌, 역순 등 사용가능한 메서드는 많다.
- FString 은 검색, 변경에 다른 스트링과의 비교도 가능하다. 그러나 바로 그것이 FString 이 다른 불변의 스트링 클래스보다 비싸지는 이유이다.
FString 만들기
- 다음 구문으로 FString 을 선언할 수 있다.
FString TestHUDString = FString(TEXT("This is my test FString."));
숫자 및 기타 변수
변수 유형 스트링에서 변환 스트링 포맷
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() 함수에 적합한 인수를 곁들어 사용하면 된다.
From FString
- FString 에서 int 나 float 숫자 변수로의 변환은 물론, 부울 변수로의 변환도 존재한다.
변수 유형 스트링에서 변환 참고
bool | TestHUDString.ToBool(); | |
int | FCString::Atoi(*TestHUDString); | |
float | FCString::Atof(*TestHUDString); |
비교
- 오버로딩된 == 연산자를 사용해서 두 FString 을 비교하거나, 하나의 FString 과 TCHAR*s 배열을 비교할 수 있다.
- FString::Equals() 메서드도 있는데, 검사 대상 FString 과, 비교시 대소문자를 무시할 것인지를 나타내는 ESearchCase Enum 을 받는다.
- 대소문자 상관없는 비교를 하려는 경우 ESearchCase::IgnoreCase 를, 아닌 경우 ESearchCase::CaseSensitive 를 사용한다.
TestHUDString.Equals(TEXT("Test"), ESearchCase::CaseSensitive);
검색
- FString 안에서 검색을 할 때는, 두 가지 검색 유형이 있다.
- 첫째, FString::Contains() 는 서브스트링을 찾은 경우 true 를, 아니면 false 를 반환한다. FString::Contains() 의 검색 대상은 FString 거나 TCHAR* 의 서브스트링이다.
- ESearchCase Enum 을 사용해서 검색시 대소문자를 무시할 것인지를 지정할 수 있다. 또한, ESearchDir Enum 을 사용해서는 검색 방향을 지정할 수 있다. 검색 기본값은 대소문자 무시이며, 처음서부터 시작한다.
- TestHUDString.Contains(TEXT("Test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd);
- 둘째, FString::Find() 는 처음 찾은 서브스트링 인스턴스의 인덱스를 반환한다. FString::Find() 의 검색 대상은 FString 또는 TCHAR* 의 서브스트링이다. FString::Contains() 와 마찬가지로, 대소문자 구분 여부와 검색 방향을 지정할 수 있으며, 기본값은 대소문자 무시에 처음서부터 검색이다.
- 또다른 옵션으로는, 스트링 안에서 검색을 시작할 인덱스를 지정할 수도 있다. FString::Find() 이 서브스트링을 찾지 못하는 경우, -1 을 반환한다.
- TestHUDString.Find(TEXT("test"), ESearchCase::CaseSensitive, ESearchDir::FromEnd, 10);
FString 조립하기
- 서브스트링이나 다른 변수 유형으로부터 스트링을 조립하는 메서드는 두 가지 있다.
- 첫째, 접합(concatenation)은 FString 만을 인수로 받는다. 다른 변수 유형은 FString 으로 변환을 해 줘야 접합시킬 수 있다.
- 둘째, Printf 는 int 나 float 같은 숫자 입력을 받을 수 있으며, 스트링에 추가시킬 입력 형식을 설정할 수도 있다.
접합
- 스트링 접합 연산자는 두 가지이다.
연산자 설명 사용법
+= | 제공된 스트링을 FString 오브젝트에 덧붙입니다. | StringResult += AddedString; |
+ | 새 FString 오브젝트를 만들어 제공된 스트링을 덧붙입니다. |
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;
}
FString 조작하기
- 스트링 조작을 위한 함수는 여러가지 있다.
- 스트링 서브섹션 복사를 위한 함수는 Left, Right, Mid 가 있다. 지정된 서브섹션 위치를 기준으로 스트링을 둘로 분할시킬 수 있다. 그 작업은 Split 메서드를 통해 이루어진다. 스트링 분할을 위한 또다른 메서드는 ParseIntoArray 로, 스트링을 지정된 구분자마다 스트링 배열에 분할시킨다.
- 대소문자 변환은 ToUpper, ToLower 를 통해 이루어지며, 각각 스트링을 대문자, 소문자로 변환시킨다.
뷰포트 출력
- 디버그 메시지를 뷰포트 에 출력하려면 UEngine::AddOnScreenDebugMessage() 를 사용합니다. 이 함수는 다음의 네 파라미터를 (순서대로) 받는다.
파라미터 이름 파라미터 유형 설명
Key | int | 같은 메시지가 여러번 추가되지 않도록 하기 위한 고유 키입니다. 디버그 메시지를 트랜션트(휘발성으)로 만들려면 키 값을 -1 로 사용합니다. |
TimeToDisplay | float | 메시지를 얼마나 오래 표시할 것인지, 초 단위입니다. |
DisplayColor | FColor | 표시되는 텍스트의 색입니다. |
DebugMessage | FString | 표시할 메시지 (FString) 입니다. |
출력 로그 출력
- UE_LOG 는 파라미터에 printf 마크업을 사용한다.
UE_LOG(LogClass, Log, TEXT("This is a testing statement. %s"), *TestHUDString);
- LogClass 는 로그 카테고리이다. (OutputDevices.h 에 DECLARE_LOG_CATEGORY_EXTERN 으로 설정된) 기존 카테고리를 사용할 수도, DEFINE_LOG_CATEGORY_STATIC 을 사용해서 자체적으로 정의할 수도 있다.
- Log 는 상세도이다. 상세도는 ELogVerbosity Enum 에 정의된다. 가능한 값은 Fatal, Error, Warning, Display, Log, Verbose, VeryVerbose 이다.
- 다음 인수는 출력하고자 하는 텍스트로, 파라미터 마크업 포함이다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.10.22 VV, UE5 (3) | 2024.10.23 |
---|---|
24.10.21 UE5 (0) | 2024.10.22 |
24.10.17 CS, UE5 (3) | 2024.10.18 |
24.10.14 게임 서버 (0) | 2024.10.14 |
24.10.11 게임 서버 (0) | 2024.10.11 |