본문 바로가기
게임 공부/Unreal Engine

Hard Object Pointer

by woohyeon 2021. 12. 13.
반응형

언리얼 엔진엔 관리되는(Managed) 포인터와 관리되지 않는(Unmanaged) 포인터가 있다. 관리되는 포인터는 언리얼의 가비지 컬렉션과 함께 동작하며, UObject 타입과 함께 동작한다.

하드 오브젝트 포인터는 관리되는 포인터 중 하나이다. 따라서 UPROPERTY() 매크로가 붙는다.

UPROPERTY() UObject* Pointer = nullptr;

하나의 오브젝트(A)를 가리키는 모든 하드 포인터가 nullptr가 되지 않는 이상 가비지 컬렉션은 해당 오브젝트(A)를 파괴하지 않을 것이다. 또한 해당 오브젝트(A)에 대해 Destory를 직접적으로 호출하지 않는 이상 파괴되지 않는다. 해당 포인터를 안전하게 사용하려면 IsValid() 함수를 사용해야 한다. 이 함수는 nullptr와 PendingKill 상태인지를 확인한다. PendingKill은 당장은 아니지만 곧 파괴될 오브젝트인지에 대한 상태이다.

만약 애셋을 참조하는 하드 오브젝트 포인터가 있고, 이 포인터를 어떤 클래스가 가지고 있다면 이 클래스의 인스턴스가 생성될 때 애셋도 로드된다. 즉 이 애셋을 참조하는 포인터가 여러군데 있으면 각각 원할 때 로드하지 못하고 한번에 로드되므로 비효율적일 수 있다. 이를 해결하려면 Soft Object Pointer를 사용하면 된다. 

https://unrealcommunity.wiki/pointer-types-m33pysxg

 

Pointer Types | Unreal Engine Community Wiki

Overview of UObject and "Smart" pointer types in Unreal

unrealcommunity.wiki

 




댓글