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
반응형
'[ Unreal5 ] > - 언리얼엔진5 실습' 카테고리의 다른 글
언리얼엔진5 c++ Animistance 데이터 ABP에서 바인딩 사용 (0) | 2025.03.27 |
---|---|
언리얼엔진5 c++ Random함수 (0) | 2025.03.27 |
언리얼엔진5 c++ FindFunction (0) | 2025.03.05 |
언리얼엔진5 meta (0) | 2025.03.04 |
언리얼엔진5 c++ virtual, override (0) | 2025.02.08 |
댓글