게임 개발/Unreal Engine 기본

[UE4] UObject의 참조 카운트(UObject Reference Count)

지노윈 2022. 2. 10. 15:33
반응형

어떠한 오브젝트의 참조 카운트를 얻을 수 있는 코드입니다.

static int32 URamaStaticFunctionLib::GetObjReferenceCount(UObject* Obj, TArray<UObject*>* OutReferredToObjects = nullptr)
{
	if(!Obj || !Obj->IsValidLowLevelFast()) 
	{
		return -1;
	}
	
	TArray<UObject*> ReferredToObjects;				//req outer, ignore archetype, recursive, ignore transient
	FReferenceFinder ObjectReferenceCollector(ReferredToObjects, Obj, false, true, true, false);
	ObjectReferenceCollector.FindReferences(Obj);

	if(OutReferredToObjects)
	{
		OutReferredToObjects->Append(ReferredToObjects);
        return OutReferredToObjects->Num();
	}
	return ReferredToObjects.Num();
}

 

누가 오브젝트를 참조 하고 있는가?

정확히 어떤한 오브젝트가 참조하고 있는지 TArray로 넘겨 받을 수 있습니다.

 

TArray<UObject*> ReferredToObjs;

GetObjReferenceCount(this,&ReferredToObjs);

for(UObject* Each : ReferredToObjs)
{
	if(Each)
	{
		UE_LOG(YourLog,Warning,TEXT("%s"), *Each->GetName());
	}
}

 

출처
https://nerivec.github.io/old-ue4-wiki/pages/garbage-collection-count-references-to-any-object.html