본 포스팅은 Ryan Laley의 유튜브 강좌 Shooter AI 시리즈를 간단하게 요약, 정리한 내용입니다.
https://youtube.com/playlist?list=PL4G2bSPE_8ums1OIn0tdj1xbpw_8W-GIP
Shooter AI
www.youtube.com
1편. AI가 플레이어를 보면서 총 쏘게 만들기

1. 언리얼 삼인칭 프로젝트를 만듭니다.

2. 그 전에 에픽게임즈-마켓플레이스에서 '애니메이션 스타터 팩'과 'FPS Weapon Bundle'을 다운받아 프로젝트에 추가합시다. 이것은 캐릭터가 움직일 애니메이션과 갖고 다닐 무기입니다.


3. ThirdPersonCharacter를 상속 받아 Enemy를 만든 뒤, 맵에 배치합니다. ThirdPersonCharacter는 플레이어가 될 것이며, Enemy는 AI가 될 것입니다.

4. ThirdPersonCharacter가 FPS게임처럼 움직일 수 있도록 FPS전용 애니메이션을 적용시킬 것입니다. Mesh를 눌러 디테일-애니메이션의 Anim Class를 다운받아 놓은 UE4ASP_HeroTPP_Anim으로 변경합니다.
이렇게 해도 ThirdPersonCharacter의 Skeletal Mesh인 SK_Mannequin은 애니메이션을 인식하지 못하기에 적용이 안됩니다. 그래서 다음 스텝이 필요합니다.


5. SK_Mannequin을 우클릭하여 스켈레톤-스켈레톤 할당을 클릭하여 스켈레톤 선택창에서 우리가 사용하려는 Animation 파일(UE4_Mannequin_Skeleton을 선택합니다.
이제 AI 시스템을 만들어봅시다.


6. AIController를 베이스로 한 블루프린트를 만들어 나만의 새로운 ai controller를 만들기 시작합니다.

7. Enemy 블루프린트로 들어가, '클래스 디폴트' 설정의 AI Controller Class를 자신이 만든 Enemy_AI로 바꿔줍니다.
이제 Enemy는 내가 만든 Enemy_AI 컨트롤러대로 움직일 것입니다.


8. 인공 지능-비헤이비어 트리 블루프린트를 만듭니다.
비헤이비어 트리는 AI가 어떻게 행동할지 정하는 시스템입니다. 자신이 만든 컨트롤러와 비헤이비어 트리를 이용해 AI의 움직임을 설정해줄 것입니다.


9. 비헤이비어 트리를 만들었으면, 블랙보드도 만듭니다.
블랙보드는 비헤이비어 트리가 의존하는 데이터 상자입니다. AI는 비헤이비어 트리가 지시하는 대로 따르면서 블랙보드 데이터를 보고 행동을 바꿔나갑니다.

10. 내가 만든 비헤이비어 트리를 열어, 디테일의 블랙보드 에셋 설정이 내가 만든 블랙보드(Enemy_BB)로 되어있는지 확인합니다.


11. 내가 만든 AI컨트롤러로 들어가서 BeginPlay 이벤트에 Run Behavior Tree-내가 만든 비헤이비어 트리(Enemy_BT)를 선택해 줍니다.
*BeginPlay는 처음 시작할 때 동작합니다. 고로 이 AI컨트롤러는 게임 시작할 때 Enemy_BT 비헤이비어 트리를 실행하게 됩니다.
*이렇게 하여 AI컨트롤러, 비헤이비어 트리, 블랙보드를 만들었습니다. 이 세 가지는 다음과 같이 동작합니다.
예시)
AI의 블루프린트에서 AI컨트롤러를 세팅해줌->
(AI컨트롤러)-비헤이비어 트리에 따라 행동해라->
(비헤이비어 트리 : 앞으로 움직여라)-앞으로 움직인다->
(블랙보드 데이터 : 적군 발견)->
(비헤이비어 트리 : 적군 발견하면 공격해라)-총을 쏜다->


12. 이제 비헤이비어 트리로 들어가 AI의 행동 구조를 짜 봅시다. Selector는 행동 선택지 중 하나를 선택해 실행하게 하는 것입니다. 그러면 그 행동 선택지들을 만들어야 겠죠. '새 태스크'를 눌러 행동을 만들어 봅시다. 새로 생긴 태스크 파일의 이름을 Focus로 바꿉니다.
태스크는 곧 행동이고, 이 Focus 태스크는 Focus를 하는 행동이 될 것입니다. AI가 Focus 태스크를 실행하면 플레이어를 바라보게끔 만들어 봅시다.


13. Focus 태스크 파일로 들어가서 Receive Execute AI 노드를 만들어 동작의 시작을 만들어 줍니다.
그 다음에 Finish Execute 노드도 생성하여 행동 동작의 끝도 만들어 줍니다.
태스크의 시작과 끝이 만들어졌습니다.


14. 해당 태스크에서 Set Focus 함수를 실행하도록 합니다. SetFocus 함수는 이름대로 Focusing 해주는 함수입니다.
SetFocus의 타깃(누가) New Focus(어디로 Focus)할 건지를 정해줍니다.
타깃(누가)은 AI캐릭터의 컨트롤러, 즉 이 태스크를 실행할 Owner Controller(AI컨트롤러 = Enemy_AI)입니다.
New Focus는 플레이어 자기 자신입니다. 플레이어 자기 자신은 0번 플레이어이고, 이것은 Get Player Pawn(Player Index 0)으로 부를 수 있습니다.
Owner Controller(AI캐릭터 = Enemy)가 Get Player Pawn(Player Index 0)을 Focus합니다.
Focus한 후에 Finish Execute하여 동작실행을 마쳐줍니다.


15. 비헤이비어 트리로 돌아가 Focus 태스크를 실행하게 만들어줍니다.
맨 처음 Root 밑에 Selector, 그 밑에 Sequence, 그 밑에 Focus가 있습니다. Root는 맨 처음 시작이고, Selector는 여러 동작 중 하나를 선택하여 실행하는 것이고, Sequence는 한 동작이 아니라 여러 동작이 이어져서 실행되는 것입니다.
이제 게임을 실행해보면 AI컨트롤러는 계속 나(플레이어)에게 포커싱되어 있습니다.
-이어서
'프로그래밍 > 언리얼엔진' 카테고리의 다른 글
| [언리얼5] 인디게임 제작기 1 : 캐릭터 조작 (2) | 2024.06.15 |
|---|---|
| [언리얼5 플러그인] Ultra Dynamic Sky (4) | 2024.05.24 |
| [언리얼5] 카오스 파괴 시스템 튜토리얼 -2- 필드시스템(FieldSystemActor) (1) | 2024.05.07 |
| [언리얼5] 카오스 파괴 시스템 튜토리얼 -1- Geometry Collection, Damage Threshold, Anchor Field (3) | 2024.02.04 |
| 언리얼4 오류. 새 프로젝트 만들려고 하는데 안됨 (2) | 2023.03.26 |