[unrealengine4]

2023-07-11 언리얼(데코레이터, 적Ai)

롤링페이퍼 2023. 7. 12. 07:36
데코레이터

 

데코레이터 : 비헤이비어 트리에 분기를 나누기 위한 용도로 사용이 된다.

추가 방법은 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 트리로 지정해 준다.

BP_Enemy의 디테일


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을 만든다.

BTD_IsArmed 데코레이터의 내부 구조

CompareTo(Boolean) 변수를 추가하고 인스턴스 편집 가능을 킨다.

오버라이드 함수 Perform Condition Check AI 이벤트를 추가하고 Enemy의 isArmed상태에 따라 CompareTo의 값이 And를 통해 결여를 return(반환)하도록 한다.

이후 BTT_Arm에 BTD_IsArmed를 데코레이터로 추가해 준다.

캐릭터가 무기를 꺼내지 않는 상태는 변수가 아무것도 없어 False이니, isArmed는 변수가 False일시 무기를 꺼내 장착할 수 있도록 하였다.


Enemy가 Player에게 바라보도록 설정

 

ToBeContinued