개발 고수(가 되고 싶은) 블로그

엔진공부/언리얼 공부

[언리얼 공부] 언리얼 C++ 기본타입과 문자열

개발고수(가되고싶음) 2024. 8. 15. 23:34

언리얼 환경에서 알아두어야할 기본타입과 고려할 점

  • C++ 를 사용하지만 기본타입을 사용하지 않는다.
    • 플랫폼 파편화 때문
      • 플랫폼 파편화란 ?
        • 특정 함수나 타입들이 기기마다 다르게 작동될 수 있는 현상
      • C++ 최신 규약에서는 최소 32비트 보장 하지만 특정 플랫폼은 64 비트일 수도 있음 ( 빅엔디안, 리틀엔디안)
      • 단일 기기에서 최고의 성능을 뽑아내는 게임 프로그래밍에 치명적이다.
      • 데이터 타입의 애매 모호함은 게임 개발 시 문제를 일으킬 수 있다.
      • 네트워크 상에서 데이터 통신이 효율적이고 안정적이어야 한다.
  • 언리얼 엔진에서 사용하는 기본 타입
    • bool
      • 보편적으로 1byte 로 알려져 있지만 처리하는 os 에 따라 달라질 수 있기때문에 위험하여 크기를 추론해서 사용하는 일은 없는게 안정성에 좋다.
      • 헤더에는 가급적 uint8 타입을 사용하되 bit field 오퍼레이터 사용 한다.
        • uint8 bNetTemporary:1;
      • uint8과의 구분을 위해 b 접두사 사용
      • cpp 내부 로직에서는 자유롭게 bool 사용
    • TCHAR: 크기 추정 금지
      • 다양한 문자열을 사용하려면 FString를 사용

Character 형 인코딩 시스템에 대한 이해

  • 왜 언리얼은 문자열을 따로 지정하는가?
    • 처리해야 할 문자열 처리의 종류가 세 가지가 있지만, 이런 처리 종류를 신경 안 쓰고 TCHAR로 사용하면 됨
  • 언리얼에 로드되는 텍스트 파일
    • UTF-16으로 대부분의 파일을 로드한다.
    • 소스코드 - 코드 안에 스트링을 그대로 쓰는 것을 추천하지 않는다.
      • 이유
        • 컴파일 오류가 나도 왜 나는지 모르는 경우가 생긴다.
    • 만약, 한글을 소스코드 안에 넣고 싶다면!
      • UTF-8로 저장하고 깨질 수 있음을 감안해야 함 (하지말라는 뜻)

언리얼 C++이 제공하는 다양한 문자열 처리 방법과 내부 구성 이해

  • override된 함수는 Super::함수를 불러줘야 함
    • 아니면 이슈가 생겨도 왜 생겼는지 파악하기 힘듦
    • 상속받는 함수에 공통적인 처리를 했는데 적용이 안되는 슬픈일이 생길수 있다.
  • FString 포인터로 넘겨줘야 실제 가지고 있는 문자열 데이터를 가져올 수 있음

문자열 처리

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

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

  • FName: 애셋 관리를 위해 사용되는 문자열 체계 - C# dictionary 형식으로 저장됨 (Key value 쌍)
    • 대소문자 구분 없이 처리한다. Key 처럼 작동하기 때문에.
    • 이름을 저장하는 데 유용
    • 애셋 키를 지정하는 용도로 사용, 내부적으로는 hash 값을 사용함
      • 즉, 한번 선언되면 int32로 변환됨
    • 문자열 처리를 위한 것이 아니라 무엇을 찾기 위한 것
    • 자주 호출하면 오버헤드 발생 (계속 hash 함수를 통하여  NamePool에서 검색)
      • 해결 방법:
        • const static FName staticOnlyOnce(TEXT("이름"))으로 하면 더 이상 찾을 일이 없어 오버헤드 줄어든다.
  • FText: 다국어 지원을 위한 문자열 관리 체계
    • 일종의 키로 작동
    • 문자열 테이블 정보가 추가로 요구됨
    • 게임 빌드시 자동으로 다양한 언어 지원
    • 이걸 이용하지 않으면 다국어 대응시 굉장히 난감해질수있다.
반응형