회사 및 과거 프로젝트가 유추될 수 있는 사항은 제외했습니다.
언리얼 리플렉션 시스템 (https://www.unrealengine.com/ko/blog/unreal-property-system-reflection)
- 프로그램이 실행시간에 자기 자신을 조사할 수 있는 기능. (본인이 어떤 클래스인지 등을 알 수 있음)
- 언리얼 엔진에서 C++ 클래스, 구조체, 함수, 멤버 변수, 열거형 관련 정보를 수집, 질의, 조작하는 별도의 시스템
- 리플렉션 시스템에 등록시키고자 하는 변수 등에 UProperty 키워드 등을 부착시 Unreal Header Tool (UHT) 에 의해 리플렉션 시스템에 등록됨
- UProperty 사용시, 언리얼 GC에 포함이 됨.
- 각종 메타데이터들을 추가하여 해당 변수가 어떤 속성을 가졌는지를 알 수 있음.
언리얼 최적화 관련
- 언리얼에서는 자체적인 GC를 사용함.
- GC는 다음과 같이 작동함 ::
Unreachable 플래그를 모든 UObject에 부착 -> RootSet에 걸려있는 UObject에서 플래그 회수 -> 플래그 남은 UObject 기록 -> 리스트업 된 UObject Destroy (Begin/Finish) -> UObject의 소멸자 호출 - GC의 타겟이 되지 않게 하기 위해서는 관련 오브젝트에 "AddToRoot" 혹은 "SetFlags(RF_MarkAsRootSet)" 플래그를 붙이면 됨.
- 주로, 인게임에서 이미 소멸된 액터거나 Replicate 범위 밖 (NetCullDistance)에 존재하는 경우 타겟이 될 수 있음.
언리얼 리플리케이션 관련
- 기본 개념 : 서버-클라간 동기화를 위한 개념
- 서버->클라로는 호출한 / 소지한 (Autonomous) 클라이언트에게, 혹은 모든 클라이언트에게 전달 (Multicast) 가능
- 클라->서버로는 클라이언트가 소지한 액터가 Autonomous일때만 서버로 전송가능 (이것도 RPC만 가능)
- 변수 리플리케이션은 "원칙적으로는" 서버->클라만 가능함.
- Role
- Role은 Local Role / Remote Role 2개가 있음.
- 보통 서버 입장에서 Local Role은 Authority인 경우가 대부분
- 클라에서는 Remote는 Authority, Local이 다를 수 있음.
- 비교
- 클라 입장에서 Autonomous - "현재 클라이언트가 컨트롤 중인 플레이어"
- 클라 입장에서 Simulated - "현재 클라이언트의 영향 외의 동기화 액터"
- 기타
- RPC는 단발성 리플리케이션에 주로 사용, 변수 리플리케이션은 영구적 리플리케이션에서 주로 사용함.
언리얼 포인터 관련
기본적으로 언리얼 스마트 포인터는 Object 포인터와 일반 포인터 (비 Object 포인터 = C++ 노멀 포인터)가 있음
- 오브젝트 포인터 (Actor 클래스 등의 언리얼 오브젝트에서 사용. 언리얼 GC 타겟이 된다.)
- TWeakObjectPtr - 순환참조 이슈 등을 대응하기 위한 오브젝트 포인터. 참조 대상 파괴시 nullptr로 세팅됨.
- TObjectPtr - 64bit 기반 신규 포인터.
원시포인터 (Normal Pointer) 와 유사하나, 다이나믹 해상도 (액터에 대한 동적 해상도 전환), 엑세스 트래킹 등의 신규 기능 추가.- 5.0 되면서 추가된 신규 포인터임. 원시 포인터를 TObjectPtr로 바꾸는걸 언리얼에서는 권장함.
- 5.0 되면서 추가된 신규 포인터임. 원시 포인터를 TObjectPtr로 바꾸는걸 언리얼에서는 권장함.
- 노멀 포인터
- TUniquePtr - 일반적인 Unique Pointer와 동일. (하나의 포인터로 단 하나의 메모리만을 참조)
- TSharedPtr - 일반적인 Shared Pointer와 동일
- TWeakPtr - 일반적인 Weak Pointer와 동일 (Shared Pointer의 보조)
- TWeakPtr은 TSharedPtr를 통해서만 복사 생성, 대입 연산이 가능하다.
- TWeakPtr은 TSharedPtr를 참조하되, 레퍼런스 카운트를 증가시키지 않는다.
- TWeakPtr을 통해 객체를 참조하려면 반드시 TSharedPtr로 변환하여 사용해야 한다.
'게임 개발 > Unreal' 카테고리의 다른 글
Unreal Workflow (Pipeline) (0) | 2024.10.10 |
---|---|
짐벌락과 기타등등 (0) | 2024.09.12 |
(UnrealEngine 5.3 or Higher) EnhacedInput과 AbilitySystem 연동 (0) | 2024.08.16 |
짧막 팁 : AbilitySystem 관련 헤더를 불러오지 못할때 (0) | 2024.08.12 |
2D 작업 관련 메모 (0) | 2024.08.09 |