내일배움캠프_Unreal/TIL

내일배움캠프_Unreal/TIL - Day 125 (260529)

하임 2026. 5. 29. 20:38

## 오늘 배운 것

### 1. GAS 태그로 행동 상호배타 제어 (코드 결합 없이)
- `ActivationOwnedTags` : 활성 중 상태 태그 부여 (예: State.Player.Dodging)
- `ActivationBlockedTags` : 이 태그 보유 시 발동 차단 (자기 OwnedTag를 넣으면 재발동 방지)
- `CancelAbilitiesWithTag` : 발동 시 해당 태그 어빌리티를 취소 (Dash가 공격/가드 취소)
- `BlockAbilitiesWithTag` : 활성 중 해당 어빌리티 발동 차단 (가드 중 공격 차단)
→ 매트릭스를 태그 설정만으로 구현, 어빌리티 간 직접 참조 0 (단방향).

### 2. WaitInputRelease가 안 먹던 이유 (UE 5.7)
- `UGameplayAbility::InputReleased`는 **빈 가상함수 {}** → AbilitySpecInputReleased만으론 안 됨
- `ProcessAbilityInput`의 release 루프에 **InvokeReplicatedEvent(InputReleased) 직접 호출**해야 태스크 델리게이트가 발화
  (press 경로엔 있었는데 release 경로엔 빠져 있었음 = '가드 안 풀림' 버그)

### 3. "어빌리티 활성됐는데 모션이 없다" = 거의 몽타주 문제
- **스켈레톤 불일치**: 몽타주 스켈레톤 ≠ 메시 AnimInstance 스켈레톤이면 Montage_Play가 조용히 실패
  (태그/어빌리티는 정상 → showdebug엔 보이지만 화면엔 무동작)
- 해결: 캐릭터 실제 스켈레톤(SK_Mannequin)으로 **리타겟** 후 몽타주 생성
- **슬롯**도 AnimBP가 출력하는 슬롯(FullBody)과 일치해야 함
- 슬롯은 스켈레톤에 등록된 것만 사용 가능 → 외부 스켈레톤 몽타주에 FullBody 지정 시 **T포즈**(슬롯 미등록 = 트랙 orphan)

### 4. 가장 자주 한 실수: "능력을 AbilitySet에 등록 안 함"
- 입력/태그가 맞아도 **AbilitySet에 Grant 안 하면 절대 발동 안 됨**
- Dash·Death 둘 다 이 함정에 걸림 (Death는 InputTag 불필요 — TryActivateAbilitiesByTag로 활성)

### 5. 홀드 유지 = 몽타주 루프
- 1회성 몽타주는 한 사이클 후 블렌드아웃 → 어빌리티는 살아있어도 자세 풀림
- 섹션 self-loop 또는 OnBlendOut 재생으로 루프

### 6. 루트모션은 캡슐로 전달돼야 한다
- AnimBP **Root Motion Mode = Root Motion from Montages Only**
- 리타겟 시 루트모션이 root 본에 살아있어야(pelvis로 새거나 소실되면 메시만 이동→복귀)
- LocalPredicted + 몽타주 루트모션은 네트워크에서 예측 보정으로 되돌아갈 수 있음 → 추후 URootMotionSource

### 7. 데미지 파이프라인
- 가드 감쇠/브레이크는 PostGameplayEffectExecute(IncomingDamage)에서 처리
- `GetAllAssetTags()`로 Attack.Type.* 판정 (동적 태그 + GE 자산 태그 모두 포착)
- `SetNumericAttributeBase`(직접 HP 세팅)는 **PostGameplayEffectExecute를 안 거침** → 가드 테스트는 GE 경로로