Manager_Interactor "Accessed None: OwnerController" 크래시
원인
OwnerController는 비복제 + 컴포넌트 BeginPlay에서만 캐싱됨.- 서버→클라 RPC
Client_Update_PointOfInterests가 그 BeginPlay보다 먼저 도착하면 None을 읽어 크래시 → 초기화 순서 레이스(코옵/조인·레벨 시작 시). - 플러그인 버그 아님. 컴포넌트 위치·설정은 정상.
수정 (플러그인 미변경)
프로젝트 PC ARetrievePlayerController의 PostInitializeComponents(BeginPlay/RPC보다 먼저 실행)에서 리플렉션으로 OwnerController를 미리 세팅해 레이스 창 제거.
RetrievePlayerController.h
virtual void PostInitializeComponents() override;
RetrievePlayerController.cpp (익명 namespace 헬퍼 + 오버라이드)
void PrimeInteractorOwnerController(APlayerController* PC)
{
if (!PC) return;
TInlineComponentArray<UActorComponent*> Components(PC);
for (UActorComponent* Comp : Components)
{
if (!Comp || !Comp->GetClass()->GetName().Contains(TEXT("Manager_Interactor"))) continue;
if (FObjectProperty* OwnerProp =
FindFProperty<FObjectProperty>(Comp->GetClass(), TEXT("OwnerController")))
{
OwnerProp->SetObjectPropertyValue_InContainer(Comp, PC);
}
break;
}
}
void ARetrievePlayerController::PostInitializeComponents()
{
Super::PostInitializeComponents();
PrimeInteractorOwnerController(this); // OwnerController 선캐싱
}