[UE] Stack-O-Bot 프로젝트 튜토리얼 스터디 노트 - 4편
2023.07.11 - [Unreal 엔진] - [UE] Stack-O-Bot 프로젝트 튜토리얼 스터디 노트 - 1편
2023.07.11 - [Unreal 엔진] - [UE] Stack-O-Bot 프로젝트 튜토리얼 스터디 노트 - 2편
2023.07.13 - [Unreal 엔진] - [UE] Stack-O-Bot 프로젝트 튜토리얼 스터디 노트 - 3편
[UE] Stack-O-Bot 프로젝트 튜토리얼 스터디 노트 - 4편
스터디 노트 시리즈 4편.
여기서 애니메이션 블랜드 스페이스로 애니메이션 블랜딩을 작업하고, AI Controller 를 만들고 내비메시를 생성해서 AI가 특정 규칙에 따라 움직이도록 만들 예정.
시작하기 전에, 애니메이션 디테일에서 "애니메이션 루프"를 켜줘야 애니메이션이 반복재생 됨.
애니메이션 블랜드 스페이스
블랜드 스페이스를 활용해서 이동 속도가 빠를 때는 달리기 애니메이션을, 속도가 낮을 때는 걷기 애니메이션을 처리하도록 작업. 먼저 블랜드 스페이스 에셋을 생성.
레거시 에셋으로 블랜드 스페이스 D1 도 있는데, D1 은 축이 하나(가로축)만 있는 버전이고, 여기서는 그냥 기본 블랜드 스페이스를 활용한다. 에셋 디테일 뷰에 가로축과 세로축을 볼 수 있음.
가로축 최대값을 최대 속도인 400 으로 설정하고 하단 그래프에 애니메이션을 드래그해서 속도 구간에 적절히 배치.
다음은 발이 미끄러지는 것처럼 보이지 않게 분석할 수 있도록 설정할 수 있는데, 좌측 에셋 디테일에서 [분석/가로 축 함수] 타입을 Locomotion 으로 설정. 발의 본을 설정해준다. foot_l, foot_r 이면 됨.
분석 버튼을 누르면 끝. 이제 애니메이션 스테이트로 가서, 애니메이션 에셋을 연결하는 대신 블랜드스페이스를 연결해준다.
이제 캐릭터가 가속할 때 걷다가 점점 뛰는 식으로 블랜딩. 이동처리는 여기까지 해서 마무리.
AI Controller
이번엔 인공지능으로 움직이는 AI 컨트롤러 제어를 만들어볼 차례. 블루프린트 클래스 생성에서 AI Controller 를 부모클래스로 생성.
이 AI Controller 가 동작하게 하기 위해 블루프린트를 간단하게 편집. Custom Event 를 만들어서 Timer 에 연결하고, 3초 뒤 Custom Event 가 불리면 AI Move To 노드를 이용해서 캐릭터를 이동. 여기서 포지션은 0,0,0 이기 때문에 원점을 향해 달려감.
AI Controller 가 움직이려면 바닥과 장애물을 판단해야 하기 때문에 Navigation Mesh Bounds Volume 을 생성해줘야 함. P 키를 눌러서 내비메시 표시를 토글할 수 있음.
스케일 도구를 이용해서 AI 캐릭터가 돌아다닐 영역만큼 확장.
이렇게 설정하고 돌리면, AI Bot 이 0,0,0 좌표를 향해 달려가는 걸 확인할 수 있음.
봇과 플레이어의 색상이 동일하기 때문에 머티리얼 인스턴스(Material Instance) 를 생성해서 컬러를 변경해본다. 이 작업은 BP_Bot 의 Contruction Script(생성자 스크립트)에서 처리. 메시 컴포넌트를 드래그해서 블루프린트 노드를 만들고, 핀을 뽑아 Create Dynamic Material Instance 노드를 생성.
Create Dynamic Material Instance 노드의 Element Index 는 0으로 설정해서, 해당 매시의 0번인덱스 머티리얼의 인스턴스를 생성하도록 함. return Value 로 Material Instance 가 생성되면 Set Vector Parameter Value 를 이용해서 컬러를 파란색 계열로 바꿔준다.
Set Vector Parameter Value 의 Value 값은 변수화 해서 컬러를 셋팅. 변수명은 Color 로 하고, 블루프린트 뷰에서 눈모양 아이콘을 클릭해서 public 변수로 노출시킨다.
이제 디테일뷰에서 컬러를 변경해줄 수 있게 됨.
AI Controller 캐릭터와 조작 캐릭터의 컬러를 다르게 설정.
스폰, 오브 수집 (Spawn and Collect Orbs)
프랍들 리소스를 추가로 임포트. 머티리얼은 기존의 박스와 같은 머티리얼을 사용하고 있음.
Actor 를 상속받는 블루프린트 클래스를 만들고, Orb 컴포넌트로 등록. 컬리전 프리셋으로 이동해서 Overlap Only Pawn 으로 설정.
입력 맵핑을 Space 키로 한 뒤에 앞에서 만든 Orb 블루프린트를 스폰하도록 처리해본다. 프로젝트 셋팅에서 SpawnOrb 이름으로 Space 키를 액션 맵핑하고, Spawn Actor From Class 노드로 생성. 위치는 플레이어 캐릭터의 위치로 셋팅.
이제 AI 봇이 소환된 Orb 를 따라 이동하게 만들어봄.
AIController 블루프린트에서 Orb를 찾는 함수를 만들어서 해당 위치를 목적지로 설정해준다.
FindOrb 함수를 만들고 리턴타입 설정.
이렇게 만든 함수 노드는 "퓨어" 설정으로 실행 핀 없이 언제든 호출하는 형태로 설정할 수 있음.
이렇게 하면 AI가 스폰된 Orb 쪽으로 뛰어가는데, 겹친 Orb 는 제거하도록 해본다. Orb 의 블루프린트에서 이벤트를 추가하고, OnComponentBeginOverlap 이벤트를 구현해보는 것으로.
이렇게. Case to Pawn 으로 형변환을 하고, As폰 핀으로 Is Player Controlled 인지 검사한 뒤에, 플레이어 컨트롤 폰이 아니라면 Orb 액터를 제거하도록 작성. 이제 AI Controller 가 돌아다니면서 스폰된 오브들을 수집하는 동작을 확인할 수 있음.
AI 움직임까지 작업해서 4편 끝.
다음 5편에서는 상호작용 요소들을 만들어볼 예정.
참조
Your First Game In Unreal Engine 5
https://dev.epicgames.com/community/learning/tutorials/e2V/your-first-game-in-unreal-engine-5