Burst Phase Dash
1. 이동 파라미터를 "행 단위"에서 "타격 단위(per-hit)"로 이관
문제: 한 버스트 안에서 이동 페이즈를 못 나눔
WindBurst는 "솟구쳐 오른 뒤 → 전방으로 다이브" 처럼 이동이 두 페이즈로 나뉨. 그런데 대시 값(거리/시간/상승)이 스킬 행(FSkillCombination)에 하나만 있어 한 세트밖에 못 씀.
해결: 대시 값을 각 타격(FBurstHitInstance)으로 내림
HitSequence의 HitIndex별로 다른 이동을 주도록 per-hit 오버라이드를 추가. HitIndex 0 = 순수 상승, HitIndex 1 = 전방+하강.
// FBurstHitInstance (per-hit 오버라이드)
bool bOverrideDashMotion = false;
float DashForwardDistance = 0.f; // 음수 = 후방
float DashUpwardSpeed = 0.f; // 양수 = 상승 / 음수 = 하강
float DashLaunchDuration = 0.2f; // 발사 속도 = 거리 / 시간
- 주의 ⚠️: 공용 실행 spec(
FAttackExecutionSpec)의 행 단위 대시는 Heavy 등도 쓰므로 유지. 버스트 행(FSkillCombination)에서만 제거 → 실행기는bOverrideDashMotion이면 per-hit, 아니면 spec 폴백으로 이원화.
// DoDashHit — per-hit이면 타격 값, 아니면 spec(행) 값으로 폴백
const bool bPerHitDash = Hit.bOverrideDashMotion;
const float DashDistance = bPerHitDash ? Hit.DashForwardDistance : ActiveSpec.DashDistance;
const float DashUpwardSpeed = bPerHitDash ? Hit.DashUpwardSpeed : ActiveSpec.DashUpwardSpeed;
교훈: 한 액션 안에서 단계마다 값이 달라져야 하면 그 값을 "행(1세트)"이 아니라 "타격 시퀀스(N개)"로 내린다. 기존 공용 경로는 지우지 말고 폴백으로 남겨 다른 공격(Heavy)이 계속 쓰게 한다.
2. 상승 성분엔 bOverrideZ — 수평/수직 합성 발사
전방 속도(수평) + 상승/하강 속도(수직)를 한 벡터로 합성해 발사. 여기서 LaunchCharacter의 Z 덮어쓰기 여부가 핵심.
FVector LaunchVelocity = Forward * (DashDistance / DashLaunchDuration);
LaunchVelocity.Z += DashUpwardSpeed;
// 상승 성분이 있으면 Z도 덮어써야 실제로 떠오름. 순수 전방이면 기존 낙하 Z 보존.
URetrieveKnockbackLibrary::LaunchSelf(Character, LaunchVelocity.GetSafeNormal(),
LaunchVelocity.Size(), /*bOverrideXY=*/true, /*bOverrideZ=*/bHasUpward);
❌ Before — 순수 전방만 가정, Z는 항상 보존
LaunchSelf(Character, Forward, Speed, /*bOverrideXY=*/true, /*bOverrideZ=*/false);
✅ After — 상승이 있을 때만 Z를 덮어써 실제로 떠오르게
- 트러블슈팅:
bOverrideZ=false면 상승 속도를 줘도 기존 수직 속도/중력에 묻혀 안 떠오름. 상승 성분(bHasUpward)이 있을 때만true. - ⚠️ 애님 세팅 전제: 다이브 애님은 Root Motion OFF + Force Root Lock이어야 함. 안 그러면 루트모션이 이동 소유권을 가져가
LaunchCharacter가 팝백됨.
비교 정리
| 구분 | ❌ Before | ✅ After |
|---|---|---|
| 버스트 이동 값 | 행(FSkillCombination) 1세트 |
per-hit(FBurstHitInstance) → 상승/다이브 페이즈 분리 |
| 공용 실행기 대시 | 행 값만 | spec 폴백 유지 (Heavy 등이 씀) |
| 발사 방향 | 전방(수평)만 | 수평 + 수직(상승/하강) 합성 |
| 상승 발사 Z | 항상 보존(bOverrideZ=false) |
상승 성분 있으면 bOverrideZ=true |
핵심 요약
- 한 액션 안에서 단계마다 이동이 달라지면 값을 행(1세트) → 타격 시퀀스(per-hit)로 내린다. 기존 공용 경로는 지우지 말고 폴백으로 남겨 다른 공격이 계속 쓰게.
- 전방+상승을 한 벡터로 합성해 발사하고, 상승 성분이 있을 때만
bOverrideZ=true(아니면 안 떠오름). LaunchCharacter로 띄우는 다이브 애님은 Root Motion OFF / Force Root Lock 필수 — 안 그러면 팝백.
'내일배움캠프_Unreal > TIL' 카테고리의 다른 글
| 내일배움캠프_Unreal/TIL - Day 149 (260703) (0) | 2026.07.03 |
|---|---|
| 내일배움캠프_Unreal/TIL - Day 148 (260702) (0) | 2026.07.02 |
| 내일배움캠프_Unreal/TIL - Day 145 (260629) (0) | 2026.06.29 |
| 내일배움캠프_Unreal/TIL - Day 143 (260625) (0) | 2026.06.25 |
| 내일배움캠프_Unreal/TIL - Day 141 (260623) (0) | 2026.06.23 |