본문으로 바로가기

[Unreal Engine 5] 기본타입과 문자열

category UnrealEngine/Impl 2023. 6. 22. 12:08

왜 언리얼은 기본 타입을 따로 지정하는가?

C++ 최신 규약에서 int는 최소 32bit를 보장하도록 규정되어있음

특정 플랫폼에서는 64bit로 해석될 수 있음

따라서 데이터를 저장할 때 int 타입의 크기를 확신할 수 없음

-> 게임 제작의 경우에는 단일 컴퓨터에서 퍼포먼스를 최대치로 뽑아내는것이 목표다.

그렇다면 캐시히트율 같은것들을 고려하여 제작해야하는데, 데이터 정보가 캐시 크기에 맞춰서 잘 정렬되어있어야 한다.

애매모호한 크기를 가진 것은 게임 제작에 영향을 미칠 수 있음

 

애매모호한 크기를 가진 데이터 타입은 게임 개발시 성능을 저하시키고 문제를 일으킬 수 있음

 

C#의 경우 int 타입이 있지만 4바이트인 int32로 명확히 정의되어 있음

 

언리얼 엔진에서는 다음과 같은 기본 타입을 사용한다. 

 

bool 타입은 표준자체가 없으므로, 크기가 명확하지 않다.

이런 참/거짓을 표현하는 타입을 네트워크로 통신하거나, 파일로 저장할 때 어떻게 해야할 지 정확히 명시되어 있지 않음

가급적 bool 대신 uint8타입을 사용하되 BitField operator 를 사용한다.

헤더가 아닌 cpp에서 bool 타입을 사용할 때는 uint8 타입을 사용하지 않아도 된다.

 

왜 언리얼은 문자열을 따로 지정하는가?

문자열 처리의 종류 : Single Byte (ANSI, ASCII) : 컴퓨터 초창기

Multibyte(EUC-KR, CP949) : 컴퓨터 보급기

Unicode(UTF-8, UTF-16) : 국제 표준 정착기 

 

하지만 이 모든 문자열은 아직도 사용되고 있음

C++ STL 은 ASCII, UTF-8, UTF-16만 지원함

 

언리얼의 모든 스트링은 FString 혹은 TCHAR 정렬 상태로 UTF-16 포맷 메모리에 저장한다.

즉, 다른 문자열 처리 종류를 상관하지 않고 FString과 TCHAR를 사용하면 된다는 것이다.

문자열은 언제나 TEXT 매크로를 사용해서 지정해야한다.

이 매크로로 감싼 문자열은 TCHAR 배열로 지정된다.

 

런타임에 문자열의 정보를 가공해야할 때가 있다. 이때는 FString 클래스를 사용해야 한다.

FString은 TCHAR를 포함하는 헬퍼 클래스이다.

 

FString 의 정보는 https://docs.unrealengine.com/5.2/ko/fstring-in-unreal-engine/ 에서 확인 가능하다.

 

우리가 TEXT를 사용하여 TCHAR 배열을 만들고, 이를 FString에 대입하면 

해당 문자열은 FString 내에서 TArray 로 관리가 된다.

 

FString은 내부적으로 FCString이라는 클래스로 관리하는데, 문자열을 가공할때는 FCString을 이용하여 진행한다.

FCString은 C런타임 수준에서 문자열을 처리하는 클래스이다. ( 예 : 문자열을 찾는 strstr 사용 )

 

 

FName

애셋 관리를 위해 사용되는 문자열 체계

대소문자 구분 없음

한번 선언되면 바꿀 수 없음

가볍고 빠름

문자를 표현하는 용도가 아닌 애셋 키를 지정하는 용도로 사용한다. 빌드시에 해시값으로 변환됨

 

언리얼은 FName과 관련된 글로벌 Pool 자료구조를 가지고 있다.

FName에 문자열을 집어넣었을 때, FName은 문자열을 저장하는 것이 아닌 해시 Key값을 저장해둔다.

데이터를 찾을땐 FNamePool에서 Key값을 비교하여 찾기때문에 가볍고 빠르게 찾아낼 수 있다.

 

 

FName의 정보는 https://docs.unrealengine.com/5.2/ko/fname-in-unreal-engine/ 에서 확인 가능하다.

 

FText

UI에서 다국어 지원을 위한 문자열 관리 체계이다.

일종의 키로 작용함

별도의 문자열 테이블 정보가 추가로 요구됨

게임 빌드 시 자동으로 다양한 국가별 언어로 변환됨

FString을 사용하여 문자열을 관리하는데, 이를 FName이나 FText로 변환하여 다양하게 사용할 수 있다.

'UnrealEngine > Impl' 카테고리의 다른 글

Unreal Engine Class Default Object (CDO)  (0) 2023.09.16
Unreal Header Tool (UHT)  (0) 2023.09.16
Unreal Build Tool (UBT)  (2) 2023.09.16
언리얼 에디터를 빌드하기  (0) 2023.09.16
[Unreal Engine 5] 메모리 관리  (0) 2023.06.29