Combo Attack 구현해보기 및 구조 정리하기

2025. 10. 27. 21:42·Unreal Project/Unreal Study

 

Default Pawn Class를 Blue Print로 변경. 

Character의 C++ 파일에 계속해서 코드를 추가하는건 생산성에 좋치 않다 

Asset을 참조하는 방식

 

다음과 같이 Asset을 넣는 방식은 애셋을 교체할 때 마다 빌드를 재시작 해야 하므로 개발 속도 저하가 되며 경로 변경시 대량 수정을 해야한다. 

 

따라서 이제부턴 블루프린트 방식을 활용하여 생산성과 속도를 올리고자 한다. 

 

BluePrint에 변수 추가
BluePrint에 Asset 적용하기

 

다음과 같이 BluePrint에 변수와 Category를 추가하여 Asset을 넣으면 교체에도 시간이 절약되며 

 

또 다른 애셋을 추가하는데 시간이 감소한다고 생각된다. 

 

이를 이용해서 Combo Attack Action을 구현 해보고자 한다. 

 

 

 

Step 1. 

Animation Montage 란

 

Animation Montage

 

Animation Montage를 왜 사용하는가? 

 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animation-montage-overview?application_version=4.27

해당 언리얼 공식 문서를 참고하여 보자면, 

 

  • Animation Montage를 사용하면 BluePrint 또는 C++코드를 통해 애니메이션 애셋을 바로 제어할 수 있음. 
  • Animation Montage를 사용하여 여러 애니메이션을 하나의 시퀀스로 이루어진 애셋으로 합칠 수 있음 
  • Animation Montage를 사용하면 Montage 안에서 다양한 이벤트를 발동시킬 수 있음 ( Sound, 탄환 수 등) 

이러한 장점 때문에 Animation Montage를 사용해 보고자 한다. 

 

 

Montage

 

 

위의 Montage 사진을 보면 Attack1, Attack2, Attack3가 Montage 이름이며 이것을 참고하여 특정 조건이 성립할 때 해당 Animation으로 점프하는 기능을 구현해 보고자 한다. 

 

(해당 Montage는 Montage 우클릭을 한 뒤 Create 할 수 있으며, 애니메이션은 Default Group 칸에 Drag를 해서 추가할 수 있다.)

 

Montage 활용 방법

   

현재 Montage에서는

  • Montage Section 1 =  Attack1 애니메이션
  • Montage Section 2 =  Attack2 애니메이션
    구조로 되어 있습니다.

제가 구현하려는 기능은 다음과 같습니다:

Attack1 애니메이션이 재생되는 도중, 특정 프레임 이전에 공격 키 입력(추가 입력)이 들어오면,
Attack1의 남은 Section을 건너뛰고 바로 Attack2 Section으로 점프하여 콤보 공격으로 이어지도록 하는 것
입니다.

 

여기 까지 진행 되었다면, 

Character BluePrint

해당 그림과 같이 Character BluePrint를 만들고 

 

BluePrint에 Asset 적용하기

 

위에 앞서 설명했던 Animation Montage 자료를 다음과 같이 추가 적용하면 된다. 

 

여기 까지가 Animation Montage 이며  이제 Data Asset을 추가해 보고자 한다. 

 

 

Step 2. 

Data Asset를 왜 사용하는가? 

 

Unreal에서는 게임의 로직(Code)과  데이터(설정값)를 분리하여 작성하여 확장성을 쉽게 만들기 위해 Data Asset 기능을 제공해 주었다. 

 

Data Asset을 통해 디자이너와 기획자 또한 C++를 몰라도 수정이 가능하며 재빌드 없이 즉시 수정 가능하여 생산성과 속도에 유리하다. 

Data Asset C++ 클래스 만들기

 

다음과 같이 Data Asset C++ Class를 만들어 데이터의 구조(틀,정의)를 만드는 작업을 진행한다. 

 

 

Data Asset 헤더

 

다음과 같이 구조를 만들면 

 

Data Asset 만드는 방법

 

Data Asset을 블루프린트 애셋으로 만들어 에셋 인스턴스로 만든다. 

 

그래야 비로소 게임에서 접근이 가능하기 때문이다. 

 

따라서 Data Asset 에셋 클래스 생성하여 데이터 구조를 만들고 -> 이것을 기반으로 Blueprint로 Asset을 생성하여 게임에서 접근 가능하도록 만드는 과정이라고 보면 된다. 

 

 

내가 만든 Datat Asset을 BluePrint화 한 것

 

위와 같이 설정한 콤보 데이터 구조(Data Asset) 값들이 에디터에서 표시됩니다.

  • Montage Section Name Prefix
    → 몽타주 섹션 이름의 공통 접두어를 의미합니다.
    (예: 제 몽타주는 Attack1, Attack2, Attack3 으로 구성되어 있으므로 Attack 으로 입력했습니다.)

 

  • ⚠ 주의
    Montage는 섹션 이름을 기준으로 다음 콤보를 찾아가기 때문에
    모든 섹션 이름의 접두어가 정확히 동일해야 합니다.
    (대소문자 불일치도 전부 다른 이름으로 인식함)

.

Combo Data 설명

  • Max Combo Count = 3 → 총 3타 콤보
  • Frame Rate = 60 → 1초 = 60프레임 기준으로 계산
  • Effective Frame Count (Index 0 / 30)
    → Attack1이 재생된 지 30프레임 이후에 입력이 들어오면 Attack2 섹션으로 넘어간다
  • Effective Frame Count (Index 1 / 30)
    → Attack2도 동일한 방식으로 30프레임 이후 다음 콤보 허용
  • Effective Frame Count (Index 2 / -1)
    → 마지막 콤보(Attack3)이므로 더 이상 다음 콤보로 넘어가지 않도록 -1로 설정

 

 

 

Step 3. 

Combo 조건 코드 작성.

 

Combo Action 순서도

 

 

ComboActionBegin() 함수
ComboActionEnd 함수
SetComboCheckTimer() 함수
Combo Check() 함수

 

다음과 같이 구성되어 있으며 실행 흐름은 다음과 같다. 

 

Mouse LB의 입력 ->  ProcessComboCommand() 함수 실행 -> 처음이면 Begin()함수 아니라면 ComboCheck()함수

 

ComboCheck() 함수에서 이전의 SetComboCheckTimer에서 SetTimer를 하면서 Handler가 isVaild가 되어 true이므로 

 

여기서 클릭이 들어온다면 else문에서 HasNextComboCommand가 true가 되어 다음 콤보 어택 애니메이션이 재생된다. 

 

여기서 핵심은

GetWorld() -> GetTimerManager().SetTimer(ComboTimerHandle, this, &AKZCharacterBase::ComboCheck, ComboEffectiveTime, false); 

 

함수로 ComboEffectiveTime  시간이 지난 뒤 딱 한 번 ( = false) 해당 ComboCheck함수를 실행시켜라 라는 의미의 함수로 콤보를 현황을 체크해주면서 다음 행동에 대해 결정해준다는 것이다. 

 

 

 

 

Combo Attack 시연 영상

 

'Unreal Project > Unreal Study' 카테고리의 다른 글

Unreal Collision에 관하여  (0) 2025.10.31
Animation 속도를 구간 별로 다르게 조절하는 방법  (0) 2025.10.29
Unreal Weapon Socket 다루기  (0) 2025.10.27
Character Movement Component에 대하여 알아보  (0) 2025.10.22
Unreal Input Mapping 이란?  (0) 2025.10.17
'Unreal Project/Unreal Study' 카테고리의 다른 글
  • Unreal Collision에 관하여
  • Animation 속도를 구간 별로 다르게 조절하는 방법
  • Unreal Weapon Socket 다루기
  • Character Movement Component에 대하여 알아보
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Unreal Engine
    GameProgramming
    Game Programming
    CodingTest
    blueprint
    hash
    Unreal
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
Combo Attack 구현해보기 및 구조 정리하기