본문 바로가기

블루프린팅/9. 인공지능

[09인공지능] AI가 플레이어를 추적하게 하기

폰 감지라는 이름의 컴포넌트는 적에게 시각과 청각을 추가하는데 사용된다. 이 컴포넌트를 사용해 비헤이비어 트리를 확장해서 적이 플레이어에 위협을 가하도록 하겠다.

폰 감지로 적에게 시야를 주기

적에게 플레이어를 탐지할 수 있는 기능을 부여하려면, 폰감지 컴포넌트를 BP_EnemyController에 추가하고 적이 플레이어를 볼 때 플레이어캐릭터 참조를 BB_EnemyBlackboard에 저작해야 한다. 폰감지 컴포넌트를 사용하는 순서는 다음과 같다.

1. BP_EnemyController 블루프린트를 연다.

2. 내 블루프린트 패널에서 변수를 만든다. 이름을 PlayerKeyName으로 지정하고 변수 타입은 name으로 한다. 컴파일후 디폴트값을 Player character로 세팅한다.

3. 컴포넌트 패널에서 추가 버튼을 클릭해서 폰을 검사한다. 폰감지 컴포넌트를 선택한다.

4. 폰감지컴포넌트 디테일패널에서 이벤트카테고리> 폰보기시 이벤트의 녹색버튼을 클릭 이벤트그래프에 추가한다.

5. OnSeePawn이벤트는 적에게 시야를 따라 폰클래스의 인스턴스가 보이면 트리거된다. 표시된 인스턴스가 플레이어인지 확인해야 한다. 플레이어인 경우 블랙보드에 인스턴스 참조를 저장한다. 

6. PwanSensing이벤트의 흰색 출력핀에서  FirstPersonCharacter 노드에 형변환을 추가해서 FirstPersonCharacter에게만 반응하도록 필터링 한후 다음과 같이 설정해서 BlackBoard의 PlayerKeyName을 FirstPersonCharactor로 설정한다.

7 .컴파일후 저장한다. BP_EnemyController 블루프린트에서 적에게 플레이어를 인식시키기 위해 필요한 변경 사항이다. 이제비페이비어 트리에 대해 알아보겠다.

 

비헤이비어 트리 태스크 만들기

태스크, 데코레이터및 서비스와 같은 비헤이비어 트리에서 사용할 새 요소를 만들 수 있다. 이러한 요소는 특수한 타입의 블루프린트다. 블랙보드 키를 지우는 간단한 태스크를 만든다. 절차는 다음과 같다.

1. 콘텐츠 브라우저에서 BT_EnemyBehavior에셋을 더블클릭해서 비헤이비어 트리 에디터를 연다.

2. 툴바의 새 태스크버튼을 클릭한다.

3. 프로젝트에 태스크가 없는 경우 BTTask_BlueprintBase를 부모 클래스로 사용해서 새로운 블루프린트와 함께 블루프린트 에디터가 열린다. 태스크가 있는 경우 표시되는 드롭다운에서 BTTask_BlueprintBase 클래스를 선택해야 한다.

4. 디테일 패널에는 클래스 기본값이 표시되는데 Detail>Description>노드 이름 을 Clear BB Value로 변경한다.

5. Key라는 이름의 변수를 만들고 타입을 블랙보드키선택툴로 변경후 인스턴스 편집기능 속성을 확인한다. 

6. 비헤이비어 트리내에서 태스크가 활성화됐을때 호출되는  Receive Execute 이벤트를 사용한다. 사용 가능한 다른 이벤트를 보려면 내 블루프린트 패널을 사용해서 이벤트를 추가한다. 마우스를 내 블루프린트 패널의 함수 카테고리에 놓고 오버라이드 드롭 다움을 클릭한 다음  Receive Execute를 선택한다.

7. Key변수를 사용해 블랙보드값을 지우고 Finish Execute함수를 사용해서 태스크를 수행한다.

8. Receive Execute 이벤트의 흰색 출력 핀에서 와이어를 끌어 Clear Blackboard Value노드를 추가한다.

9. Clear Blackboard Value의 입력핀에서 Get Key노드를 추가한다.

10. Clear Blackboard Value의 흰색 출력 핀에서 와이어를 끌어 Finish Execute 노드를 추가한다. Finish Execute노드의 Success 파라미터를 체크한다.

11. 블루프린트 에디터를 컴파일, 저장및 닫는다. 콘텐츠 브라우저에서 BTTask BTTask_ClearBBValue로 이름을 변경한다.

새로운 태스크를 사용해서 적이 공격한 후 플레이어 캐릭터 레퍼런스를 삭제해서 플레이어가 도망갈 수 있는 기회를 제공한다.