2023-07-11 언리얼(데코레이터, 적Ai)
데코레이터
데코레이터 : 비헤이비어 트리에 분기를 나누기 위한 용도로 사용이 된다.
추가 방법은 2가지 있다.
1. 해당 태스크 우클릭 후 데코레이터 선택을 통해 추가
2. 새 데코레이터로 사용자의 새로운 데코레이터를 추가해 적용.(보통 여기서 자신이 원하는 데코레이터를 만들어 적용할 수 있다.)
근접 무기를 들고있는 적 AI를 만들어보기
BT_Enemy_Melee 추가
BB_Enemy_Melee(블랙보드) 추가
BB_Enemy_Melee(블랙보드)에 플레이어의 정보를 담을 수 있는 Target(Object)라는 새 키를 추가한다.
Target 키의 디테일에서 KeyType 세부정보 Base Class를 Character로 지정해 준다.
이후 내가 적용하고 싶은 BP_Enemy의 디테일에 Behavior Tree를 BT_Enemy_Melee 트리로 지정해 준다.
Blackboard Based Condition(데코레이터)
본격적으로 BT_Enemy_Melee을 활용해 보자.
- Blackboard : 블랙보드의 Target을 Key로 설정하여 Is Set(Target에 값이 Set 되어있을 때) 일 때만 성공한다.
* Target이 Set 되어있다면 Sequence 쪽으로, 아니라면 Wait 쪽으로 분기가 갈릴 것이다.
- wait 태스크는 0.5초로 설정했으며 selector 순서 조정으로 가장마지막으로 작동되게 하였다.
BTD_IsArmed
Enemy가 무기(weaponA)를 호출하여 무기를 장착할 수 있도록 해보자.
새 서비스를 추가해 BTD_IsArmed을 만든다.
CompareTo(Boolean) 변수를 추가하고 인스턴스 편집 가능을 킨다.
오버라이드 함수 Perform Condition Check AI 이벤트를 추가하고 Enemy의 isArmed상태에 따라 CompareTo의 값이 And를 통해 결여를 return(반환)하도록 한다.
이후 BTT_Arm에 BTD_IsArmed를 데코레이터로 추가해 준다.
캐릭터가 무기를 꺼내지 않는 상태는 변수가 아무것도 없어 False이니, isArmed는 변수가 False일시 무기를 꺼내 장착할 수 있도록 하였다.
Enemy가 Player에게 바라보도록 설정
ToBeContinued