문제 1. 손님 NPC 태그 액터로 이동하지 않는 문제.
<구현하고자 했던 목표>
쇼핑 타겟으로 액터 태그를 가진 액터를 목표로 이동. 어느정도 머물렀다가 다음 타겟으로 이동.
<문제 분석>
일단, 쇼핑 타겟 선택까지는 잘 작동함. 로그도 찍힘.
LogFTNPC: NPC AI: Picked shopping target BP_ShoppingTestActor_C_1 at X=1060.000 Y=-280.000 Z=69.500
즉, PickRandomShoppingTarget() 호출 문제는 아님.
컨트롤러 컴포넌트 상태 확인.
PathFollowingComponent = inactive
NPCStateTreeAIComponent = inactive
흠... 문제가 있군요.
GPT에게 물어보니 State Tree가 타겟 선택 Task까지 실행한 후 끝났거나 Move To Task가 실행되지 않고 있다고 힘.
=> State Tree의 Task에 문제가 있다!

Shopping 상태 안에 고작 이거 하나 넣어놨는데... 음.
아무래도 Shopping 상태가 끝났을 때 다시 Shopping이 실행되지 않는 듯 하다.
랜덤 위치 선택 → 이동 → 대기 → 랜덤 위치 선택 → 이동 → 대기
이런식으로 구현하려 했다.
<해결 과정>
Root
Shopping
Task 1: PickRandomShoppingTarget
Task 2: Move To
Target Location = AIController.ShoppingTargetLocation
Acceptable Radius = 50~100
Task 3: Wait
Duration = 1~2
Transition:
On State Completed → Shopping
이렇게 구현해보았다.
Task 1: PickRandomShoppingTarget은 언리얼 기본 제공 Task가 아니라 직접 만든다.
StateTree Task 생성


이렇게 만들고
Shopping의 Task에 추가해보았다.

쇼핑 위치 선택
-> 이동
-> 대기
-> 쇼핑 위치 선택
-> 이동
-> 대기
-> ...
잘 작동되기를 기원하며 실행...!
했는데 또 안움직이네 이거;;
이번엔 STT쪽 문제 같아서 Print string 노드를 추가해서 어디서 안되고 있는지 확인해보았다.
(1) 성공했을 경우의 뒤에 Print String 추가.

출력이 안뜸. 즉, 성공하지 않았음.
디버거를 보면...
Current State:
[Root]
[Shopping]
Tasks:
[STT Pick Random Shopping Target]
[Move To]
[Delay Task]
이렇게 나오는데 이 말은 즉슨, Shopping 상태에는 들어갔지만, STT 내부의 Blueprint 이벤트가 실행되지 않았거나 Print가 화면에 안 찍히는 상태. Print는 잘 찍힌다고 가정하고 이벤트가 실행되지 않았을 가능성 존재.
(2) 이벤트가 실행은 되고있는지 확인하기 위해 이벤트노드 바로 뒤에 Print String 추가.

Print가 잘 되는 모습. 그렇다면, 이벤트는 실행되고 있다는 뜻인데..
ShoppingTargetLocation 값은 설정됐지만 Move To가 그 위치로 이동하지 못하고 바로 실패/종료됨
(3) Get Actor Location 뒤에 Print String을 추가해 실제 좌표가 나오는지 확인.
=> 나오지 않음.
그럼 원인은 Get Actor Location까지 흐름이 도달하지 못한다는 뜻!
(4) Get All Actors Of Class 뒤에 Print String을 추가해 쇼핑 타겟으로 액터 태그를 가진 액터를 찾고는 있는지 확인

잘 나옴.
쇼핑 타겟은 정상적으로 찾고 있음. 허허...
(5) Branch True 이후 흐름을 확인하기 위해 Branch의 False에 Print String 추가. 그리고 뒤쪽에 있는 Cast Fail 에도 Print String 추가.

에라이.
원인은 Cast 실패였다.
즉, 지금 Get AIController가 반환한 값이 BP_FTNPCController가 아니라는 뜻.
대부분 Get AIController의 Controlled Actor 입력이 비어 있거나 잘못 들어간 경우 이다.

StateTree Task 블루프린트에서 Cast 대상이 잘못된 듯 하다...
노드를 찾는건 좀 귀찮으니 C++코드로 바꿔버린다.


여전히 움직이지 않는다. 대신 로그가 계속 뜨고있다.
FT Pick Random Shopping Target에서 Move To까지 못 가고 상태가 다시 들어가는 상태같다.
PickRandomShoppingTarget()가 계속 반복 호출되고있다.
if (NPCAIController->bHasShoppingTarget)
{
return EStateTreeRunStatus::Running;
}
return NPCAIController->PickRandomShoppingTarget()
? EStateTreeRunStatus::Running
: EStateTreeRunStatus::Failed;
방어코드를 추가해준다.
한 번 타겟을 고르면 bHasShoppingTarget == true가 되니까 같은 상태에 들어가더라도 계속 새 타겟을 찾지 않을거다.

이제 로그가 쭈르륵 뜨지 않는다.
... 이 문제는 내일 다시 해결해봐야겠다.
'내일배움캠프' 카테고리의 다른 글
| 내일배움캠프 언리얼트랙 44일차 - 손님NPC 신고게이지 (0) | 2026.06.24 |
|---|---|
| 내일배움캠프 언리얼트랙 43일차 - 손님NPC AI Controller, State Tree(2) (0) | 2026.06.23 |
| 내일배움캠프 언리얼트랙 41일차 - 보안요원 State Tree (0) | 2026.06.19 |
| 내일배움캠프 언리얼트랙 40일차 - 보안요원 AI Controller (0) | 2026.06.18 |
| 내일배움캠프 언리얼트랙 38일차 - 심화반 2강 (0) | 2026.06.16 |