1. Boss에게 데미지 적용 성공
ㄴ 인터페이스에 구현한 Take_Damage 함수 실행
0415
비헤이비어 트리
퍼셉션 : 얼마나 데이터들을 받을 것 이냐
ㄴ 감각 : 시각, 청각
AI가 판단하는 단위로 올리는 것 : Black Board
블랙 보드를 보고 판단하는 것 : Task , Decorator
행동 -> 실제로 AI가 행동 실행
해당 테스크를 진행할 수 없을 때는 데코레이터가 판단하고 지나간다.
데코레이터 : Task에 조건을 건다. 내 조건이 어디에 맞는다면 모든 Task를 무시하고, 해당 액션으로 이동한다. 판단 기준이 됨
서비스 : Tick으로 검사. 받냐 안받냐를 틱으로 검사한다. (체력 ,-> 서비스안에 체력 변수를 넣ㅇ두면 체력 변수를 체크한다. 해당 조건을 검사하고 태스클르 실행한다. )
Branch : Task와 Decorator가 연결되어 있는 구조
AI Perception
ㄴ 주기적으로 업데이트가 필요한다.
ㄴ BT 직접적으로 하라는 명령은 X
ㄴ 해당 데이터가 BB에 업데이트 하라는 서비스를 진행
ㄴ Decorator로 행동을 판단한다.
ㄴ BB에 판단할 수 있는 내용을 옮긴다.
ㄴ Task로 행동한다.
ㄴ 조건
BB를 보고 판단하고 행동해라.
데이터를 계속해서 갱신해주어야 한다.
주기적으로 데이터를 업데이트 해준다.
AI Perception
ㄴ Sense -> DetectNeutrals? ( 중립 탐지 )
Character -> Pawn : Use Controller Rotation Yaw
ㄴ AI에서 제대로 회전이 가능해짐.
Observer 조건이 False가 되었을 때 나만 멈춘다.
Low Priority :
Self : 자기 자신만 멈춘다.
Branch 안에서 Self 에서 False가 켜지는 순간 자기 자신만 멈추겠다.
Self : 데코레이터에서 Self 를 지정했을 때, False면 자기를 멈춘다.
True인 경우에는 실행시키지만, 중간에 멈추는 권한은 없다.
False -> 자기 자신을 멈추고,
Low Priority : 조건을 만족하면 실행중인 경우, True가 되는 순간 멈춰버리고 우선순위가 높은 Task를 실행한다.
자기 자신을 멈출 것인가, 자기보다 낮은 우선순위의 Task를 멈출 것인가.
나 자신 X 하위만 멈추겠다. (우선순위가 낮은 아이들 )
Both : Self + Low Priority
Self
데코레이터의 조건이 바뀌는 순간 다시 재평가한다. False가 되는 순간, 무엇을 멈춰야 할지 검사한다. 그것이 바로 Self !
자기 자신인 경우에만 멈춘다. 캐릭터를 쫓아가는 것이 적이었는데, Self가 되면 자기 자신을 멈추게 된다.
시야 밖으로 벗어나자 마자 바로 멈추고 Patrol 을 실행한다.
True인 경우 해당 노드를 실행하는데 데코레이터가 false가 되는 순간, 자기 자신의 노드가 실행되고 있다면 해당 노드를 멈춘다.
데코레이터와 서비스의 차이점
Execute Task 를 통해서
데코레이터 -> 단발성 .
서비스 - > BB의 데이터를 갱신하는 용도로 쓰임 . 매 Tick마다 호출됨 ( 조건 : 해당 Branch의 노드가 실행될 때 )
Task : 단발성 액션인지 다발성 액션인지를 봄.
시퀀스 : 전부 다 성공해야 True를 상위에 반환. 우선순위에 의미가 없음. 순차적으로 실행.
셀렉트 : 하나씩 실행. 성공을 할 때까지 계속 실행. 상위가 셀렉트인 경우에만 하위에 있는 데코레이터 오저버 옵션이 4가지가 다 뜬다.
컴포짓 :
심플 페럴러: 메인이 실패냐, 성공이냐에 좌우 됨. 메인 노드에 의해서만 성공 실패가 좌우됨.
ㄴ 맨 좌측에 있는 노드에 의해서 성공과 실패가 좌우됨.
'C++ > C++ 관련 정보 메모글' 카테고리의 다른 글
0422 (0) | 2025.04.22 |
---|---|
0418 (0) | 2025.04.19 |
0413 (2) | 2025.04.14 |
0408 - 0411 (0) | 2025.04.11 |
0407 (0) | 2025.04.08 |