반응형
액터의 수명 주기
액터의 생명 주기에 대해서 이해를 하고 있어야 겠습니다.
이 문서는 액터의 수명 주기에 대한 일반적 개요서로, 액터가 레벨에 어떻게 인스턴스가 생성 (Spawn) 되고 소멸 (Destroy) 되는지에 대해서입니다.
가비지 콜렉터
언리얼 엔진은 자체 스마트 포인터를 제공하며 이를 통해 자동으로 가비지 콜렉션을 수행합니다.
[게임 개발/Unreal Engine 기본] - [UE4] 스마트포인터 - TSharedPtr, TWeakPtr, TUniquePtr
가비지 콜렉션 수행 주건
- UObject 파생 클래스의 멤버 변수는 UPROPERTY 매크로 선언
- 네이티브 클래스의 경우TSharedPtr, TSharedRef, TUniquePtr로 멤버 변수를 선언
- 댕글링 포인터 문제나 공유 포인터 순환 참조 문제를 피하기 위해서는 TWeakPtr 사용, UObject의 경우 TWeakObjectPtr 사용
- UObjectBaseUtility::AddToRoot 또는 UObjectBaseUtility::SetFlags(EObjectFlag::RF_MarkAsRootSet) 수행시 GC 제외
오드젝트 소멸시점에 다음과 같은 코드를 작성하여 GC 수집 대상으로 포함시킬 수 있습니다. 그렇지만 당연히 다른 공유 포인터가 없어서 참조 카운트가 0 이여야 메모리 해제가 됩니다.
if (!ptr)return;
if (!ptr->IsValidLowLevel()) return;
ptr->ConditionalBeginDestroy();
ptr = nullptr; // 참조 카운트 리셋, ptr->Reset()도 동일합니다.
ForceGarbageCollection 함수를 하출하여 다음 프레임에 GC감지를 트리거합니다.
/** Updates the timer between garbage collection such that at the next opportunity garbage collection will be run. */
// void ForceGarbageCollection(bool bFullPurge = false);
GEngine->ForceGarbageCollection();
bFullPurge를 true로 설정하면 이 프레임의 모든 GC 오브젝트를 채웁니다. 이 접근 방식은 불규칙한 프레임 속도를 유발할 수 있지만 메모리가 부족할 때 유용합니다.
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
[UE4] 오브젝트 생성 - CreateDefaultSubobject , NewObject, SpawnActor (0) | 2022.02.12 |
---|---|
[UE4] UObject의 참조 카운트(UObject Reference Count) (0) | 2022.02.10 |
[UE4] 언리얼 오브젝트의 기능 (0) | 2022.02.10 |
[UE4] 스마트포인터 - TSharedPtr, TWeakPtr, TUniquePtr (0) | 2022.02.09 |
[UE4] 문자열 변환 - FName, FText, String (2) | 2022.02.09 |