Unreal Engine Garbage Collection

2025. 1. 13. 12:21·Unreal Engine

1. 언리얼 엔진에서의 GC 동작 방식

  • overview
    • UObject의 파생된 오브젝트가 인스턴스화되면, 언리얼 엔진의 GC 시스템에 등록된다.
      • 인스턴스화
    • 언리얼 엔진의 GC는 30~60초마다 자동으로 더이상 사용되지 않는 객체를 찾아 제거한다.
  • 언리얼 GC 시스템
    • 영구적으로 존재하는 Root Set를 가지고 있다.
    • reflection을 사용해서 오브젝트의 property를 살펴보고, 참조된 객체에 대해서도 이를 재귀적으로 검사한다.
    • 연결된 오브젝트들 중 하나라도 Root Set에 연결되어 있으면, 살아있는 상태로 유지되고
    • Root와 연결되지 않은 경우 해제시키고, 이 오브젝트가 가리키던 모든 포인터를 null로 설정한다.

2. Unreal's GC system C++ 코드

  • 함수 안에서의 포인터
    • C++에서의 동작과 같음
    • 잠시 포인터로 특정 변수를 받아서 처리하고, 끝 이런식(아래 코드 처럼)
void AMyClass::Func()
{
    AActor* MyOWner = GetOwner();
    if(IsValid(MyOwner))
    {
        //
    }
}
  • 오브젝트에 대한 포인터가 한 프레임 이상 존재하는 경우의 처리
    1. 포인터는 멤버 변수에 저장해야 하고, UPROPERTY() 매크로가 있어야 한다.
      • UObject 하위 클래스들은 이 매크로를 통해 GC 시스템에 등록되도록 해준다.
    2. TWeakObjectPtr or FWeakObjectPtr 사용하기
      • 오브젝트를 유지하지는 않지만, 오브젝트가 소멸된 후 IsValid를 통해 체크할 수 있기 때문이다.
      • 실제로 해당 객체를 책임지지는 않지만, 참조는 유지하면서 그 참조가 유효한지 아닌지 체크할 수 있다.
      • 대부분의 경우 사용하지 않는 방식이긴 함

3. 수동으로 특정 객체 파괴하기

  • Destroy 함수
    • 이 함수를 통해 액터를 파괴하면, 프레임이 끝날 때 월드에서 제거된다.
    • 프레임이 끝나기 전까지는 계속 존재하며, 프레임이 끝난 순간 포인터가 null 이 된다.
  • IsValid 함수 (객체에 대한 포인터의 유효성 체크)
    • 포인터가 nullptr 일때
    • Destroy가 호출된 경우(월드에서 제거되지 않았더라도)
    • false 반환

4. 수동으로 메모리 관리하기

  • new와 delete를 사용해서 C++와 마찬가지의 방법으로 처리할 수 있다.
    • new를 통해 생성한 경우, 프로그래머가 해당 메모리를 직접 관리해야 한다.
    • 꼭 delete를 해주기
  • 단, 일반 C++ 클래스는 언리얼 클래스에 포함되어야 한다.

5. Root Set 수정하기

  • 위에서 언급한 root set에는 아무것도 추가하지 말 것
  • 추가하면, 크래시 발생한다.

 

'Unreal Engine' 카테고리의 다른 글

Unreal Engine - 개발 환경 세팅 및 빌드 프로세스  (0) 2025.01.21
Unreal Engine Dedicated Server  (0) 2025.01.13
Unreal Property System (Reflection)  (0) 2025.01.13
Unreal Engine Pointer Types  (1) 2025.01.09
UE_LOG 보충 (+ 과제)  (1) 2025.01.07
'Unreal Engine' 카테고리의 다른 글
  • Unreal Engine - 개발 환경 세팅 및 빌드 프로세스
  • Unreal Engine Dedicated Server
  • Unreal Property System (Reflection)
  • Unreal Engine Pointer Types
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    actor 클래스
    DP
    addonscreendebugmessage
    blend pose
    BFS
    C++
    character animation
    map을 vector로 복사
    상속
    템플릿
    cin함수
    Vector
    싱글턴
    motion matching
    const
    applydamage
    gamestate
    enhanced input system
    매크로 지정자
    additive animation
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
Unreal Engine Garbage Collection
상단으로

티스토리툴바