강의 따라한 로직 : AI의 시야에 플레이어가 있으면 계속 쫒아오고, 시야에서 사라지면 마지막으로 본 위치까지 이동(이걸 원하신 것 같음)
근데 실제로 실행해보면 시야에서 사라져도 계속 쫒아옴(AI 시야에서 나가기 위해 큐브를 계속 빙글빙글 돌았음)
따옴표('(아포스트로피))를 눌러서 AI 디버깅을 활성화하고, BehaviorTree를 보면서 Blackboard의 Key값이 잘 변경되는지 봤음 + 로그도 찍어봄
정리해보면 현재 CanSeePlayer Key 값이 바뀌어도, 캐릭터를 쫒아오는 왼쪽 Behavior Tree 로직만 실행함
MoveTo Task의 Key가 Actor일 때 어떻게 계속 위치를 업데이트해서 쫒아오는지는 모르겠지만, TrackMovingGoal이 켜져있으면, 캐릭터를 따라잡았을 때까지 계속 쫒아오고, 따라잡았을 때 멈춤
➕ Decorator 조건부 검사(CanSeePlayer is Is Set)는 해당 서브 트리로 이동할 때만 하고, 해당 서브트리를 진행 중에 조건이 변경되더라도 실행이 중단되거나 그러진 않음
=> 캐릭터를 AI의 시야에서 벗어나게 하기위해 계속 도망다님 → MoveTo Task가 끝나지 않음 → Decorator 조건부 검사를 못함 → 다른 서브 트리 로직을 실행할 수 없음 → 계속 쫓아옴
Decorater의 Details → Flow Controll → Observer aborts를 Self로 변경 : Decorater 조건의 Key값(CanSeePlayer)이 변경되면 트리 실행을 중단시킴 = 조건부 검사를 할 수 있음
참조 사이트
0. AI Debugging
1. Observer Aborts
2. AI Chasing - Observer Aborts
3. MoveTo Task의 문제점에 대해 설명
4. Behavior Tree Flow