Behavior Tree의 Running은 단순한 중간 반환값이 아니라 비동기 요청·timer·예약·callback을 가진 행동이 다음 평가까지 살아 있다는 뜻입니다. 새 행동을 선택할 때는 논리적으로 옛 결과를 무효화하는 일과 실제 자원을 회수하는 일을 별도로 추적해야 합니다.
Running 상태의 자원 소유권과 다음 틱까지의 수명
Behavior Tree node는 Success·Failure 외에 Running을 반환할 수 있습니다. 이동 node가 Running일 때 경로 요청·timer·animation·예약·callback이 살아 있습니다. 상위 위험 조건이 도주를 선택했다고 이전 이동이 자동 종료되지 않습니다.
reactive sequence는 앞 조건을 다시 보며 높은 반응성을 얻지만 반복 abort가 늘 수 있습니다. memory sequence는 진행 위치를 기억해 재실행을 줄이지만 조건 변화에 늦을 수 있습니다. 사용하는 실행기의 정확한 재개·abort 계약을 정하고 둘 중 무엇이든 정리 책임을 둡니다.
행동 세대와 Blackboard 쓰기 권한
이동 generation 8에서 도주 9로 전환했다고 가정합니다. request 31의 경로가 뒤늦게 성공해도 generation 8이면 새 목표를 덮지 못해야 합니다. 결과에는 entity ID/generation·action generation·request ID·goal/map/profile version을 붙입니다. blackboard key별 writer와 적용 조건을 명시합니다.
그림을 글로 읽기
- 이동 action 8 · path request31
- 위험 발생 · abort · 도주 action9
- request31 늦은 성공
- 현재 action/request 대조
- 불일치 결과 폐기·자원 정리
- 이동 action 8 · path request31 → 위험 발생 · abort · 도주 action9: 우선 행동 전환
- 이동 action 8 · path request31 → request31 늦은 성공: 계산은 남을 수 있음
- request31 늦은 성공 → 현재 action/request 대조: 세대 확인
- 현재 action/request 대조 → 불일치 결과 폐기·자원 정리: 8≠9
도주 같은 새 행동으로 abort할 때는 path 취소를 요청하고, 옛 action이 잡은 예약과 timer를 해제하며 animation을 전환합니다. 실제 이동 자원을 옛 action이 아직 사용 중이면 Cancelling 내부 상태로 종료를 기다리거나 소유권을 명시적으로 이전해 새 action이 같은 자원을 중복 사용하지 않게 합니다.
action generation을 올려 결과를 논리적으로 무효화하는 것과 worker·callback이 물리적으로 종료되어 참조가 회수되는 것은 별개이므로, 해제된 map pointer를 generation 검사만으로 안전하게 만들 수 없습니다.
추적·도주 전환의 임계값과 hysteresis
위험 점수 0.5 주변에서 매 tick 추적/도주가 바뀌면 path와 timer가 계속 재시작됩니다. 예를 들어 도주 진입 0.7·복귀 0.3처럼 hysteresis, 최소 유지 시간·재진입 cooldown을 사용할 수 있습니다. 숫자는 게임 정책 예시이며 치명적인 사망·기절·즉시 위험 abort보다 우선하지 않습니다.
조건·action generation·start/abort 이유·마지막 진행을 기록해 실제 위험 변화와 늦은 callback 상태 역전을 구분합니다. blackboard 변경도 관련 조건만 깨우는 이벤트 경로를 둘 수 있으나 dependency 누락을 전수 재평가 기준과 비교해야 합니다.
공유 Path 서비스의 최신 의도와 총량 예산
| 경계 | 정책 |
|---|---|
| NPC queue | 최신 goal만 유지·옛 의도 coalesce |
| 전체 queue | 수·bytes·snapshot 보유 상한 |
| worker | 실제 실행 permit·취소 후 종료 확인 |
| 공정성 | round-robin·최소 진행·비용 budget |
| map 변화 | 지역별 병합·재계산 phase 분산 |
| 결과 | 현재 generation·profile/version 확인 |
같은 문 변경이 들어와도 요청을 한꺼번에 실행하지 않고, NPC별 최신 goal만 남겨 옛 의도를 합칩니다. low priority에도 round-robin이나 최소 진행 규칙으로 기회를 주되, 실행 시점에 만료된 goal은 건너뜁니다. 취소된 요청을 장부에서 제거했더라도 실제 계산이 끝나지 않았다면 worker permit과 취소 후 종료 확인을 유지합니다. 실패한 요청은 원인·backoff·다음 재시도 조건을 반환해 무한 재탐색을 막고, map 변화는 지역별 병합과 재계산 phase 분산으로 처리합니다.
행동 반응성과 자원 정리 비용 검증
예상 결과를 먼저 적어 두면 세대 검사와 취소 완료를 혼동하지 않을 수 있습니다. 이동 8의 경로가 도주 9로 전환된 뒤 도착하면 위치·blackboard는 현재 행동 정책을 따라야 하고, worker가 실제로 종료되지 않았다면 permit·map 참조·callback은 아직 회수 대상으로 남아 있어야 합니다.
이동 중 도주·abort 직후 완료·서버 종료·목표 연속 변경·shared service 포화·진동 조건을 시험합니다. 현재 action의 위치/예약이 옛 callback으로 바뀌지 않는지, 최대 대기·폐기 결과·snapshot 수명·회피 반응·틱 비용을 확인합니다. 이 노트는 행동 수명 설계이며 실제 Behavior Tree 엔진 실험 결과는 아닙니다.