ex) ObstacleComponent 라는 컴포넌트가 있고
이 컴포넌트안의 Collider객체를 컴포넌트가 생성될때 매니저에 등록하고 제거될때 빠져야 하는 상황
OnReigster()에서 객체가 생성되어있는지 체크하고 객체를 생성
OnComponentDestroyed() 에서 객체를 해제
* OnRegister()는 Actor::PostEditChangeProperty()에서 호출되기 때문에 자주 호출됨
객체를 생성해야 한다면 객체의 존재여부를 체크해서 한번만 생성되도록 처리
* OnUnregister()의 경우에도 Actor::PreEditChange()에서 호출되기 때문에 자주 호출됨
OnRegister / OnUnregister의 조합으로 사용하는 경우 자주 등록/해제 처리가 발생
* OnComponentCreated()는 액터를 월드에 배치하고 에디터를 재시작하면 호출되지 않아서 사용할수 없음
void UPFObstacleComponent::OnRegister()
{
Super::OnRegister();
// 아직 생성되지 않았다면 생성후 매니저로 등록
if (nullptr == Collider)
{
Collider = new MBoxCollider();
UPathFinderSubsystem* subSystem = GEditor->GetEditorSubsystem<UPathFinderSubsystem>();
subSystem->AddObstacleComponent(this);
}
}
void UPFObstacleComponent::OnComponentDestroyed(bool bDestroyingHierarchy)
{
// 등록된 Collider가 있다면 해제 처리
if (nullptr != Collider)
{
UPathFinderSubsystem* subSystem = GEditor->GetEditorSubsystem<UPathFinderSubsystem>();
subSystem->RemoveObstacleComponent(this);
delete Collider;
Collider = nullptr;
}
Super::OnComponentDestroyed(bDestroyingHierarchy);
}
'Unreal > Tool' 카테고리의 다른 글
[Unreal] 에디터에서 Tick 처리 (0) | 2024.04.10 |
---|---|
[Unreal] 에디트 시점에 컴포넌트 시각화 (0) | 2024.03.20 |
[Unreal] 에디터 유틸리티 위젯을 사용하여 에디터 창 띄우기 (0) | 2023.12.30 |
[Unreal] 메뉴 추가 (0) | 2023.12.27 |