프로젝트 명 : 소울 액션 게임
- 개발 기간 : 2026.03.24 ~ 2026.04.06(월) (총 14일)
- 참여 인원 : 1명 (개인)
- 게임 장르 : 액션
- 플랫폼 : PC Windows
- 게임 설명:
- 총 3개의 페이즈가 존재하는 보스 처치하기.
언리얼 엔진의 블루프린트와 행동 트리를 한 번도 진행해본적이 없었기에, 이 기능들에 대해서 익숙해지는 것을 목표로 진행하였습니다.
– 결과 보고서의 순서는 다음과 같이 진행하도록 하겠습니다.
- 적용한 기능 및 기술
- 문제 해결 사항.
- 부족했던 점.
- 새롭게 시도해보고 싶은 점.
- 게임 풀 영상(Youtube링크)
[ 1. 적용한 기능 및 기술 ]
- 페이즈 별 행동트리 구축.
- 보스 점프 공격.
- Rock던지기 공격 및 fracture Mode 구현.
- 8방향을 위한 Blend-Space적용.
- Dynamic Combo Attack 구현.
1. 페이즈 별 행동트리 제작
조건을 체크할 수 있는 Decorator를 통해 체력이 70%, 50%일때 페이즈가 바뀌도록 구현.
- 첫 번째 페이즈 입니다. 1번 포효를 했는지에 대해서 체크를 먼저 진행해주고, Player를 Chase하며 범위 안에 들어왔으면 공격하는 단순한 패턴입니다.
- 두 번째 페이즈 입니다. 이번에도 포효를 했는지에 대해서 체크를 먼저 진행해준 후, 점프 공격 및 기본 공격을 해주는 패턴입니다.
- 세 번째 페이즈 입니다. 포효를 했는지에 대해서 체크를 먼저 진행해줍니다. 그 이후에는 무조건 바위를 집어드는 행위를 진행한 후, 바위를 던지는 행위 및 점프 공격, 기본 공격 중 랜덤한 행위를 하는 패턴입니다.
- 바위를 던질 때 효과를 줄 만한 부분을 찾아보다가, 언리얼 엔진에서 제공하는 Fracture Mode를 통해 바위가 부서지는 효과를 넣어주었습니다.
2. 8방향을 위한 Blend-Space적용.
카메라가 바라보는 방향을 플레이어가 바라보도록 하는 것이 이 프로젝트의 조작에 더 알맞은 방향이 될 것 같아, 항상 정면만 바라볼 수 있도록 Blend-Space를 적용하였습니다.
- 또한 상체는 공격하는 애니메이션을, 하체를 움직이는 애니메이션을 재생하기 위해 공격용 애니메이션 몽타주와 하체를 Blend처리하는 방식으로 구현해주었습니다.

3. Dynamic Combo Attack
고정된 콤보만 재생 시킬 수 있었던 기존 방식에서, 새로운 캐릭터가 추가되어도 해당 캐릭터의 콤보 어택을 대응할 수 있도록 방식을 수정해보았습니다.
- 과정에 대해서 설명드리자면, 기존에는 문자열을 고정으로 Attack1이면 Attack2, Attack2면 Attack3으로 공격을 수행하도록 처리하였었습니다.
- 수정된 방향은 각 캐릭터마다 콤보의 개수가 다를 수 있으므로 BP_Character라고 하는 부모 캐릭터를 각 캐릭터마다 상속하도록 구현하였습니다. 각 캐릭터마다 MaxAttackComboCount를 직접 설정해주었고, BP_Character입장에서 현재 ComboCount와 MaxAttackComboCount라는 것을 비교하여 ComboCount + 1 한 값이 MaxAttackComboCount보다 더 작다면 다음 콤보가 존재한다는 의미이므로 다음 콤보를 재생할 수 있도록 진행해주었습니다.
[ 2. 문제 해결 사항 ]
- 바위를 집어들 수 없는 현상 수정.
- 애니메이션 레이어 꼬임 현상.
1. 바위를 집어들 수 없는 현상 수정.
-
우선, 보스 몬스터가 바위를 집어드는 기능을 구현하고 싶었습니다. 바위는 평소에는 길을 막고 있는 장애물 역할을 하다가, 특정 페이즈가 되었을 때 보스가 바위 오브젝트를 집어들 수 있는 기능을 구현해야 했습니다.
-
이를 구현하기 위해 바위 오브젝트에 AIMoveTo라는 것을 사용하여, 우선 바위 오브젝트까지 접근하는 것을 목표로 구현하려고 했습니다. 하지만 Navmesh Bounds Volume을 사용할 경우, 바위 오브젝트의 위치는 AI의 움직임을 통해 접근할 수 없는 영역이었기 때문에 가까이 다가가는 것이 불가능한 문제가 발생하였습니다. 이는 아래 그림을 통해 간단하게 확인할 수 있습니다. (초록색 영역이 AI를 통해 이동할 수 있는 영역, 하얀 부분은 장애물 부분이기에 이동할 수 없는 영역)
-
이를 어떻게 해결할까 고민하게 되었고, 결국 보정 값을 사용하는 방식으로 수정하게 되었습니다. 바위를 기준으로 보정치를 주었고, 보정치가 적용된 위치에서 NavMeshVolume으로 투영하여 AIMoveTo가 가능한 좌표로 이동할 수 있도록 좌표 설정을 처리해주었습니다.
-
일반적인 상황에서는 위의 해결 방식으로 웬만한 모든것이 정상적으로 처리되었지만, 프로젝트가 진행되면서 추가적인 기능들을 구현하다보니 또 다른 문제가 발생하였습니다.
-
제 게임에서는 보스몬스터가 플레이어를 향해 점프를 하며 공격하는 패턴이 존재합니다. 점프 공격을 통해 플레이어 위치로 공격을 시도 할 때 해당 위치에 바위가 있을 경우 바위에 보스 몬스터가 뚫고 들어가는 현상이 발생하였습니다. 뚫고 들어가는 것 자체가 버그 일수도 있지만, 이를 잘 활용하면 바로 해당 바위를 탐지하여 드는 행동을 하는 것도 괜찮은 방향이겠다 싶어서 이 방향으로 진행하려고 했습니다.
-
우선 보스 몬스터는 바위에 뚫고 들어간 상황이며, 현재 장애물 위치에 정확하게 들어가 있는 상황이므로 NavMeshVolume에서 장애물 위치에 있는 상황이라 보스 몬스터의 위치를 강제 변경해주는 그러한 로직을 진행하지 않는 이상, 그 어떤 좌표로도 AIMoveTo를 사용할 수 없었습니다. 이러한 경우에 가장 가까운 바위를 우선 탐지하고, 그 바위로 이동할 수 없는 경우 거리 계산을 통해 일정 범위 안에 있으면 해당 바위를 드는 행동을 진행하는 방식으로 수정하여 문제를 해결할 수 있었습니다.
2. 애니메이션 레이어 꼬임 현상.
-
로컬 기준 블렌딩으로 팔 각도가 비정상적인 현상이 존재하였습니다. 일단 8방향 Blend-Space를 활용하고 있었기에, 왼쪽 방향 혹은 오른쪽 방향으로 이동할 경우 허리의 비틀림이 왼쪽 혹은 오른쪽으로 비틀림이 이루어집니다. 이때, 공격버튼을 누르면 상체는 두 팔을 앞으로 향하며 공격하는 애니메이션이 재생되어야 합니다. 아무런 설정을 해주지 않으면, 로컬 회전 기준으로 섞이면서 두 레이어(상, 하체)가 섞이면서 팔 회전 각도가 이상해지는 현상이 발생하였습니다.
-
이를 해결하기 위해 Layed blend per bone의 Mesh Space Rotation Blend 체크하여 메시 기준 공간으로 가져와서 비교하고 블렌딩하는 방식으로 문제를 해결할 수 있었습니다.
[ 3. 부족했던 점 혹은 아쉬웠던 점 ]
- 우선, 블루프린트를 처음 접하며 첫 일주일 동안은 익숙해지는데에 시간을 많이 보냈던 것 같다. 그러면서 욕심은 많아 멀티를 넣어보겠다고 언리얼 엔진의 멀티 플레이에 관하여 공부까지 진행을 해보게 되었다. 각을 재보며 시간 안에 멀티를 넣을 수 있을지 없을지를 빠르게 판단하여 시간안에 부족할 것 같다고 판단이 들었으면 과감하게 접고 싱글 플레이 위주로 더 풍성한 기능들을 많이 넣어볼 수 있었을 텐데 그렇게 진행하지 못한 점이 프로젝트를 진행하면서 가장 아쉬웠던 부분이었던 것 같다.
[ 4. 새롭게 시도해보고 싶은 점 ]
-
단연, 멀티 플레이 기능이다. 블루 프린트 프로젝트에서는 멀티 플레이 기능을 넣는데에 실패했지만, 다음 프로젝트때는 팀 프로젝트이기에 팀원들만 OK해준다면 멀티 플레이 기능을 꼭 넣어보고 싶다.
-
또한, 보스의 패턴들을 더욱 다채롭게 만들어보고 싶다. 현재는 보스 자체에서 이루어지는 공격 패턴들이라면 다양한 기믹들을 활용해서 보스를 처치하는 방향으로 기믹 퍼즐 요소들을 넣어서 파훼하는 방식의 전투 스타일을 만들어보고 싶다.
No Comment! Be the first one.