3D Action RPG (1) - FSM 구조와 캐릭터 움직임 제어

mingu Lee·2025년 6월 15일

Unity3D - 3D Action RPG

목록 보기
1/5

마지막으로 LittleWars를 개발 하고나서, 게임 개발 대신 Unity Learn을 통해 기초 다지기와 내가 몰랐던 Lighting과 Shader 같은 개념들을 공부하는 시간을 가졌었다.

계속 이론 공부만 하기에는 재미가 없어서 이번에는 다크소울이나 엘든링같은 3D Action RPG 게임을 개발해보려고 한다.

간단하게 전반적인 계획을 구상해보았다.

  1. 다크소울처럼 일반적인 무빙의 Camera와 락온 시 Camera 분리
  2. FSM 기반으로 Player와 Enemy의 제어
  3. 근접 전투 시스템
  4. 적과의 상호작용
  5. 게임 UI 및 시스템

이 정도인데 세부적인 사항은 개발하면서 추가하거나 수정하는 방향으로 진행하려고 한다.

오늘은 일단 Player와 Enemy에 적용할 FSM 구조와 기본적인 캐릭터 움직임을 구현했다.

FSM


Player와 Enemy 모두 FSM으로 동작하기 때문에 State와 BaseStateMachine을 하나씩 만들어서 Player와 Enemy가 각자 상속하는 방식으로 진행했다.

Idle은 가만히 있거나 그냥 돌아다닐 때의 State, Attack은 공격 시의 Statem Targeting은 Enemy를 Lock On 했을 때의 State, Dead는 죽었을 때의 State이다.

일단 4가지 State에 대해서만 구상을 했고, 개발하면서 필요한 State는 그때마다 추가할 예정이다.

캐릭터 Model 다운로드


캐릭터를 제어하기에 앞서 캐릭터로 사용할 3D Model을 찾아보았다.

다크소울 같은 느낌이 들고 싶어서 갑옷 기사 Model을 중점적으로 찾았고, Mixamo라는 3D Character, Animation을 다운받을 수 있는 사이트에서 원하는 Model을 찾아서 다운로드 받았다.

해당 File을 사용하여 내가 제어할 Player Object로 만들었다.

처음에 Model을 Hierarchy에 추가하면 흰색으로 보일텐데 Material이 없어서 그런거니 Location을 Use External Materials로 바꿔주면 실제 Material이 생기게 된다.

캐릭터 움직임 제어


이번에는 Input Manager의 Vertical이나 Horizontal 값을 참조하지 않고, Input Action System을 사용했다.

저번 3D Quarter View 게임을 만들 때 사용했던 기억을 되살려서 PlayerControl이라는 Input Action을 만들었다.

저번에는 플레이어에 Player Input Component를 추가해서 사용했었는데, 이번에는 Input Action을 C# Script로 만들어서 사용했다.

Script로 만들면 위와 같은 C# File이 만들어지는데, Input을 관리하는 Class를 만들어서 내가 만든 Action Map에 자동으로 생성된 Interface를 상속받아서 사용했다.

예를 들어, 내가 만든 Action Map의 이름이 Player라면 PlayerControl Script 안에 IPlayerActions라는 Interface가 자동으로 만들어진다.

위 Interface를 상속받아서 해당 Map에 있는 Action을 직접 구현하면 된다.

나 같은 경우엔 현재 Targer Action과 Move Action이 있으므로, OnTarget과 OnMove 함수를 만들었다.

InputReader에서 발생한 Event와 받아온 Movement 값을 바탕으로 Player의 움직임을 구현했다.

오늘의 결과물


이번은 여기까지만 리뷰하고 플레이어의 애니메이션과 상태 전환, 카메라 제어는 다음 리뷰에 작성하도록 하겠다.

profile
Github: https://github.com/dlalsrn

0개의 댓글