언리얼 환경에서 알아두어야할 기본타입과 고려할 점
- C++ 를 사용하지만 기본타입을 사용하지 않는다.
- 플랫폼 파편화 때문
- 플랫폼 파편화란 ?
- 특정 함수나 타입들이 기기마다 다르게 작동될 수 있는 현상
- C++ 최신 규약에서는 최소 32비트 보장 하지만 특정 플랫폼은 64 비트일 수도 있음 ( 빅엔디안, 리틀엔디안)
- 단일 기기에서 최고의 성능을 뽑아내는 게임 프로그래밍에 치명적이다.
- 데이터 타입의 애매 모호함은 게임 개발 시 문제를 일으킬 수 있다.
- 네트워크 상에서 데이터 통신이 효율적이고 안정적이어야 한다.
- 플랫폼 파편화란 ?
- 플랫폼 파편화 때문
- 언리얼 엔진에서 사용하는 기본 타입
- bool
- 보편적으로 1byte 로 알려져 있지만 처리하는 os 에 따라 달라질 수 있기때문에 위험하여 크기를 추론해서 사용하는 일은 없는게 안정성에 좋다.
- 헤더에는 가급적 uint8 타입을 사용하되 bit field 오퍼레이터 사용 한다.
-
uint8 bNetTemporary:1;
-
- uint8과의 구분을 위해 b 접두사 사용
- cpp 내부 로직에서는 자유롭게 bool 사용
- TCHAR: 크기 추정 금지
- 다양한 문자열을 사용하려면 FString를 사용
- bool
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: 다국어 지원을 위한 문자열 관리 체계
- 일종의 키로 작동
- 문자열 테이블 정보가 추가로 요구됨
- 게임 빌드시 자동으로 다양한 언어 지원
- 이걸 이용하지 않으면 다국어 대응시 굉장히 난감해질수있다.
반응형
'엔진공부 > 언리얼 공부' 카테고리의 다른 글
[언리얼 공부] 인터페이스(Interface) 와 컴포지션(Composition) (0) | 2024.08.21 |
---|---|
[언리얼 공부] 언리얼 리플렉션 시스템 (0) | 2024.08.21 |
[언리얼 공부] 언리얼 오브젝트 소개 (0) | 2024.08.19 |