메모내용

Unreal Engine Types

  • 언리얼의 기본타입
  • 언리얼 엔진의 자료형 타입과 크기
  • 언리얼 컨테이너 시간복잡도 비교
  • 왜 언리얼은 기본 타입을 따로 지정하는가?

  • 1970 년대에 개발되서 아직도 사용중인 c++ 언어
    시대가 변하면서 하드웨어 사양도 발전했는데,
    잘 작동하던 함수가 특정 기기에서는 다르게 동작 하는 경우가 있다.
    이를 플랫폼 파편화(Platform Fragmentation) 라고 하는데.
  • C++ 최신 규약에서는 int 는 최소 32 비트를 보장하도록 규정되어 있다.
    특정 플랫폼에서는 64 bit 로 해석될 수 있다.
    따라서 데이터를 저장할 때 int 타입의 크기를 확신할 수 없다.
  • 게임 제작에 있어서는 데이터 정보가 명확해야 한다.
    단일 컴퓨터에서 최대 포퍼먼스를 뽑아내기 위해서는 데이터 가 몇바이트 사용되는지 정확해야하며
    네트워크 상에서 데이터 통신이 효율적이고 안정적이어야 한다.

    데이터 타입의 애매모호함은 게임 개발시 문제를 일으킬 수 있기 때문에,
    언리얼은 기본 타입을 따로 지정 한다.
  • 언리얼 엔진의 타입과 크기

    주요 타입만 설명
  • bool : boolean 값, ( bool 값 추정 금지) , BOOL 은 컴파일 되지 않습니다.
      크기가 정확하지 않습니다.
      참과 거짓에 관한 데이터를 네트워크를 통해서 전송한다거나 파일로 저장할 때 정확하게 명시가 되어 있지 않다.
      그래서 데이터를 저장하는 선언되는 헤더파일, 클래스 헤더의 멤버 변수에는 bool 을 사용하지 않고 byte 를 사용하는것이 좋다.
      헤더에서는 가급적 bool 대신 uint8 타입을 사용하여 Bit Field 오퍼레이터를 사용하도록 하자.
      그리고 일반 uint8 과의 구분을 위해 b 접두사를 사용한다.
      cpp 로직에서는 자유롭게 bool 을 사용해도 좋다.

      예시
                              
                                  UPROPERTY()
                                  uint8 bDataBoolean:1;
                              
                              
  • uint8 : data 통신 같은 바이너리 정보를 주고받을때는 uint8 이 좋다
  • int : 정수형 , 플랫폼에 따라 크기가 변할 수 있지만 너비가 적어도 32 비트임이 보장되므로, 정수 너비가 중요하지 않은 경우라면 사용해도 괜찮다.
  • unsigned int : 정수형, 플랫폼에 따라 크기가 변할 수 있지만 너비가 적어도 32 비트임이 보장되므로, 정수 너비가 중요하지 않은 경우라면 사용해도 괜찮다.
  • int32 : 정수형, signed int (4byte)
  • TCHAR : charctor ( TCHAR 크기 추정 금지 )
  • float : 실수형 (4byte)
  • double : 실수형 (8byte)
  • 언리얼 컨테이너 자료구조의 시간 복잡도 비교

  • 자료구조의 시간 복잡도 (TimeComplexity)
  • TArray TSet TMap TMultiMap
    접근 O(1) O(1) O(1) O(1)
    검색 O(N) O(1) O(1) O(1)
    삽입 O(N) O(1) O(1) O(1)
    삭제 O(N) O(1) O(1) O(1)
    빈틈없는 메모리
    가장 높은 접근성능
    가장 높은 순회성능
    빈틈있는 메모리
    빠른 중복 감지
    .
    중복불허
    Key,Value 관리
    중복허용
    Key,Value 관리