초보 코린이의 성장 일지

UE4 비헤이비어 트리 (Behavior Tree) AI 감지 및 탐색 (Patrol) 본문

언리얼

UE4 비헤이비어 트리 (Behavior Tree) AI 감지 및 탐색 (Patrol)

코오린이 2023. 2. 21. 13:21

일정 범위에 들어왔을떄 감지하는 AI 상태를 더 욱 정밀하게 만들어 보도록 하겠다.

1. AI 상태 Enum을 나타내는 열겨형을 하나 생성해준다.

Wait = 대기 모드

Approach = 추격 상황

Action = 액션 중인 상황, 공격 등등

Patrol = 순찰 상황

Hitted = 맞은 상황

Avoid = 회피하는 상황

 

1. 블랙보드로 들어가서 새 키를 눌러 Behavior를 Enum으로 생성해준다.

2. Enum도 Key Type 확정 시켜주지 않으면 사용 할 수 없다.

 

변수유형 확인
변수유형 확인

1. 사용할 변수 및 함수와 Tick AI 입력 파라미터 2개 추가

Tick AI 앞 부분
Tick AI 뒷 부분

1. Target Key로 부터 만들어 놓은 블랙보드를 가져오기 위해 형변환을 통해서 Target에 저장해준다.

2. 타겟이 있는지 확인해주고, 플레이어를 못찾았다면 Enemy를 Enum을 통해 Wait 상태로 만들어준다.

3. 타겟이 감지되었다면, 둘의 거리를 비교해서 일정 거리에 들어오면 특정 동작을 수행하도록 설정

4. 거리 범위가 false 라면 추격하고, ture라면 Action 동작을 수행.

 

BTService_Melee 이벤트그래프

1. 사용해야 하므로 형변환을 통해서 확인

2. Pawn 가져다가 Enemy 확인을 위해 형변환

3. 사용하기 위해 만들어준 함수에 연결.

 

1. Selector로 둔 이유는 어떤 상태든 그 상태가 완료되면, 다음으로 못넘어가게 만들어서 끝내려고 만들어 놓음

2. 우선 Wait로 대기모드를 만들어준다. 그리고 특정 상태가 아니라면 실행하지 않도록 데코레이터를 추가해준다.

3. 감지모드로 전환되면 감지 대상을 따라가도록 설계 후 범위내에 없다면 멈추도록 만들어준다.

 

1. 알고 넘어가면 좋을 설명 데코레이터 설명.

On Value Change = 값이 바뀌었을때, 실시간으로 상태를 빠르게 바꿔야 할때

On Result Change = 수행하면서 성공 or 실패를 리턴해줄때, 둘의 결과가 바꼈을때 사용

Self = 조건이 맞지 않다면 자기자신을 중단시키기

Lower Priority = 트리를 만들게 되면 왼쪽부터 순번이 매겨진다. 자신보다 낮은 순번은 전부 취소한다.

Both = 둘다 취소를 나타낸다. 자신이랑 위아래 어떤 상황 둘다 포함.

 

사용할 변수 추가 및 변수 유형

Abort = 중단됐다면.

Execute = 이 노드에 들어왔다면.

BTTask_Speed 이벤트그래프

1. 무빙 컴포넌트를 가져오기 위해 by Calss 선언 후 Null인지 체크

2. Null이라면 종료시킨다.

3. Null이 아니라면, 만든 Speed Type를 가져다가 Set Speed에 넣어준다. 테스크는 결과 리턴이 무조건 있어야만 넘어갈 수 있다.

4. 성공이 있었다면 종료시켜주면 된다.

 

1. Enemy가 움직일때 수행하게될 상태 걷기, 뛰기, 빠르게 뛰기.

 

1. 만든 SpeedType를 속도에 따라 천천히 뛰도록 만들어줘야 하므로, 배열로 Speed를 받아서 배열에 적정 속도를 정해준다.

함수 SetSpeed

1. Speed를 할당시켜줄 함수를 생성해준다.

2. 형변환을 통해 어떤 캐릭터가 Owner인지 확인

3. 입력값 Type를 Int형으로 캐스팅해서 배열에 연결.

3. Movement를 통해 Max Walk Speed를 불러서 만들어준 Speeds 배열을 세팅해서 넣어준다.

1. 다시 Melee로 가서 열거형 Patrol로 변경해주고 시작해보겠다.

2. 이유는 이제 혼자 랜덤으로 돌아다니면서 범위에 객체가 걸렸을때만 쫒아오도록 만들것이기 때문.

 

사용할 변수

- Execute AI

1. NavigableRadius 반경 내에서 내비게이션 Mesh가 갈수 있는 구역을 랜덤하게 지정해주는 역할을 한다.

2. ActorLocation 중심으로 돌아다니도록 연결

3. 결과가 나와서 만약 못가는 지역이 나온다면 false므로 그냥 끝내면된다.

4. 나온 결과를 Location에 우선 저장해준다.

5. 이제 Sphere에 연결해주면, Enemy가 돌아다니면서 바라보는 지점이 어디고 범위를 어떻게 보고있는지 스피어 모양을 통하여 알 수 있다.

 

- Tick AI

1. 움직여야 하고 어디로 이동해야 하는지가 필요하기 때문에 저장해 놓은 Location으로 보내준다.

2. Radius안에 들어오면 감지하도록 범위 또한 설정, Use Pathfinding 체크 안하면 내비게이션 사용 안하게 된다.

3. 이제 스위치를 돌려서 갈수 있어도 끝내주고, 못가게 되어도 끝낸다.

 

1. 처음에는 Wait 상태로 대기했다가 성공으로 끝나고 다음으로 넘어가면 순차적으로 Speed를 세팅해주고 넘어가도록 만들어준다. 그러면 천천히 걸어가면서 뛸 것이다.

2. 경로에 따라가게 된다면 성공이고 따라가지만 만약 실패라면 그 자리에서 대기하도록 만들어준다.

3. 위에 생성한 Patrol을 Selector에 넣어준다. 못가는 지역이면 false 나오고 selector이므로,  오른쪽 Wait로 넘어가고 만약 성공하면 그냥 끝이난다.

4. 결국 리턴해서 위로 올라가고 이제 마지막 오른쪽으로 넘어가서 Speed를 받게 될 것이다.

 

 

https://www.youtube.com/watch?v=yQU-TWwzJ0A 

- 잘 돌아다닌다

Comments