오늘 작업한 내용
오늘은 유닛 선택 정보 오류를 확인하고, 공격 피해가 애니메이션과 정확히 일치하도록 Anim Notify 기반 공격 시스템을 구성했다. 추가로 공격 중 이동 명령 처리와 사망 애니메이션 개선 작업을 시작했다.
1. 유닛 선택 정보가 출력되지 않는 문제 확인
BP_TestUnit의 GetSelectableInfo에 내용이 없는 재정의 함수가 생성되어 있었다.
이 빈 재정의가 부모 C++ 함수인 AUnitBase::GetSelectableInfo_Implementation()의 실행을 막으면서 다음 정보가 기본값으로 반환되고 있었다.
- 유닛 이름
- 체력
- 공격력
- 이동속도
- 유닛 타입
- 초상화 애니메이션
빈 재정의를 제거하여 부모 C++의 선택 정보 처리 함수를 사용하도록 정리했다.
2. 공격 피해를 Anim Notify 방식으로 변경
기존에는 공격 함수가 실행되는 시점에 피해가 즉시 적용되어, 애니메이션의 실제 타격 순간과 피해 발생 시점이 일치하지 않았다.
이를 개선하기 위해 다음처럼 역할을 분리했다.
PerformAttack
→ 공격 대상 저장
→ 공격 몽타주 재생
→ 타격 프레임에서 Anim Notify 실행
→ HandleAttackHit 호출
→ 실제 피해 적용
PerformAttack() 내부의 기존 즉시 피해 계산을 분리하고, HandleAttackHit()와 ApplyAttackDamage()를 통해 Notify 시점에 피해가 적용되도록 구성했다.
3. 공격용 Anim Notify 제작
BP_AN_AttackHit을 생성하고 Received Notify에서 공격 중인 UnitBase를 찾아 HandleAttackHit()을 호출하도록 연결했다.
연결 구조는 다음과 같다.

Received Notify
→ Mesh Comp
→ Get Owner
→ Cast To UnitBase
→ Handle Attack Hit
→ Return True
DamageRatio 변수를 Handle Attack Hit의 입력으로 연결하여 몽타주마다 피해 비율을 다르게 설정할 수 있도록 만들었다.
4. 일반 공격과 2연타 공격 구분
휴먼 공격은 한 번 타격하고, 여우 공격은 한 번의 공격 애니메이션에서 두 번 타격한다. 같은 BP_AN_AttackHit을 사용하되 Notify 개수와 DamageRatio 값으로 공격 방식을 구분했다.
휴먼 일반 공격
- Notify 개수: 1개
- Damage Ratio: 1.0
- Attack Hit Count: 1

여우 2연타 공격
- Notify 개수: 2개
- 첫 번째 Damage Ratio: 0.5
- 두 번째 Damage Ratio: 0.5
- Attack Hit Count: 2


예를 들어 데이터 테이블 공격력이 10이면 여우는 다음처럼 피해를 적용한다.
1타: 10 × 0.5 = 5
2타: 10 × 0.5 = 5
총 피해: 10
이를 통해 2연타 애니메이션을 유지하면서도 한 공격 주기의 총 피해가 과도하게 증가하지 않도록 했다.
5. 적 유닛 체력이 1로 시작하는 문제 확인
적 스포너에 설정된 Row Name은 Infantry였지만, 현재 DT_Units에는 Infantry 행이 존재하지 않았다.
데이터 테이블 조회에 실패하면 HealthComponent가 정상적으로 초기화되지 않아 기본값이 남는다.
Current Health = 1
Max Health = 100
따라서 실제로 체력이 1로 설계된 것이 아니라, 데이터 테이블 행 이름 불일치로 초기화가 실패한 문제였다.
현재 연결 가능한 주요 행은 다음과 같다.
Brawler → BP_TestUnit
Berserker → BP_TestUnit2
적 스포너의 Unit Row Name을 실제 유닛 클래스와 일치하는 데이터 행으로 변경해야 한다.
6. 공격 중 이동 명령 반응 개선
공격 도중 뒤쪽을 클릭해도 유닛이 바로 이동하지 않는 문제가 있었다.
현재 일반 우클릭이 AttackMove로 처리되기 때문에 공격을 취소한 직후 같은 적을 다시 탐색하는 것이 원인이었다. 기존의 “이동 중 적을 발견하면 자동 공격” 기능을 유지하기 위해 일반 Move로 변경하지 않고 짧은 재탐색 유예시간을 추가했다.
공격 중 이동 명령
→ 현재 공격 대상 해제
→ 공격 몽타주 중단
→ PendingAttackTarget 초기화
→ 0.3초간 목적지 이동 우선
→ 유예시간 종료 후 적 자동 탐색 재개
추가된 주요 처리:
- CommandAttackMoveGraceRemaining
- 공격 이동 명령 시 0.3초 설정
- Tick에서 유예시간 감소
- 유예시간 동안 목적지 이동 우선
- 취소된 공격의 늦은 Notify 피해 방지
7. 사망 모션 개선 작업 시작
사망 애니메이션에 쓰러진 뒤 다시 일어나는 구간이 포함되어 있어, 완전히 누운 순간 애니메이션을 정지하기 위한 BP_AN_DeathPose를 생성했다.

현재 생성된 Notify:
- BP_AN_AttackHit: 실제 타격 시점에 피해 적용
- BP_AN_DeathPose: 완전히 누운 사망 자세에서 애니메이션 정지 예정
사망 Notify는 에셋 생성까지만 완료했으며 C++ 연결과 사망 몽타주 배치는 다음 작업으로 남겨두었다.
다음 작업
- UnitBase에 HandleDeathPose() 추가
- BP_AN_DeathPose의 Received Notify 연결
- 휴먼과 여우 사망 몽타주에서 완전히 누운 프레임에 Notify 배치
- 사망 자세가 고정되고 다시 일어나지 않는지 확인
- 공격 Notify 피해량과 2연타 횟수 실전 검증
- 적 스포너의 Infantry Row Name 수정 및 체력 초기화 확인
'StrikForge 프로젝트 > 작업일지' 카테고리의 다른 글
| UE5 RTS 유닛 자동 전투 개선 및 주변 아군 타겟 공유 설계 (0) | 2026.09.02 |
|---|---|
| RTS 선택 UI에 3D 초상화 연동 (0) | 2026.08.30 |
| [Unreal Engine 5] Scene Capture와 Render Target을 활용한 3D 포트레이트 구현 (0) | 2026.08.26 |
| [Unreal Engine 5] TeamIndex 기반 자원 관리와 3D 유닛 프리뷰 구현 (0) | 2026.08.24 |
| StrikForge 11일차 - 오늘 한 일 (0) | 2026.08.21 |