목표

  • 언리얼 환경에서 알아두어야 할 기본 타입과 고려할점.
  • 캐릭터 인코딩 시스템에 대한 이해.
  • 언리얼C++이 제공하는 다양한 문자열 처리 방법과 내부 구성의 이해.

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

  • C++최신 규약에서 int는 최소 32비트를 보장하도록 규정 되어 있음.
    특정 플랫폼에서는 64bit로 해석될 수 있음 따라서 데이터를 저장할 때 int 타입의 크기를 확신할 수 없음.
  • 게임 제작에서의 데이터 정보가 명확해야 한다.
    단일 컴퓨터에서의 최대 퍼포먼스를 뽑아내야 한다.
    네트웍 상에서 데이터 통신이 효율적이고 안정적이어야 한다.

데이터 타입의 애매 모호함은 게임 개발시 문제를 일으킬 수 있음.

int 타입과 크기

  • 후발 언어 C#의 경우 int 타입이 있지만 4바이트인 int32로 명확히 정의되어 있음.
  • 언리얼은 int를 사용하지 않고 int32를 사용함.

언리얼 엔진의 타입과 크기

bool 타입의 선언

bool은 크기가 명확하지 않음. 언리얼 C++에서 헤더에는 가급적 bool대신 uint8타입을 사용하되 BitField 오퍼레이터를 사용하여 1비트만 사용하게 합니다. 그대신 일반 uint8과의 구분을 위해서 b접두사를 사용합니다. CPP로직에서는 자유롭게 bool을 사용해도 된다.

TCHAR와 FString

복잡한 문자열 처리를 하나로.

  • 유니코드를 사용해 문자열 처리를 통일 했다.(2byte로 사이즈가 균일한 UTP-16을 사용)
    유니코드를 위한 언리얼 표준 캐릭터 타입: TCHAR
  • 문자열은 언제나 TEXT 매크로를 사용해 지정한다.(TEXT 매크로로 감싼 문자열은 TCHAR 배열로 지정된다.)
  • 문자열을 다루는 클래스로 FString을 제공한다.(FString은 TCHAR배열을 포함하는 헬퍼 클래스이다.)
    언리얼 공식 문서: https://dev.epicgames.com/documentation/ko-kr/unreal-engine/fstring-in-unreal-engine?application_version=5.1

FString의 구조와 활용

다른타입에서 FString으로 변환

  • FString::Printf
  • FString::SanitizeFloat
  • FString::Fromint

C런타임 수준에서 문자열을 처리하는 클래스  FCString(예: 문자열을 찾는  strstr을 사용)
FString에서 다른 타입으로 변환(안전하진 않으므로 주의해야 한다.)

  • FCString::Atoi
  • FCString::Atof

FName의 활용

언리얼이 제공하는 다양한 문자열 처리.

FName: 애셋 관리를 위해 사용되는 문자열 체계이다.

  • 대소문자 구분이 없다.
  • 한번 선언되면 바꿀수 없다.(해쉬값으로 저장 되기 때문에 바꿀려면 까다롭다..)
  • 가볍고 빠르다.
  • 문자를 표현하는 용도가 아닌 애셋 키를 지정하는 용도로 사용한다.(빌드시 해시값으로 변환된다.)

FText: 다국어 지우너을 위한 문자열 관리 체계이다.

  • 일종의 키로 작용함.
  • 별도의 문자열 테이블 정보가 추가로 요구된다.
  • 게임 빌드 시 자동으로 다양한 국가별 언어로 변환된다.

FName 언리얼 공식 문서 : https://dev.epicgames.com/documentation/ko-kr/unreal-engine/fname-in-unreal-engine?application_version=5.1

FName의 구조와 활용

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

  • 문자열이 들어오면 해시 값을 추출해 키를 생성해  FName에서 보관한다.
  • FName값에 저장된 값을 사용해 전역 Pool에서 원하는 자료를 검색해 반환한다.
  • 문자 정보는 대소문자를 구분하지 않고 저장한다.(Ignore Case)

FName의 형성

  • 생성자에 문자열 정보를 넣으면 풀을 조사해 적당한 키로 변환하는 작업이 수반된다.
  • Find or Add

'언리얼 엔진 공부 > 언리얼C++' 카테고리의 다른 글

직렬화  (2) 2025.04.08
언리얼C++델리게이트(Delegate)  (0) 2025.04.03
컴포지션  (0) 2025.04.03
인터페이스  (1) 2025.04.02
언리얼 오브젝트 리플렉션 시스템  (0) 2025.04.01

+ Recent posts