TIL - Today I Learned : Unreal Engine의 Coding Standard.
데이터형 하나하나 플랫폼 간의 이식성과 코드의 명확성을 보장하기 위한 노력!
오늘의 진도: Section 4: Crypt Raider 101. TArray ~ 105. Early Return
언리얼 엔진 문서를 처음 볼 때는 익숙치 않았는데 보다보면
참 문서화가 잘 되어있는거 같다. 또 그만큼 방대하지만...
TArray
UPrimitiveComponent -> GetOverlappingActors() 는
overlap된 AActor*의 리스트를 Out Parameter로 전달 하는 함수이다.
실제로 반환값은 void 이지만 Parameter에 TArray<AActor*>& OverlappingActors 로
TArray를 참조 전달하면 함수에서 참조 전달 받은 주소에 데이터를 처리해주는 것이다.
내 코드에서 GetOverlappingActors() 함수를 호출하면서 argument로 TArray<AActor*>를 담을 변수를 전달한다.
UPrimitiveComponent::GetOverlappingActors()가 호출되며 참조 전달 받은 변수에
OverlappingComponents의 Actor들의 포인터(AActor*)를 담아준다.
재미있는건 OverlappingComponents의 크기가 12 보다 크면
GetOverlappingActors(TSet<AActor*>& OverlapSet)을 호출한다는 점이다.
이는 효율적으로 Overlap된 Actor를 가져오기 위함이다.
- TArray: 배열 기반의 컨테이너로, 요소를 순차적으로 저장한다.
일반적으로 메모리 할당과 접근이 빠르지만, 중복 제거 작업이 필요하다. - TSet: 해시 기반의 컨테이너로, 요소를 유일하게 저장한다.
중복을 자동으로 제거하지만, 해시 계산과 테이블 관리를 위한 작업이 필요하다.
그래서 적은 양의 데이터라면 TArray로 빠르게 접근하여 반복문으로 중복을 제거하고
많은 양의 데이터라면 TSet으로 중복을 제거하여 효율적으로 관리한다.
While & For Loops
Overlap된 모든 Actor의 이름을 로그에 출력하기 위해 For문을 사용한다.
언리얼에서 int를 int32와 같이 크기가 고정된 정수 타입을 사용하는 것이 일반적이라 한다.
이유는 int는 c++에서 최소 16 bit 이상의 크기이지만, 플랫폼마다 길이가 달라질 수 있다.
그래서 언리얼 엔진에서 기본으로 사용할 형식을 지정해 두었다.
참고 링크 : Coding Standard
Range Based For Loops
다음과 같은 범위 기반 For문으로 변경 할 수도 있다.
Actor Tags
특정 Actor에 대한 충돌 처리만 하고 싶을 때 Actor Tag를 사용한다.
Actor -> Tags -> Actor ->Tags 에서 Array Element를 추가한다.
그리고 충돌을 확인하는 곳에서 Actor->ActorHasTag() 함수에
Arugment를 정한 tag로 전달하여 호출하면 bool값을 반환한다.
인자값으로 넣어준 Tag와 일치하면 true를 반환하게 되는 것이다.
UPROPERTY를 사용하여 Tag를 에디터에서 설정할 수 있게 한다.
참고 링크 : Properties
Early Return
Actor의 tag를 확인하는 코드를 따로 함수로 만들어 두고
범위 기반 For문에서 원하는 tag를 찾았다면 더이상 For문을 순회하지 않도록 Early Return을 해준다.
'Unreal Engine > Udemy:UE5 C++ 학습하고 게임 만들기' 카테고리의 다른 글
Unreal Day - 30 - End of Section 4. Crypt Raider (0) | 2024.06.26 |
---|---|
Unreal Day - 29 - Dependency Injection (1) | 2024.06.26 |
Unreal Day - 27 - Physics Handle (0) | 2024.06.21 |
Unreal Day - 26 - Hit! (0) | 2024.06.18 |
Unreal Day - 25 - Reference & Pointer (0) | 2024.06.17 |