KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UObjectPoolManager 클래스 참조

액터를 재활용하여 런타임에 액터 스폰 비용을 최소화하는 오브젝트 풀링(Object Pooling) 관리 서브시스템입니다. 더 자세히 ...

#include <UObjectPoolManager.h>

+ UObjectPoolManager에 대한 상속 다이어그램 :
+ UObjectPoolManager에 대한 협력 다이어그램:

Public 멤버 함수

 DEFINE_SUBSYSTEM_GETTER_INLINE (UObjectPoolManager)
 
virtual void Deinitialize () override
 
AActor * GetPoolItem (const UObject *WorldContextObject, TSubclassOf< AActor > InClass)
 
AActor * GetPoolItemLocationRotator (const UObject *WorldContextObject, const TSubclassOf< AActor > InClass, const FVector Location, const FRotator Rotator)
 
virtual void Initialize (FSubsystemCollectionBase &Collection) override
 
void ReturnActorToPool (AActor *Actor)
 

Private 속성

TMap< UClass *, TArray< AActor * > > PoolMap
 

상세한 설명

액터를 재활용하여 런타임에 액터 스폰 비용을 최소화하는 오브젝트 풀링(Object Pooling) 관리 서브시스템입니다.

비활성화된 액터를 풀에 저장했다가 필요 시 재활성화하여 제공함으로써, 동적 액터 생성 및 소멸로 인한 성능 저하를 방지합니다.

UObjectPoolManager.h 파일의 19 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ DEFINE_SUBSYSTEM_GETTER_INLINE()

UObjectPoolManager::DEFINE_SUBSYSTEM_GETTER_INLINE ( UObjectPoolManager  )

◆ Deinitialize()

void UObjectPoolManager::Deinitialize ( )
overridevirtual

UObjectPoolManager.cpp 파일의 20 번째 라인에서 정의되었습니다.

21{
22 for (auto& Elem : PoolMap)
23 {
24 for (AActor* Actor : Elem.Value)
25 {
26 if (IsValid(Actor))
27 {
28 Actor->Destroy();
29 }
30 }
31 }
32 PoolMap.Empty();
33
34 Super::Deinitialize();
35}
TMap< UClass *, TArray< AActor * > > PoolMap

다음을 참조함 : PoolMap.

◆ GetPoolItem()

AActor * UObjectPoolManager::GetPoolItem ( const UObject *  WorldContextObject,
TSubclassOf< AActor >  InClass 
)

UObjectPoolManager.cpp 파일의 37 번째 라인에서 정의되었습니다.

38{
39 return GetPoolItemLocationRotator(WorldContextObject, InClass, FVector::ZeroVector, FRotator::ZeroRotator );
40}
AActor * GetPoolItemLocationRotator(const UObject *WorldContextObject, const TSubclassOf< AActor > InClass, const FVector Location, const FRotator Rotator)

다음을 참조함 : GetPoolItemLocationRotator().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetPoolItemLocationRotator()

AActor * UObjectPoolManager::GetPoolItemLocationRotator ( const UObject *  WorldContextObject,
const TSubclassOf< AActor >  InClass,
const FVector  Location,
const FRotator  Rotator 
)

UObjectPoolManager.cpp 파일의 42 번째 라인에서 정의되었습니다.

43{
44 if (!InClass)
45 {
46 UE_LOG(LogTemp, Error, TEXT("GetPoolItem failed: InClass is null."));
47 return nullptr;
48 }
49
50 TArray<AActor*>* Pool = PoolMap.Find(InClass);
51 if (Pool && Pool->Num() > 0)
52 {
53 AActor* Actor = Pool->Pop();
54 Actor->SetActorLocationAndRotation(Location, Rotator);
55
56 Actor->SetActorHiddenInGame(false);
57 Actor->SetActorEnableCollision(true);
58 Actor->SetActorTickEnabled(true);
59
60 return Actor;
61 }
62
63 if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
64 return World->SpawnActor<AActor>(InClass, Location, Rotator);
65
66 return nullptr;
67}

다음을 참조함 : PoolMap.

다음에 의해서 참조됨 : GetPoolItem().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Initialize()

void UObjectPoolManager::Initialize ( FSubsystemCollectionBase &  Collection)
overridevirtual

UObjectPoolManager.cpp 파일의 13 번째 라인에서 정의되었습니다.

14{
15 Super::Initialize(Collection);
16
17 UE_LOG(LogTemp, Log, TEXT("ObjectPoolManager Initialized."));
18}

◆ ReturnActorToPool()

void UObjectPoolManager::ReturnActorToPool ( AActor *  Actor)

UObjectPoolManager.cpp 파일의 69 번째 라인에서 정의되었습니다.

70{
71 if ( Actor == nullptr )
72 return;
73
74 Actor->SetActorHiddenInGame(true);
75 Actor->SetActorEnableCollision(false);
76 Actor->SetActorTickEnabled(false);
77
78 // 타이머/수명 정리
79 if (UWorld* World = Actor->GetWorld())
80 {
81 World->GetTimerManager().ClearAllTimersForObject(Actor);
82 }
83 Actor->SetLifeSpan(0.f);
84
85 if (UProjectileMovementComponent* Proj = Actor->FindComponentByClass<UProjectileMovementComponent>())
86 {
87 Proj->StopMovementImmediately();
88 Proj->Deactivate();
89 }
90 if (UCharacterMovementComponent* CharMove = Actor->FindComponentByClass<UCharacterMovementComponent>())
91 {
92 CharMove->StopMovementImmediately();
93 CharMove->Velocity = FVector::ZeroVector;
94 }
95 if (UPrimitiveComponent* Prim = Cast<UPrimitiveComponent>(Actor->GetRootComponent()))
96 {
97 Prim->SetPhysicsLinearVelocity(FVector::ZeroVector, true);
98 Prim->SetPhysicsAngularVelocityInDegrees(FVector::ZeroVector, true);
99 Prim->PutRigidBodyToSleep();
100 }
101
102 TSubclassOf<AActor> ActorClass = Actor->GetClass();
103 TArray<AActor*>& Pool = PoolMap.FindOrAdd(ActorClass);
104 Pool.Add(Actor);
105}

다음을 참조함 : PoolMap.

멤버 데이터 문서화

◆ PoolMap

TMap<UClass*, TArray<AActor*> > UObjectPoolManager::PoolMap
private

UObjectPoolManager.h 파일의 39 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : Deinitialize(), GetPoolItemLocationRotator(), ReturnActorToPool().


이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: