언리얼 C++ 기본 타입과 문자열

2023. 11. 3. 22:14·Unreal 공부

Bool

언리얼에서 bool은 크기가 명확하지 않은 타입이다. 따라서 이를 확실하게 하며 데이터를 줄이기 위해 uint8을 사용한다.

여기에서 더 작은 크기를 사용하기 위해 Bit Field를 사용해서 1비트로 데이터를 제한할 수 있다.

UPROPERTY()
uint8 bNetTemporary:1;

단순히 Bool을 써도 되지만 굳이 이렇게 하는 이유는 언리얼 오브젝트의 프로퍼티를 데이터 통신 및 시리얼라이제이션 등에 사용 시 명확한 크기를 지정하기 위함이다. 그렇기에 비트필드는 UPROPERTY에 대해서만 사용한다. UPROPERTY가 아닌 경우에는 크기를 명확히 지정할 필요가 없기에, 비트필드가 아닌 bool을 사용하면 됩니다. 이 경우는 보통 하던 대로 헤더에서 초기화해 줄 수 있다.
UPROPERTY는 언리얼 오브젝트 메커니즘의 특성상 헤더파일이 아닌 생성자에서 초기화 해주어야 한다.

 

캐릭터 인코딩

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

유니코드를 사용하고 UTF-16으로 맞추되, 소스코드는 많이 사용되는 UTF-8을 가급적 사용합시다.

 

문자열을 쓸 때 주의사항!

  • 유니코드를 사용해 문자열 처리를 통일. 
    • 이 중에서 2byte로 사이즈가 균일한 UTF-16을 사용
    • 유니코드를 위한 언리얼 표준 캐릭터 타입 : TCHAR
  • 문자열은 언제나 TEXT 매크로를 사용해 지정
    •  TEXT 매크로로 감싼 문자열은 TCHAR 배열로 저장됨
  • 문자열을 다루는 클래스로 FString를 제공함
    •  FString은 TCHAR 배열을 포함하는 헬퍼 클래스

 

TCHAR와 FString

TCHAR 

: 언리얼에서 사용하느 문자 배열입니다.

 

TEXT매크로의 반환값은 TCHAR의 배열이다.

TCHAR LogCharArray[] = TEXT("Hello Unreal");
UE_LOG(LogTemp, Log, LogCharArray);

 

FString

: 조작이 가능한 유일한 스트링 클래스입니다.

FString TestHUDString = FString(TEXT("This is my test FString."));
UE_LOG(LogTemp, Log, TEXT("%s"), *TestHUDString);
  • 문자열을 만들때 TCHAR 배열만 들어가기 때문에  %s에 대응될 때는 포인터 어레이를 반환해 줘야 해서 포인터 연산자를 지정해 준다.
  • FString에는 TArray(컨테이너 클래스)라고 하는 언리얼 엔진이 제공하는 동적 배열 클래스가 있다.
  • FString은 FCString을 포함하고 있다.
  • FCString : C라이브러리에서 제공하는 기본적인 스트링 관련 함수들을 포함하는 래퍼 클래스(Wrapper Class)

TCHAR, FSting, FCString의관계

 

FString 함수

●다른 타입에서 FString으로의 변환

  • FString::Printf
  • FString::SanitizeFloat
  • FString::FromInt

● C런타임 수준에서 문자열을 처리하는 클래스 FCString

  • 예) 문자열을 찾는 strstr을 사용

● FString에서 다른 타입으로의 변환( 안전하진 않으므로 주의)

  • FCString::Atoi
  • ◎FCString::Atof

●FString 함수의 활용

// FString의 값을 바꿀 때 
const TCHAR* LongCharPtr = *LogCharString;
TCHAR* LogCharDataPtr = LogCharString.GetCharArray().GetData();

// TCHAR의 내용을 복사할 때
TCHAR LogCharArrayWithSize[100];
FCString::Strcpy(LogCharArrayWithSize, LogCharString.Len(), *LogCharString);

// 문자열에 부분 문자열이 포함되어 있는지 여부를 반환합니다
FString.Contains(TEXT("unreal"), ESearchCase::IgnoreCase)

// 처음 발견된 인스턴스의 이 문자열로 인덱스를 반환합니다.
FString.Find(TEXT("unreal"), ESearchCase::IgnoreCase)

// 인덱스 5부터 끝까지 잘라줍니다.
FString.Mid(5)	

// 단어를 기준으로 문자열을 나눠줍니다.
FString Left, Right;
LogCharString.Split(TEXT(" "), &Left, &Right)

 

 

FName

FName

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

  • 대소문자 구분 없음
  • 한번 선언되면 바꿀 수 없음
  • 가볍고 빠름
  • 문자를 표현하는 용도가 아닌 애셋 키를 지정하는 용도로 사용. 빌드시 해시값으로 변환됨
  • 언리얼은 FName과 관련된 글로벌 Pool 자료구조를 가지고 있음

FText 

: 다국어 지원을 위한 문자열 관리 체계

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

● FName과 글로벌 Pool 

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

● FName의 형성

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

FNamePool 

: FName들을 보관하고 있는 글로벌 Pool을 가지고 있다. ( key = FName )

 

●FName을 쓸 때의 주의점
: 생성자를 사용할 때 동일한 key가 있는지 전수 조사하기 때문에, 자주 실행하는 함수에 작성 시 오버헤드가 발생할 수 있다.

'Unreal 공부' 카테고리의 다른 글

[UE] Breaking Down the Components of Gameplay  (0) 2023.11.27
[UE] C++ for Blueprinters  (0) 2023.11.27
언리얼 엔진 코딩 표준  (0) 2023.11.02
[Unreal] 오버랩 이벤트, 히트 이벤트  (1) 2023.10.05
[Unreal] C++ 파일이 먹통이 됬을때 (and UE 인텔리센스 Fix 펌)  (1) 2023.10.03
'Unreal 공부' 카테고리의 다른 글
  • [UE] Breaking Down the Components of Gameplay
  • [UE] C++ for Blueprinters
  • 언리얼 엔진 코딩 표준
  • [Unreal] 오버랩 이벤트, 히트 이벤트
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩 공부
        • TIL(Today I Learn)
        • TIL
        • 백준(C++)
        • Python
        • 알고리즘
        • 프로젝트 회고
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • Unreal 공부
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • 학교수업
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 일상
        • 주식
        • 독서
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
언리얼 C++ 기본 타입과 문자열
상단으로

티스토리툴바