작성
·
133
0
수업에서는 AttackInRange 데코레이터를 CalculateRawConditionValue() 만 구현해서 사용했는데요.
aborts 발동 조건같은걸 따로 지정안해도 자동으로 되는 건가요??
BlackBoard 데코레이터의 경우에는 값이나 결과? 가 바뀌면 aborts가 발동되는 걸로 이해해서 코드를 보니 상당히 복잡하게 aborts 구현이 되어있더라구요....
어설프게 이해한 바로는 블랙보드의 키에 델리게이트 등록해서 값 변경 이벤트를받아 ConditionalFlowAbort() 라는 함수를 호출하고 있습니다.
이 과정에서 CalculateRawConditionValue()가 또 호출되고 활성/비활성으로 나뉘어져 뭔가 복잡하게 수행하는데요.
결국 aborts를 해야하는지 말아야하는지 체크는 ConditionalFlowAbort() 를 호출함으로서 시작되는 것 같아 보이는데....
이걸 안 한 AttackInRange 데코레이터는 aborts 가 어떻게 동작하는지 알고 싶습니다..
답변 1
0
음.. 사실 언리얼의 BT가 실전에서 쓰기에는 좀 애매한 부분이 있습니다.
그래서 BT 모델의 동작을 학습하는 정도가 딱 적당해보입니다.
만일 사용한다고 해도 정교하게 진행하기 보다 트리 형태로 우선권이 주어지는 상태 머신 느낌으로 사용하는게 좋다고 보여집니다. 라일라 샘플을 봐도 BT 자체는 단순하게 구성되어 있고 EQS에서 많은 것이 진행됩니다.
혹시 어떤 기능이 필요하신지 궁금하네요.
네. 언리얼에서 기본제공하는 블랙보드 데코레이터의 관찰자 중단처럼 직접 만든 attackinRange 데코레이터 내에서 aborts 를 구현하는게 필요할것 같았는데. attackInRange는 aborts 따로 구현없이 observer aborts 옵션만 both로 하고 있어서 정말 관찰자 중단이 작동되고 있는건지 잘 모르겠습니다..
데코레이터로 분기를 빠져나오게 하는 조건을 구현하는 방법을 잘 모르겠습니다..
확인 주기나 조건 구현장소 이런걸 어디서 어떻게 하는게 좋은지 알아보려고 수업내용을 다시 보다가 딱히 aborts 관련된 구현이 없이 돌아가게 되있어서 디폴트 동작이 있는건지 궁금했습니다...