몬스터를 구현하기 위한 내용들을 정리한다

전에는 Behavior Tree를 사용했으나 요즘엔 State Tree가 대세라고?!

그래서 본 글에선 ST를 활용해 구현해보았다

 

첫 번째, 스테이트 트리(ST) 생성

1. 컨텐츠 브라우저에 마우스 우클릭, 호출된 컨텍스트 메뉴에서 [ 게임 플레이 > 스테이트 트리 ]를 선택한다

 

2. 호출된 창에서 [ 스테이트 트리 AI 컴포넌트 ]를 선택한다

- 위와 같이 안 나올 경우, GameplayStateTree 플러그인이 체크 상태인지 확인해야 한다

 

이후 디테일한 부분은 다른 것들 준비 후에 진행

 

두 번째, 몬스터 AI BP 생성

우선 몬스터가 세계를 인지할 수 있도록 하기 위해 아래 과정을 진행한다

1. AI 컨트롤러 타입으로 BP 생성 후 열기

 

2. 좌측 컴포넌트 리스트에서 [ AI 인지 컴포넌트 ] 추가 후 선택

 

3. 우측 디테일 항목의 감지 환경설정 배열 추가

4. 감지 환경설정 설정

- 여기서 몬스터가 어떤 감각들을 사용할 건지 설정할 수 있다

- 시각 / 청각 / 피격 등 여러 감각들이 있는데 우선 시각만 다룬다

- 귀속 감지에 중립, 아군 탐지도 설정한다

 

5. 가장 아래에 주도적인 감각을 설정한다

- 감지 환경설정에서 추가한 여러 개의 감각 중 어떤 것을 주로 사용할 것인지 설정하는 것

- 지금은 시야만 추가했으므로 AISense_Sight로 설정

 

다음은 몬스터가 규칙에 따라 행동할 수 있도록 하기 위해 아래 과정을 진행한다

1. 좌측 컴포넌트 리스트에서 [ 스테이트 트리 AI 컴포넌트 ] 추가 후 선택

 

2. 우측 디테일 항목의 [ AI > 스테이트 트리 ]에 첫 번째 단계에서 생성한 ST를 설정한다

 

마지막으로 몬스터가 유저를 인지할 수 있도록 한다

1. 캐릭터 BP의 컴포넌트 리스트에 [ AI 인지 자극 소스 컴포넌트 ]를 추가한다

※ 이걸 해주면 몬스터가 캐릭터를 인지하게 된다

 

추가로 몬스터가 인지할 때마다 타겟을 설정토록 해야 하는데

이 부분은 다른 곳에서 선행 작업이 필요하므로 이후에 다룬다

 

세 번째, 몬스터 BP 생성

보통은 여러 종의 몬스터가 동일 데이터나 기능을 사용하는 경우가 많으므로

부모 몬스터 BP와 자식 몬스터 BP를 생성한다

 

부모 몬스터 BP는 캐릭터 타입으로 생성

- 여기에는 모든 몬스터가 공용으로 사용할 데이터나 기능들을 구현한다

 

자식 몬스터 BP도 캐릭터 타입으로 생성

- 그 후 클래스 세팅에서 부모 클래스를 부모 몬스터 BP로 설정한다

 

- 여기에는 각 몬스터 전용 데이터나 기능들을 구현한다

- 외형이 다르니 모션도 다를 것이므로 애님 클래스도 각 자식 몬스터 BP별로 설정한다

 

마지막으로 몬스터에게 인지 능력을 적용한다

- AI 자동 빙의는 Placed in World or Spawned로 설정

- AI 컨트롤러 클래스에 두 번째 단계에서 생성한 몬스터 AI BP 설정

※ 위 항목은 모든 몬스터가 동일한 인지 능력을 가진다면 부모 몬스터 BP에

    각 몬스터마다 다르다면 해당 자식 몬스터 BP에 설정한다

    (자식 몬스터 BP에 설정하면 자식 몬스터 AI가 오버라이드 된다)

 

네 번째, 몬스터 ABP 생성

몬스터를 움직이게 하기 위한 ABP가 필요하다

이미 세팅되어 있다면 패스

세팅되어 있지 않다면 이벤트 그래프와 애님 그래프를 기존 캐릭터와 유사하게 작성해주면 된다

※ 몬스터는 캐릭터에 비해 행동이 단순하므로 100% 동일하게 작성하지 않아도 된다

 

요건 캐릭터 세팅할 때 해봤을 테니 따로 설명하지 않는다

(이것까지 작성하긴 귀찮..)

 

다섯 번째, 부모 몬스터 BP 구현

AI에 따른 몬스터 행동은 크게 세 가지로 구분한다

① 대상을 인지한다

② 대상을 쫓아간다

③ 대상을 공격한다

 

위 행동들을 구현하기 전, 아래 변수들을 추가한다

 

각 행동별 Custom Event 생성 후 아래와 같이 그래프를 작성한다

 

- AttackTarget은 각 몬스터별 애니메이션이 달라 자식 몬스터 BP에 아래와 같이 작성했다

※ 이것도 부모 몬스터 BP에 구현하라면 할 수 있을 것 같지만 꽤 복잡해지기에 간단한 방법으로 정리했다

 

여섯 번째, ST 조건 및 작업 구현

ST 조건과 작업도 BP로 생성하는데 타입은 각각 아래와 같다

 

그렇게 생성된 ST 조건과 작업은 아래와 같다

 

이제 생성된 각 항목들의 그래프를 작성할 차례

그 전에 공통적으로 사용되는 변수를 추가한다

① AI 실행 주체를 담기 위한 변수

- 반드시 카테고리를 [ Context ]로 설정해야 한다

- 설정하지 않으면 ST에서 변수가  바인딩되지 않아 인식을 못한다

 

② 명확한 결과값 설정을 위한 변수

- 반드시 [ 인스턴스 편집가능 ]을 체크(true) 상태로 설정해야 한다

(이미지18)

 

1. STC_HasTarget

(이미지19)

- 조건 확인 : 대상이 있는지 확인한다

※ Receive Test Condition은 좌측 [ 함수 > 오버라이드 ]를 통해 추가할 수 있다

 

2. STC_TargetInAttackRange

- 조건 확인 : 대상이 공격 범위 내 있는지 확인한다

 

3. STT_MoveTarget

- 작업 실행 : 대상에게 이동한다

※ Enter State는 좌측 [ 함수 > 오버라이드 ]를 통해 추가할 수 있다

 

4. STT_AttackTarget

- 작업 실행 : 대상을 공격한다

 

일곱 번째, ST 구현

1. 좌측 에셋 디테일의 [ 일반 > 스키마 ]에서 AI 컨트롤러 클래스와 컨텍스트 액터 클래스를 설정한다

- AI 컨트롤러 클래스 : 몬스터 AI BP

- 컨텍스트 액터 클래스 : 부모 몬스터 BP

 

2. 상태를 구성한다

상태는 Idle / Chase / Attack 총 세 가지로 구분

※ Patrol / Search / Investigate / Alert / Doubt / Return / Retreat / Dead 등 여러 가지가 있지만 일단은 세 가지만 다룬다

 

3. 각 상태별 디테일 설정한다

Idle 상태

- 기본 상태라 다른 상태로 전환시키기만 하면 되므로 트랜지션만 추가해준다

 > Trigger는 [ On Tick ] : 수시로 확인해야 함

 > 트랜지션 대상은 [ Chase ]

 > 조건은 [ STC Has Target ] : 조건 내 Expected Value는 대상이 있는 것이 조건이므로 체크(true) 설정한다

 

Chase 상태

- 본 상태가 되면 대상에게 이동해야 하므로 태스크 추가가 필요하다

 > 추가 태스크는 [ STT_MoveTarget ]

 

- 그리고 다른 상태로 전환시키기 위해 트랜지션을 추가한다

 > 첫 번째 트랜지션

 >> Trigger는 [ On Tick ] : 수시로 확인해야 함

 >> 트랜지션 대상은 [ Idle ]

 >> 조건은 [ STC Has Target ] : 조건 내 Expected Value는 대상이 없는 것이 조건이므로 체크 해제(false) 설정한다

 

 > 두 번째 트랜지션

 >> Trigger는 [ On Tick ] : 수시로 확인해야 함

 >> 트랜지션 대상은 [ Attack ]

 >> 조건1은 [ STC Has Target ] : 조건 내 Expected Value는 대상이 있는 것이 조건이므로 체크(true) 설정한다

 >> 조건2는 [ STC TargetInAttackRange ] : Expected Value는 공격 범위 내 있는 것이 조건이므로 체크(true) 설정한다

 

Attack 상태

- 본 상태가 되면 대상을 공격해야 하므로 태스크 추가가 필요하다

 > 추가 태스크는 [ STT AttackTarget ]

 

- 그리고 다른 상태로 전환시키기 위해 트랜지션을 추가한다

 > Trigger는 [ On State Complete ]

※ 본 스테이트가 완료되는 것이 조건이며 이는 STT_AttackTarget의 Finish Task가 실행되면 완료 판정한다

 > 트랜지션 대상은 [ Root ]

 > 조건은 [ 없음 ] : 완료 판정되면 Root로 돌아가 조건에 따른 상태로 전환되는 형태라 조건 불필요

+ Recent posts