Unreal Soul Like 간단한 데모

조정원·2025년 10월 12일

추석 연휴 10일 동안 블루프린트를 사용해 간단한 Soul Like 만들기에 도전해보았다.
소울류 만드는 강의, 유튜브 영상 등을 참고하였다.
먼저 기획과 개발 일정을 잡았다.

기획

  • 장르: 로그라이크 + 소울라이크 액션 RPG
  • 플랫폼: PC (Unreal Engine 5, 키보드 + 마우스)
  • 시점: 기본 3인칭
  • 핵심 경험:
    • AI가 자동 전투 / 이동을 수행
    • 플레이어는 스킬 회피로 개입
    • 전투 → 수집 → 제작/강화 → 다음 전투로 이어지는 루프

개발 일정

1일차: 프로젝트 셋업 / 메인 게임 루프 제작 / 캐릭터 기본 BP 제작
2~3일차: 기본 전투 구현 / 애니메이션 고도화 / AI 자동 이동 / 공격 구현
4일차: 플레이어 개입(스킬/회피) 추가
5~6일차: 적 AI(근거리, 원거리형) 구현
7일차: 수집 포인트 + 포션 제작
8일차: 강화 시스템 + UI 기본 구현
9일차: 로그라이크 구조 구현
10일차: 버그 수정 + Polish + 카메라 시점 전환 일부 테스트

1일차

먼저 프로젝트를 생성하고,
에픽게임즈에서 무료로 제공하는 Echo 캐릭터를 베이스로 기본 캐릭터를 만들었다.
https://www.fab.com/ko/listings/36a9d7fb-6769-4e45-a0b3-950890da82c1

애니메이션에서 주요하게 볼 부분은 캐릭터가 걷기를 시작하고 멈추는 부분에 애니메이션을 넣어 이동방향과 속도에 따라 애니메이션의 전환을 부드럽게 만들어주는 것이다.


예를 들어, 걷기 상태에 진입할 때면 걷기 시작할 때의 방향을 계산하여 각 방향 별 애니메이션 시퀀스를 재생하고 이후 걷기 루프에 진입한다.
추가로, 트랜지션에 우선권을 주어 여러 트랜지션 간의 순서를 제어한다.


속도가 줄었을 때도 마찬가지로 멈추는 애니메이션에 진입한다.

2~3일차

2~3일차는 검과 방패 애니메이션이 포함된 유료 에셋 활용하여 전투와 관련된 주요 기능들을 구현하였다.
https://www.fab.com/ko/listings/21ab233f-4dc3-4007-912c-1d6ccabd2e15

짚고 넘어가면 좋을 부분으로, 공격에 연관된 부분이 모두 애니메이션 블루프린트에서 구현되었다.
보통은 애니메이션 몽타주를 사용해서 제어할 것으로 기대했는데 특이한 방법이였고, 편리한 점도 있고 불편한 점도 있었다.

작동 원리는 키가 입력되었을 때의 변수를 저장하고, 각 변수에 따라 스테이트 머신의 상태를 전환한다.
이때 애니메이션 스테이트 자체에서 커스텀 이벤트를 생성한다.

이렇게 하면 애니메이션 노티파이 이벤트를 호출할 수 있고, 스테이트에 진입하거나 나갈 때 필요한 변수 값들을 설정할 수 있다.

공격은 점프 공격이나 공중 공격 등도 있지만 원리는 비슷할 것 같아 기본 콤보 공격만 구현하였다.

UI도 이 때 구현하였는데 Blueprint Interface와 프로그래스바를 사용하여 간단하게 값만 전달하였다.

4일차

회피는 키 입력이 한 번 되었을 때 Dodge 두 번 입력되었을 때 Roll로 구분된다.
각 키 입력에 대한 Input Direction을 계산해서 블렌드 스페이스에 연결해준다.
Input Direction은 캐릭터 입력의 X와 Y 값을 Atan2(Degrees)함수에 넣어 계산한다.
Atan는 인자를 하나 받아 각도만 계산하고, Atan2는 인자를 두 개를 받아 각도와 방향을 모두 구할 수 있다.

피격 기능은 공격 애니메이션 재생 시 애니메이션 노티파이를 추가하여 공격의 시작과 끝 지점 사이에서 무기에 충돌했을 때의 이벤트를 처리했다.
무기에서 소켓 위치를 가져와 Multi Sphere Trace By Channel 함수로 구 형태의 Trace로 충돌을 감지하고, 충돌 결과로 부터 액터의 피격 이벤트를 실행시켰다.

히트가 발생한 Locaiton을 Damage Position으로 저장하여, 마찬가지로 Atan2로 방향을 계산한 뒤 피격 스테이트의 애니메이션을 재생한다.

5~6일차

새로운 클래스를 만들기에는 시간이 없을 것 같아, 적 AI는 Echo 캐릭터 클래스를 그대로 상속받아 기본 속성과 애니메이션을 사용할 수 있게 하였다.
AI Controller에서 퍼셉션 컴포넌트를 추가하여 AI에 시야를 넣었다.

만약 시야에 플레이어가 들어왔을 때 Target Actor로 블랙보드에 설정하였다.

BehaviorTree는 열거형으로 AI의 상태에 따라 Behavior Tree의 분기를 조정하였다.

Patrol Point에 따라 순찰을 하거나 플레이어를 발견하면 접근하고, 일정 거리에 들어오면 공격을 하도록 하였다.

적 AI를 추가한 뒤 락온 기능을 넣었다.
락온 키를 눌렀을 때 플레이어 기준 구 형태로 Trace하여 주변 적 AI를 저장하고,


저장한 적 AI로부터 가장 가까운 AI를 Line Trace를 사용해서 가져온 후 락온할 액터로 지정한다.
이후, 무브먼트 방향으로 회전을 끈 뒤 캐릭터의 회전을 적 AI 방향으로 계속해서 회전시켜주면 된다.

추가로 여러 명일 때 Target을 변경하는 기능도 추가했다.

이는 가까운 적을 탐지할 때와 같은 기능인데,
현재 타겟을 제외한 액터 중 두 번째로 가까운 적을 가져오면 된다.

7일차

7일차는 아이템과 포션 기능을 추가했다.
소울류와 같은 아이템을 위해 나이아가라 컴포넌트를 추가했고,
Spher Collision으로 캐릭터가 오버랩 되었을 때 위젯을 띄우고 키 입력 시 줍기 애니메이션을 주고 아이템은 Destroy 시켰다.
인벤토리나 아이템의 실체와 관련된 기능 없이 줍기 기능만 존재한다.

포션 기능도 마찬가지로 간단하게 애니메이션 재생과 HP UI에 갱신 시키는 정도만 추가했다.

8일차

8일차는 화톳불울 추가했다.
체력과 스태미나를 리셋시켰고, 적을 리스폰하거나 하는 기능은 없다.
강화 기능이 따로 없기 때문에 UI에 나가기 기능만 만들었다.

컨트롤러에서 HUD를 지우고 새로운 UI를 띄운 뒤 다시 플레이어 HUD를 생성해주었고,
위젯에 포커스하기 위해 Input Mode를 UI Only로 설정했다.

9~10일차

마지막 9~10일차는 주로 버그를 수정하고 기능들을 다듬었다.

가장 큰 버그로 공격 시 여러번 Hit Event를 발생시켰는데, 공격이 끝날 때까지 처음 충돌이 발생한 액터는 Trace내에서 새로 충돌이 발생해도 처리하지 않아야 했다.

캐릭터 애니메이션에 Vault Over(뛰어넘기) 가 있어서 장애물 액터를 생성한 뒤 일정 거리에 Line Trace에 성공하면 해당 애니메이션을 재생하였다.

이후, 시각적 효과(VFX)를 더했다.

피격 시 파티클을 생성과 카메라 셰이크 효과를 넣었고, 무기에 Trail을 추가했다.

회고

제한 시간과 지식 속에서 최대한 많은 기능을 구현하고자 하였다.
비록 모든 기능을 완성하지는 못했지만 부족한 부분을 명확히 인식할 수 있엇고, 앞으로의 방향성을 알 수 있는 기회였다.
데모를 지속적으로 만들어보는게 학습에 큰 도움이 될거라 생각하여 계속 시도해보면 좋을 것이다.

기능 구현의 아쉬움

프로젝트를 진행하며 느끼길 상태 전환을 부드럽게 연결하고 짜임새 있는 구조를 만드는게 주요하게 느껴졌다. 이게 없이 떠오르는 데로 기능을 추가하여, 상태에 따라 행동을 제한하는데 어려움이 있었다.
또한 기획한 대로 모든 기능을 추가하지 못해 아쉬웠다. 이번 프로젝트에 구현하지 못한 기능은 다음과 같다.

  • 보스전 시스템
  • 로그라이크 구조
  • 플레이어 사망 처리 및 리스폰, 적 초기화 로직
  • 아이템 및 인벤토리
  • 사운드 이펙트 및 BGM
  • 게임의 한 사이클 구조 부족
  • AI 다양성 부족
  • 공격 패턴과 피격 패턴의 단조로움
profile
게임 AI 개발자 조정원입니다.

0개의 댓글