블랜드 스페이스

DevBison·2025년 9월 2일

UE5 Warrior 콤보 조건부 처리 & 블렌드 스페이스 이동 구현

  1. 콤보가 되었을 때만 노티파이를 호출하는 공격 시스템
  2. 블렌드 스페이스를 이용해 자연스러운 이동 애니메이션 구현

1) 콤보 조건부 노티파이

  • PlayerDefaultAnimInstance.h에 변수 추가
    bool mAttackEnable = false; // 공격 중인지
    bool mAttackCombo  = false; // 콤보 가능 여부

1-1) 기본 동작

  • 이 상태에서는 공격 1회만 가능하다.
  • PlayerDefaultAnimInstance.cpp에도 초기값을 false로 세팅한다.

1-2) 콤보 활성화 로직

콤보를 허용하면

  • else if콤보 공격 처리:

    • mAttackSectionIndex 증가
    • 배열 개수에 맞게 모듈러 연산
    • 다음 섹션으로 Jump
    • mAttackCombo = false;

1-3) 몽타주 종료 시 처리

몽타주 종료 시 mAttackCombo = false;

컴파일 후 실행 → 정상적으로 자동 콤보 동작 확인

  • 모션 갯수가 달라도 배열 크기에 맞춰 자동 반복 가능

2) 이동 중 공격 개선 방안

현재 문제: 이동하면서 공격 모션이 부자연스럽다.
해결 방법은 두 가지:

  1. 공격 시 이동 중지
  2. 하체는 이동, 상체는 공격 (Layered Blend Per Bone)

3) 블렌드 스페이스로 자연스러운 이동 구현

현재는 Run 애니메이션만 사용해서 모든 방향이 앞으로 달리는 모션만 나온다.
→ Kwang 모션에는 방향별 모션이 있으니 블렌드 스페이스로 묶어주자.


3-1) 블렌드 스페이스 생성

  • BlendSpace1D: 축 1개
  • BlendSpace: 축 2개

BSWarriorIdleAndRun 블렌드 스페이스 생성 (스켈레톤 지정)


3-2) 블렌드 스페이스 세팅

에디터 화면

축 설정 예시

  • 가로축: Dir, -180.0 ~ 180.0, 그리드 4
  • 세로축: Speed, 0 ~ 600(캐릭터 최대 이동속도), 그리드 1

샘플 이름표시 가능

Ctrl 누른 상태에서 아이콘 이동 → 블렌딩 미리보기 가능


3-3) 애님 블루프린트 연결

AnimBlueprint → Locomotion 연결 해제
새 스테이트 머신 생성 → Ground Locomotion 연결

Locomotion1에 Entry → IdleAndRun 스테이트 추가

IdleAndRun 스테이트에 BSWarriorIdleAndRun 배치


3-4) C++ 변수 연동

AnimInstance에 변수 추가

UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
float MoveSpeed;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
float Dir;

PlayerCharacter.cpp → MoveKey 함수에서 방향값 계산

AnimInstance에 SetDir 함수 선언 및 정의


3-5) 애님 블루프린트 변수 세팅

컴파일 후 변수 연결 가능

변수 세팅 예시

정상 동작 확인


4) 마무리

  • 공격: mAttackEnable / mAttackCombo 플래그로 콤보 노티파이를 조건부 호출

  • 이동: 블렌드 스페이스로 방향+속도 기반 자연스러운 러닝 구현

  • 개선 포인트

    1. 공격 중 이동은 상체/하체 분리 블렌딩으로 자연스럽게
    2. 콤보 입력은 노티파이 윈도우(AnimNotifyState)로 정확한 입력 타이밍 제어 가능

profile
응애 개발자

0개의 댓글