언리얼 - 게임 개발

첫 게임 개발 (1) _ 플레이어 이동 및 애니메이션 구현

earth-star 2024. 6. 16. 21:18

게임개발을 해보고 싶어 언리얼 엔진 튜토리얼부터 보기 시작한지 2달이 좀 넘었다.

그 중 언리얼 엔진에서 제공하는 paper 2d 기능을 알게 되었고 2d / 3d 하이브리드 게임에 흥미가 가서 메트로배니아류의 게임 제작을 기획하게 되었다.

기본으로 제공하는 paper 2d 기능이 충분하지 않아 paperzd 라는 플러그인을 발견하였고 이 플러그인을 이용하면 2d statemachine을 이용한 애니메이션 구현이 쉬워 이 플러그인을 사용할 생각이다.

 

Pawn의 계층도

 

전체 Pawn의 부모 블프인 BP_ActionChar_Base를 만들고 자손 블프를 BP_Player와 BP_Enemy_Base로 만든다.

이후 적들은 BP_Enemy_Base의 자손 블프로 구현할 생각이다.

 

BP_ActionChar_Base에는 모든 Pawn에 들어갈 HitBox와 BPC_Vitality를 만든다.

 

BPC_Vitality 액터 컴포넌트로 각 Pawn의 체력에 관련된 함수와 변수를 저장한다.

 

 

위와 같이 시작되면 Current Health에 Max Health를 넣어 최대체력을 설정하고 ReceiveDamage함수를 만들어 데미지를 받았을 때 현재 체력에서 받은 데미지를 빼고 체력이 0이하로 떨어지면 IsDefeated 변수를 Ture로 만들어 패배하였음을 변수에 저장한다.

 

BP_Player

Sprite에 플레이어의 스프라이트를 저장하고 SpringArm과 Camera를 설정하고 SpringArm의 회전을 조정하여 정면을 바라보게 만든다.

 

Enhanced Input Local PlayerSubsystem

 

이동 구현

 

왼쪽으로 갈 때 캐릭터의 회전 구현

 

언리얼 5.1부터 제공하는 향상된 입력 매핑 시스템을 이동을 구현한다.

 

다음은 걷기와 공격 등 애니메이션을 넣을 차례.

 

PaperZD의 Animation Source를 이용하여 캐릭터의 각 애니메이션을 설정한다.

 

ABP_Player의 StateMachine

 

PaperZD AnimBP를 이용하여 Player의 StateMachine을 구현한다.

각 상태에서의 애니메이션을 지정하고 State간의 이동 조건도 설정할 수 있다.

Idle에서 Jump로 이동조건

 

캐릭터가 공중에 있는지 확인하는 IsFalling함수로 구현. 나머지 상태도 비슷하게 구현한다.

 

 

잘 동작하는 것을 볼 수 있다.