트러블 슈팅

멀티 플레이(데디서버) NPC 랜덤 행동 애니메이션 재생 중 Task 종료 되는 문제

Turtle_Jun 2025. 10. 3. 21:44

⚠️ 문제

  • PlayMontage 태스크가 몽타주 애니메이션이 끝나지 않았는데도 Succeeded를 반환하여
  • Behavior Tree의 루트 노드부터 다시 실행되는 문제가 발생함
  • 그 결과, Service 태스크가 불필요하게 반복 호출되고, 애니메이션도 중간에 끊겨 비정상 동작이 나타남

 

  • PlayMontage 태스크 실행 직후 return EBTNodeResult::Succeeded; 로 종료되도록 작성되어 있었음.
  • Behavior Tree의 구조상 태스크가 Succeeded를 반환하면 곧바로 다음 플로우로 넘어가기 때문에
  • 몽타주 애니메이션이 끝나기 전에 루트 노드가 재실행됨.

🚧 조치

 

  1. Task 상태를 InProgress로 유지
    • PlayMontage 태스크 실행 시 바로 Succeeded 반환 대신 EBTNodeResult::InProgress 반환
  2. 콜백 함수(OnFinishedCallback) 등록
    • 몽타주 애니메이션이 끝났을 때 호출되도록 콜백 함수 연결.
    • 콜백 내부에서 FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); 호출 → 정상 종료 처리

➡️ 태스크는 애니메이션이 끝날 때까지 InProgress 상태로 두고, 애니메이션 종료 시에만 Succeeded 반환

💡 결과

  • Behavior Tree가 몽타주 애니메이션이 끝날 때까지 대기하다가, 애니메이션이 완료된 시점에만 Succeeded를 반환하여 태스크가 정상적으로 종료됨
  • 불필요한 Root 재실행 문제와 애니메이션 끊김 현상이 모두 해결됨

즉시 Succeeded 반환 → 루프 재실행 문제 발생 → InProgress + 콜백 종료 방식으로 해결 → 정상 동작 보장