Unreal Engine/게임클래스 - 언리얼엔진 기초

[17강] State Machine(Draw / Sheath)

whereareyoung 2023. 10. 5. 14:59

이번시간에는 이전에 임포트 했던 애니메이션들을 활용하여 만든 BS_Sword 를 통해 칼을 넣고 빼는 것을 구현하여 볼 예정이다.

 

1. Player > ABP_Player 

"BS_Unarmed" 에서 칼을 뽑기1, 2를 통해 "BS_Sword" 에 연결된 후

칼을 넣기 1, 2를 진행해 원래대로 돌아가는 형식으로 짠다. 

 

이후 "Drawing", "Sheathing" 변수를 생성한다.  

 

생성한 변수를 이용해 다음과 같이 조건을 넣어준다. 

 

마지막으로 칼을 넣고 빼고 하는 시간을 자연스럽게 맞추기 위해 블렌드 세팅 > 기간 을 다음과 같이 조절하여준다. 

빨간박스로 체크한 주황 - 0.1 하양 -0.05

 

추가로 모드변경을 해 주는데, 맨 마지막은 Linear 로 연결해준다. 

애니메이션 키는 같고 선 연결되는 스타일이 달라지기 때문에 중요한데 여기서도 조절 가능하다.

개인적으로 마야로 애니메이션을 작업한 적이 있어 그래프 스타일 (Linear, stepped 등) 을 조절하여 본 적이 있어 이해는 빨랐으나 더 스타일이 다양한 것 같다. 

 

<마야 그래프 예시>

https://www.youtube.com/watch?v=h0wHuarr0wg 

 

모드 변경 과 Transition 을 설정하여 준 모습은 다음과 같다.

 

컴파일 후 애님 프리뷰 에디터 토글 활성화를 통해 검을 꺼내고 넣는 동작이 자연스럽게 연결 된 것을 확인 할 수 있다. 

 

현재 단계까지 작업했을 때 설정된 애니메이션은 다음과 같다. 

 

1. Idle (기본 애니메이션 동작)

2. In Air (점프 시)

3. Drawing (무기장착 시)

4. Sheathing (무기장착 해제)

현재 1번 애니메이션의 버튼 키는 설정되어 있는데, 3번 4번의 경우 버튼설정이 되어 있지 않다. 

인게임에서 이 변수들이 작동할 수 있도록 하기 위해 버튼 설정을 해 주어야 한다. 

 

키 버튼 설정 

1) 입력키 등록 

편집 > 프로그램 세팅 > 입력 > "Sword" 생성 > 1 설정

 

2) 변수 생성 및 그래프 정리 

- Drawing : 무기를 뽑는 변수

-  Sheating  :  무기를 넣는 변수

-  Drawn  :  무기 장착 / 미착용 설정을 위한 변수

-  CanMove  : 이동 가능 / 불가능 설정을 위한 변수  

 

3) CanMove 변수설정 

기본값일 경우에는 다음과 같이 토글을 체크해 움직일 수 있게 해준다. 

단, 무기 장착 기능은 움직임이 멈춘 상태에서 가능하기 때문에 그동안은 이동을 불가능하게 만들기 위해 다음과 같은 설정을 해 주어야 한다. 

 

--1) Moving 노드로 들어가기 

 

--2) 다음과 같이 Moving 노드 편집

- 좌후전후 움직임과 점프가 CanMove true 일 때만 일어날 수 있도록 수정 

- 무기전환을 할 경우 CanMove False 이므로 움직임이 일어날 수 없음

 

4) BP_Player 에 무기 장착 시스템 구현 

--1) 노드를 생성하기 위해 깨끗한 이벤트 그래프 공간으로 이동 

 

--2) Custom Event 추가 > "Equip Sword"

 

--3) Sword 의 입력 액션 설정 

Idle 상태에서 무기 장착 액션을 하면 무기를 장착하고, 무기를 쥐고 있는 상태에서 무기 장착 액션을 하면 Idle 로 복귀 할 수 있도록 if 문을 통해 전환 

 

--4) 실행되는 "Equip Sword" Custom Event 구현 

무기 장착 액션을 구현했을때 움직임이 멈출수 있도록 Drawing True, Can Move False 로 설정 

(이동을 풀어주고, 다시가는 것은 나중에 돌아와서 다시 구현)

 

5) 무기장착 애니메이션 구현 

--1) "ABP_Player" 애니메이션 블루프린트로 이동, 변수 " Direction " float 형으로 생성

(사진상에는 나오지 않았지만 같은 자료형 변수끼리 있는게 마음이 편해서 Speed 밑으로 자리배치만 변경)

 

--2) 다음과 같이 이벤트 설정 

[1] 핀을 추가하여 " Then2 ", " Then3 " 을 생성 

[2] "Then3" 을 사진과 같이 작업, 플레이어에 들어있는 애니메이션을 가져와 세팅

[3] "Then2" 를 사진과 같이 작업, 플레이어의 방향을 계산해 Direction 변수로 보내기 

 

* Calculate Direction 함수 : 플레이어의 속도와 회전값을 주게되면 현재 진행방향의 값을 구해줌 

(현재 진행방향에 대한 각도를 내적한 결과를 리턴하며 이후 내적에 대해 별도로 다룸)

 

* set Direction 설정 과정에서 "Calculate Direction" 에 넣어주는 값으로 "get Actor Location" 도 가능하다.

단지 마우스로 카메라를 회전시키고 전방으로 이동하기 때문에 카메라에 의한 회전 값을 주는것이 더 긍정적이므로 "get Control Rotation"을 사용하여 구현하였다. 

 

--3) Animation Gragh > Jumping > "BS_Sword"

 

이 노드로 들어가서 아래와 같이 "Direction", "Speed" 값을 넣어주고 컴파일 하면 완료가 된다.  

 

무기장착 애니메이션이 출력되는 과정 정리 

1. 블렌드 스페이스 플레이어에 Direction 과 Speed 변수 값이 입력됨 

 

2. BP_Player 에 "Sword 입력액션" (1) 이 Pressed 되면 실행되는 Equip Sword에 Drawing 이 True 로 변함 

 

3. Drawing 이 True가 되어 애니메이션 블루프린트로 들어옴 

 

4. 애님그래프에서 저기 조건이 True 일경우 BS_Sword 까지 주르륵 넘어와서 무기장착 모션이 실행됨 

이후에 무기장착해재후 다시 " BS_Unarmed " 까지 진행되는 부분을 작업해야함 

 

 

언리얼 애니메이션 디버깅 관련 (Unreal Animation Debug) 

1. 언리얼 애니메이션 블루프린트상에서 프리뷰가 되지 않을 경우 

설정을 "인스턴스 브리뷰" 로 변경하면 뷰포인트에서 애니메이션을 확인 할 수 있다. 

 

2. 게임모드에서 F8로 빙의 해제하고, 캐릭터의 애니메이션을 선택하면 그래프와 애니메이션을 동시에 확인할 수 있다. 

 

여기까지가 오늘 강의에서 다룬 내용이였는데, 다음시간에는 애니메이션 Notify 기능을 이용해 무기 장착을 완료한 후,

Drawing False, CanMove True 로 만들어 다시 Idle 로 돌아갈 수 있게 설정하는 것을 다루기로 하였다. 

 

<다음시간에 다룰 내용 : Notify>

무기장착 키입력후 무기장착 상태 가 False이 경우 실행되는 "Equip Sword" 가 현재 다음과 같이 설정되어 있는데, 

- Drawing 이 True인 상태에서 Sheating 이 True가 되면 루프가 반복된다. 

- 무기를 장착하고 난 후 Drawing False, CanMove True 가 되어야 Idle 로 돌아간다. 

 

Drawing 설정에 사용된 "Drawing Sword 2" 애니메이션이 70% 완료되었을때 다음애니메이션이 실행되므로 70% 이전에 Notify 를 설정하여 주면, 이 지점이 플레이 될 때 Notify를 Call 해주고 Notify 가 공지를 하는 역할 을 수행한다. 

이 "Notify" 를 활용해서 Drawing False, CanMove True 가 되게 하여 무기 장착을 해제하는 것을 구현할 예정이다.  

 

인게임 상에서 "wasd" 를 이용해 전방이동후 "1" (무기장착 키)을 입력하였을 경우 모션 

 

천천히 쌓아올린 구현들이 복합적으로 잘 작용하여 기쁘고 다음 구현이 너무 기대가 된다!