내일배움캠프_Unreal/TIL

내일배움캠프_Unreal/TIL - Day 127 (260602)

하임 2026. 6. 2. 21:15

Heavy Attack 구현 중

1. Base/자식 위임(Template Method) 패턴
Base가 공통(게이지 소모·차단/취소 태그·몽타주·Cue)을 전담하고, 자식은 ExecuteHeavyEffect()만 override해 고유 효과를 구현. 공통 로직 중복 0, 자식은 효과에만 집중.

2. CommitAbility 호출 순서가 곧 비용 안전성
소모를 CommitAbility 앞에 두도록 재배치. 슬롯이 없어 발동 실패할 때 Commit이 호출되지 않으므로, 향후 Cooldown/Cost GE를 붙여도 "실패했는데 쿨다운 도는" 사고가 원천 차단됨.

3. PURE_VIRTUAL의 이중 함정
순수 가상은 ① 런타임 크래시를 내고, ② 폴백을 빈 본문으로 두면 슬롯만 소모하고 EndAbility를 안 해 어빌리티가 안 끝나고 상태 태그가 영구 잔류(soft-lock). → ensureMsgf 경고 + EndAbility까지 호출하는 방어적 폴백으로 교체.

4. 새 시스템보다 기존 인프라 재사용
"모션 끝까지 이동 금지"를 DT 등록이나 수동 추적으로 풀 필요 없이, 기존 Animation.Lock.Movement 루즈태그(→ CharacterMovementComponent.GetMaxSpeed=0)를 GA의 ActivationOwnedTags에 얹으면 GA 수명(=몽타주)에 자동으로 묶임. 단, Wind는 이동기라 제외(잠그면 Launch가 죽음) — 일괄 적용의 함정도 배움.

5. 메커니즘 중복은 과감히 재설계
Water "자기 방어막"이 기존 Guard와 역할이 사실상 중복임을 인지 → 방어막을 버리고 주변 AoE 피해 + Cold(빙결) 부여라는 공격/제어형으로 재설계. 시스템이 서로 겹치면 하나는 정체성을 바꿔야 함.

6. git-lfs lockable = 읽기전용이라는 환경 함정
.gitattributes의 *.uasset lock(lockable) 때문에 내가 잠그지 않은 uasset은 읽기전용 → 삭제가 access-denied로 실패 → 에디터 재시작 시 파일이 "부활". 경로 불일치가 아니라 삭제가 조용히 실패한 것이 원인. 해결은 SCC를 끄는 게(팀룰 위반) 아니라, 남길 건 lock 잡고 커밋 / 버릴 건 읽기전용 해제 후 삭제.

7. TEAMRULE 정합성 점검을 습관화
UFUNCTION은 BP 노출/델리게이트 바인딩에 필수(AddDynamic 함수엔 반드시), BlueprintPure 게터엔 형제와 동일하게 부착. 매직넘버는 EditDefaultsOnly UPROPERTY로 노출(인라인 0.5f 리터럴은 위반), 태그는 네이티브 핸들, LogTemp/디버그 로그는 커밋 전 제거.