게임 개발/Unreal Engine 5

Unreal Engine 5] Is valid? 옵션

UniCoti(유니코티) 2025. 10. 13.

is valid라는 옵션은 당연하게도 직역해서 이게 "유효"한 지 판단하는 노드이다.

대표적으로 복사와 참조 개념에서 사실상 주소가 없는 상태로 변수가 연결되었을 때

유효하지 않다고 볼 수 있다.

 

1. nullptr인 포인터

  • 가장 기본적인 형태.
  • 예: AActor* MyActor = nullptr;
  • 포인터 자체가 어떤 객체도 가리키지 않으므로 IsValid(MyActor)는 false.

2. PendingKill 상태의 UObject

  • UE의 GC(Garbage Collector)가 해당 객체를 삭제 예약한 상태.
  • 이 시점에서는 실제 메모리 상에 객체가 남아있더라도 이미 “죽은 객체”로 취급됨.
  • 예:→ IsValid(MyActor)는 false를 반환함.
  •  
    if (MyActor->IsPendingKill()) { // 이미 제거 예정 }

3. Destroyed된 Actor (월드에서 제거된 경우)

  • Destroy() 호출 후 아직 완전히 GC 되지 않았지만, 더 이상 게임 세계에 존재하지 않음.
  • 대표적인 예:그 후에도 MyActor 변수는 여전히 주소를 들고 있을 수 있지만,
    IsValid(MyActor)는 false를 반환함.
  •  
    MyActor->Destroy();

4. Level Unload / World 전환 시 사라진 객체

  • 월드가 언로드되면 해당 월드에 속했던 모든 Actor와 Component는 더 이상 유효하지 않음.
  • 예: Seamless Travel, Level Streaming, PIE 종료 등.

5. Weak Pointer가 끊어진 경우 (TWeakObjectPtr)

  • Weak Pointer는 GC에 의해 객체가 삭제되면 자동으로 무효화됨.
  • 예:
  •  
    TWeakObjectPtr<AActor> WeakActor = SomeActor; ... if (!WeakActor.IsValid()) { // 이미 삭제된 객체 }

6. Soft Reference 로드 실패 (TSoftObjectPtr, TSoftClassPtr)

  • Asset Reference가 유효하지 않은 경로나 삭제된 리소스를 가리키는 경우.
  • 로드되지 않았거나, 경로가 변경되어 실제 존재하지 않는 경우 IsValid()는 false.

7. Component Detach 후 Owner 파괴된 경우

  • 어떤 Component가 World에 붙어있지 않거나 Owner Actor가 파괴되면, 그 Component도 사실상 무효한 상태.

 

추가적인 경우로 이런것들도 있는데, 하나로 통일해서 말하자면 객체가 연결 불가능하거나

연결 불가능 할 예정인 경우에 속한다. 

 

bp

BluePrint에서 검색으로 간단히 찾을 수 있으며 bool 값을 반환하는 노드와

branch가 혼합되어 true/false로 exec이 나눠지는 노드도 있다. 알아서 판단해서 쓰면 된다.


이상으로 도움이 되었길 바라며,

 

끝.

댓글