본문 바로가기

언리얼 BluePrint 정리

07/24 학습 정리 ( Behavior Tree 정지, 피아식별, 원거리 적 구현 )

Behavior Tree 정지

 

 

AI Controller에서 지원하는 이름부터 뇌인 Brain Component에서 Stop Logic을 사용하여 BT의 작동을 중지 시킨다.

 


 

피아식별 구분

 

현재는 BTS_FindTarget에서 인식한 Actor Array에서 플레이어와 일치 하는 하는가를 검사해서 Target설정을 했었는데

원래 블루프린트에서 피아식별기능은 존재하지 않는다고 한다. 하지만 Tag라는것을 이용하여 비슷하게 만들 수 있다.

 

Tag

 

말 그대로 꼬리표 같이 Tag를 달아 Has Tag로 지정한 Tag를 가지고 있는지를 검사할수 있다.

Gameplay Tags라는게 있는거 같은데 사용법은 아직모르겠다.

 

 

Return 받은 Array를 For Each Loop with Break를 사용하여 원소들을 검사하는데 Player태그를 가진 원소는 Temp에 저장하고 그 즉시 Break되어 Loop를 빠져나와 Blackboard Key인 TargetActor에 그 값을 저장시킨다.

Player가 아닌 원소들은 무시하고 다시 Loop를 돈다.

 

 

태그를 여러개를 달아도 Find, Index변수, Get을 이용하여 특정할수있다.

 


열거형을 이용한 피아식별

 

 

열거형인 E_Team을 생성, Team(Int,비트마스크)을 리턴하는 GetTeam 인터페이스 생성

 

 

비트마스크들을 And연산으로 계산하여 0이 라면 겹치는게 없고 0이 아니라면 겹치는 요소가 있다는걸 알수있다.

 


 

원거리 적 구현

 

근접공격을 하는 적을 만들었으니 원거리 공격을 하는 적을 만들어 본다.

원거리 적은 인식범위에 들어온 적을 겨냥하여 파이어볼을 발사하고 플레이어가 일정범위 안에 들어오면 텔레포트를 사용해 플레이어에게서 도망가게 만들것이다.

 

BB_Enemy_Ranged

 

 

Enemy_Ranged 에서 사용할 BB_Enemy_Ranged 생성, 근거리와 마찬가지로 플레이어를 저장할 TargetActor를 필요로 하기에 다시 만들 필요없이 BB_Enemy를 부모로하여 키를 상속받는다. Teleport로 도망갈 위치인 Destination(Vector)생성

 


BTT_SkillActivate

 

 

스킬을 활성화시키는 BTT_SkillActivate 생성

미리 설정한 인덱스 값의 스킬을 활성화시키며 bSwitching Allowed가 True라면 스킬이 활성화 된 도중에도 다른 스킬로 전환 가능하다.

 


 

BP_Fireball의 이벤트 그래프(왼쪽)와 BP_Teleport의 GetDestination함수(오른쪽)

 

BP_Fireball과 BP_Teleport는 플레이어가 사용할 때를 상정하고 만든거라 AI가 사용했을때는 작동이 안되거나 원점으로 가게 해뒀는데 AI가 사용하니 그에 맞게 수정해준다. (Teleport는 EQS써서 수정해야함)

 


 

Index 0 Skill : Fireball , Index 1 Skill : Teleport로 설정하고 플레이어를 인지하면 그 방향으로 파이어볼을 발사한다

 


 

Is at Location ( 데코레이터 )

 

Blackboard Key값이 지정한 범위내에 있는지 검사하는 데코레이터

 

Acceptable Radius : 범위의 크기

Inverse Condition : 범위의 반전 여부

 

범위를 250으로 하고 Inverse를 하면 

250밖에 있으면 True 안에있으면 False

 

 

 


 

Composite 데코레이터

 

데코레이터를 합쳐주는 데코레이터라고 보면된다.

예를 들어 Is at Location을 1000범위 안이면서 250범위 밖인지 검사하고싶으면 데코레이터 2개를 달아도 되지만 컴포짓을 하고 내부에서 그래프를 조정하면 같은 효과를 적용 시킬수 있다. BT의 긴 조건은 Show Operations 체크 해제시 숨긴다.