언리얼 엔진
Unreal Engine - RPG 전투 상태 관리 시스템 설계 및 초기 구현
로안님
2025. 5. 8. 21:50
🎮 UE5 액션 RPG 전투 상태 관리 시스템 설계 및 초기 구현
🧩 개요
이번 작업은 언리얼 엔진 5 기반의 액션 RPG 프로젝트에서 전투 시스템의 '상태 관리' 구조를 처음으로 설계하고 테스트한 기록입니다. 다크소울류 전투 흐름을 목표로 하며, enum을 기반으로 한 전투 상태 분리 및 애니메이션 타이밍과의 연동을 중심으로 구성하였습니다.
🎯 설계 목표
- 상태 기반 전투 흐름 구현
- 캐릭터의 전투 행동을 명확한 상태로 구분
- 애니메이션 타이밍과 전투 로직을 분리하여 유연한 확장 가능 구조 마련
1️⃣ 전투 상태 시스템 구축
🔸 ECharacterCombatState 열거형 정의
전투 중 캐릭터의 상태를 명확히 구분하기 위해 enum class를 도입했습니다.
UENUM(BlueprintType)
enum class ECharacterCombatState : uint8
{
Idle UMETA(DisplayName = "Idle"),
Attacking UMETA(DisplayName = "Attacking"),
ComboWindow UMETA(DisplayName = "Combo Window"),
Parrying UMETA(DisplayName = "Parrying"),
Dodging UMETA(DisplayName = "Dodging"),
HitReact UMETA(DisplayName = "Hit React"),
Dead UMETA(DisplayName = "Dead")
};
🔸 캐릭터 클래스 내 상태 변수 및 제어 함수
UPROPERTY(BlueprintReadWrite)
ECharacterCombatState CurrentCombatState;
UFUNCTION(BlueprintCallable)
void SetCombatState(ECharacterCombatState NewState);
- 상태 변경은 전투 중 특정 애니메이션 타이밍에 맞춰 진행됩니다.
2️⃣ AnimNotify를 활용한 상태 전환 제어
🔹 단일 프레임 Notify 클래스
애니메이션 타이밍의 특정 순간에 상태를 바꾸기 위해 커스텀 UAnimNotify 클래스를 작성했습니다.
클래스 이름 기능
Notify_AttackStart | 상태 → Attacking |
Notify_AttackEnd | 상태 → Idle |
Notify_ComboEnable | 상태 → ComboWindow |
Notify_HitCheck | 타격 판정 트리거 |
🔹 시간 기반 NotifyState 클래스
지속 시간 동안 상태 제어가 필요한 경우 UAnimNotifyState를 활용했습니다.
클래스 이름 기능
NotifyState_ParryWindow | 패링 가능 타이밍 (bIsParrying on/off) |
NotifyState_Invincibility | 무적 타이밍 (bIsInvincible on/off) |
3️⃣ 애니메이션 몽타주 구성
전투 애니메이션 실행 시 상태 전환 타이밍을 지정하기 위해 테스트용 몽타주 AM_Test를 제작했습니다.
- Notify_AttackStart → 초반
- Notify_ComboEnable → 중간
- Notify_AttackEnd → 후반
- Notify_HitCheck → 적중 타이밍
UAnimMontage* AttackMontage;
void PlayAttackMontage();
- 상태 전환은 Notify 시점에서 SetCombatState()를 호출하는 구조로 연결됩니다.
4️⃣ 애니메이션 블루프린트에서의 연결
🔸 문제 및 해결
- 몽타주 실행 시 애니메이션이 출력되지 않는 문제가 있었으며,
- AnimGraph 내에 Slot 노드를 추가하고 이름을 DefaultSlot으로 설정하여 해결했습니다.
- 노드가 적절히 연결되지 않으면 몽타주가 출력되지 않으므로 필수 설정입니다.
✅ 현재 구현 결과 요약
시스템 요소 상태
전투 상태 열거형 / 변수 / 함수 | ✅ 설계 및 적용 완료 |
AnimNotify / NotifyState 클래스 | ✅ 초기 구현 완료 |
몽타주 제작 및 노티파이 배치 | ✅ 정상 작동 확인 |
애니메이션 블루프린트 Slot 설정 | ✅ 문제 해결 완료 |
전체 테스트 결과 | 🎉 정상 작동 및 상태 전환 확인 |
이번 작업은 캐릭터의 전투 상태를 명확히 구분할 수 있는 기반 구조를 마련한 데 의의가 있습니다. 앞으로 이 상태 시스템을 기반으로 연계 공격, 리액션, 방어 시스템 등을 확장해 나갈 예정입니다.