< [Paper2D로 게임 만들기 필기] 3. 애니메이션, Select 노드, State, Character Movement

카테고리 없음

[Paper2D로 게임 만들기 필기] 3. 애니메이션, Select 노드, State, Character Movement

Rocketbabydolls 2023. 7. 23. 19:46

전 시간에는 플립북 액터를 화면에 배치하고 카메라를 이용해 2d 처럼 보이게 한 뒤 방향키를 입력하는 부분까지 완료 했었는데, 이번 시간에는 각종 애니메이션에 대해 다룰 예정이다.

 

키보드 입력을 받아서 움직이게 만들기(제자리)

열겨형 변수 Direction 을 만들고 (Up, Down, Right, Left) 를 만든 뒤 각각 만들어준 UpdateAnimation 함수에 연결해준다. 

이전 시간보다 훨씬 덜 복잡해졌다.

인자는 전달하지 않는데, 이미 멤버 변수로 EDriection 이 선언되고 set을 해주었기 때문이다.

 

UpdateAnimation 함수의 일부

불리언 변수를 이용해 틱마다 키보드가 눌렸는지 확인하고 눌리지 않았다면 Idle 상태, 눌렸다면 이동 상태이므로 분기를 이용해 나눠주고, Switch 문을 이용해 각 wasd 키에 맞는 애니메이션을 내보내 주면 된다. 뒷부분은 전시간에 했으므로 이하 생략.

 

완성

Action 매핑에서 스페이스바를 공격으로 설정해준다.

플레이어가 걸어가다가 스페이스바를 누르면 공격 애니메이션을 재생하게 할 것인데, 스페이스바를 누를 떄마다 재생이 된다면 애니메이션이 부자연스럽게 여러 번 겹칠 수 있다. 따라서 getFlipbookLength 를 통해 애니메이션 시간 만큼 재생 뒤 bAttack 불리언을 False로 변경해 주면 된다.

스페이스바로 공격 애니메이션 재생 추가

 

 

코드 리팩토링

 

플립북만 바꾸는데 Idle, 이동, 공격 세 가지를 구현하느라 복잡하다.

 

Select 노드를 이용해 리팩토링 할 예정. Select 노드는 넣어준 값에 따라 분기를 해 줄 수 있다. 

Select 노드
훨씬 깔끔하게 정리가 된 모습이다.

 

다음으론 열거형 변수를 이용해서 코드를 리팩토링 한다.

 

bAttack, bKeyPressed 와 같이 불리언을 사용하고 있는데, 간단하게 만들 때는 괜찮지만 점점 기능이 많아지면 관리가 힘들 수 밖에 없다. 따라서 열거형 변수를 아래와 같이 만들어서 정리해 준다. 

 

열거형은 신인가?
불필요한 불리언 변수가 빠지고 EState 로 관리되는 모습.

 

공격 도중 방향키를 이동하면 공격 방향도 이동하는 문제 해결

 

Input 을 받을 때 skill 을 쓰고있으면 다음으로 넘어가지 않는다.

 

 

 

액터 이동시키기

 

로직 함수 추가

 

 

 

이렇게 만드는 것은 물리 엔진을 활용 하지 않고 수동으로 지정한 뒤 이동시키는 것이므로 액터를 만들 때 같이 만들어지는 Character Movement 를 이용하는 것이 좋다.

 

Character Movement

 

Character Movement

 

이 컴포넌트는 클래스를 생성할 때 자동적으로 클래스 내에 선언되어있는 물리엔진이다. 내부에는 가속도, 속도, 객체가 작용하는 방식, 걷기, 수영, 점프 등의 게임 제작에 있어 거의 모든 것이 이미 만들어져 있다. 

BP_Knights 안의 이벤트 그래프

 

로직에서 이렇게 블루프린트를 짜 주면 캐릭터가 실제로 움직인다!

 

하지만 이렇게만 해두면 문제가 발생한다.

 

1. 캐릭터가 위 아래로는 움직이지 않음

2. 캐릭터가 빙판길 위를 걷는 것 같이 미끄러짐

 

이것들은 각각 이렇게 해결할 수 있다.

 

1. 캐릭터가 위 아래(Z축) 으로 움직이지 않음

본래 Walking으로 되어있는 움직임 모드를 Flying으로 수정

   Default Land Movement Mode 를 보면 처음에는 Walking으로 설정되어 있다. 언리얼 엔진은 3D 를 기반으로 하여 만들어진 엔진이기 때문에 나는 지금 공중에 충돌이 가능한 가상의 바닥을 만들고 겉으로 보기에는 2D인 3D 객체를 올려두고 카메라를 통해 2D처럼 보고 있는 것이기 때문에, 객체가 걷고 있다면 위로 올라갈 일이 없을 것이라 유추가 가능하다.

   따라서 Flying으로 설정을 바꿔주어 Z축 이동이 자유롭게 만들면 된다.

 

 

2. 캐릭터가 빙판길 위를 걷는 듯이 미끄러짐

두 번째 속성의 값을 2048 -> 2048000으로 바꿔준다

   우리의 문제는 객체가 하늘을 나는 상태에서 방향키 입력을 멈춰도 미끄러지듯이 멈춘다는 것이다. 근데 속성들을 잘 살펴보면 눈에 띄는 속성이 있다.

   Braking Deceleration Flying 이다. 

그렇다.

 

 

계층화

 

지금까지는 BP_Knight 만을 사용 했는데, 당연히 플레이어 객체만 있으면 게임이 안 돌아가기 때문에

BP_Creature 를 가장 상위 클래스, 그 하위에 Knight 와 Monster 가 있게 했다. 각 클래스에서는 하위 상속받은 클래스에 필요한 기능만 추가하거나 필요없는 부분을 들어냈다.

   ex) 몬스터 객체의 카메라 제거, Knight 객체의 애니메이션 재생 함수 제거

 

Knight의 이벤트 그래프를 보면 명확하다

이외에도 리팩토링을 잠깐 했지만 필자는 아는 부분이기도 하고, 이해에 어려움이 없어 필기에는 더 자세하게 옮기지 앟는다.

 

 

3일차 완성본