본문 바로가기
[ Unreal5 ]/- 언리얼엔진5 실습

언리얼엔진5 c++ EndPlay(Actor 종료시점 호출함수)

by MRG 2025. 3. 22.
728x90
반응형

 

▣ AActor::EndPlay()란?
EndPlay()는 액터가 월드(World)에서 제거될 때 호출되는 가상 함수(virtual function)입니다.

 

- 언제 호출되나요?
액터가 Destroy() 되었을 때
레벨이 언로드(unload)되거나 리셋될 때
게임이 종료되거나 플레이 세션이 끝날 때
PIE(Play In Editor) 모드에서 Stop을 누를 때

 

 

▣ 함수 구조 정리

부분설명
Super::EndPlay(EndPlayReason) 부모 액터의 정리 로직을 먼저 실행 (필수!)
GetController() 이 캐릭터를 제어하는 컨트롤러 가져오기
Cast<AAIController>() AI 전용 컨트롤러로 캐스팅
AIController->BrainComponent AI의 두뇌 역할을 하는 컴포넌트, 보통 Behavior Tree를 실행
Cast<UBehaviorTreeComponent>() 실제 동작 중인 Behavior Tree 컴포넌트로 변환
IsRunning() 현재 트리가 실행 중인지 확인
StopTree(EBTStopMode::Safe) 실행 중인 트리를 "안전하게" 중지 (현재 태스크 마무리 후 종료)
UE_LOG(...) 디버깅 로그 출력 (에디터 콘솔에서 확인 가능)

▣ 핵심 포인트

항목설명
BehaviorTreeComponent AI의 행동을 관리하는 핵심 시스템. 트리가 계속 실행되면 메모리 누수, 충돌 발생 가능
EndPlay() 타이밍 액터가 제거될 때 반드시 호출되므로, AI 정리에 매우 적절한 위치
EBTStopMode::Safe 트리를 강제로 끊지 않고, 자연스럽게 종료시킴. 안정적인 종료 방식

 

▣ 요약정리
이 코드는 AI 캐릭터가 제거될 때 Behavior Tree가 비정상적으로 계속 실행되는 문제를 방지합니다.
BrainComponent를 직접 접근해 정리하므로, AIController가 완전히 파괴되기 전에 반드시 호출되어야 합니다.
StopTree(EBTStopMode::Safe)는 현재 진행 중인 작업이 종료될 때까지 기다리므로 안정성이 높습니다.

728x90
반응형

댓글