Post

TPS 개발 : 몽타주 기준 어빌리티 종료 — Reload / Dash / Fire

SetByCaller 태그 규칙과 몽타주 종료 델리게이트 기준으로 어빌리티 종료 처리

TPS 개발 : 몽타주 기준 어빌리티 종료 — Reload / Dash / Fire

TIL - 몽타주 기준 어빌리티 종료


1. SetByCaller의 태그 필터

SetByCaller는 자체 태그 필터가 적용되어 있다.

Data.* 형태의 태그로 넣어줘야 경고 문구가 뜨지 않는다.

1
2
3
// 권장 - Data. 접두사
SpecHandle.Data->SetSetByCallerMagnitude(
    FGameplayTag::RequestGameplayTag("Data.Damage"), DamageValue);

필수는 아니다. Data. 접두사를 안 써도 동작은 하지만 경고가 출력된다.


2. 몽타주 종료 기준으로 어빌리티 끝내기

세 어빌리티 모두 몽타주 재생이 끝나는 시점을 기준으로 종료되어야 한다.

공통 구조: ~~~~

1
2
3
4
GA Activate
  └─ PlayMontageAndWait (몽타주 재생)
       └─ OnMontageEnded / OnBlendOut 델리게이트
            └─ EndAbility + StateTag 정리

각 몽타주의 길이는 어빌리티 특성에 맞는 값에 기반한다.

어빌리티몽타주 길이 기준추가 처리
Reload장전 속도몽타주 종료 델리게이트에서 EndAbility, StateTag 반영
Dash대시 DurationEndAbility, StateTag 반영 + 대시 스택은 별도 GE로 구분
FireFire Speed탄 소모는 GE의 SetByCaller로 반영, 0 체크는 cpp

Reload

  • 몽타주 = 장전 속도 기반
  • 몽타주 종료 델리게이트 기준으로 EndAbility 호출, StateTag 정리

Dash

  • 몽타주 = 대시 Duration 기반
  • 몽타주 종료 델리게이트 기준 EndAbility, StateTag 반영
  • 대시 스택은 GE로 따로 구분해서 관리

연속 대시

연속 대시가 필요해서, 델리게이트를 이용해 몽타주가 끝나기 전에 대시를 하면 연속 대시가 가능하도록 변경했다.

태그를 이용해 Dash로 Dash를 캔슬한 뒤 다시 Dash를 재사용하도록 유도했다.

1
2
3
4
Dash 실행 중 (State.Dash)
  └─ 다시 Dash 입력
       └─ 태그로 기존 Dash 캔슬
            └─ Dash 재활성화 → 연속 대시

Fire

  • 몽타주 = Fire Speed 기반
  • 탄 소모는 GE의 SetByCaller로 반영
  • 탄 소모 체크는 cpp에서 0 > CurAmmo 로 직접 체크

정리

  • SetByCallerData.* 태그로 넣어야 경고가 없음 (필수 아님)
  • Reload / Dash / Fire 모두 몽타주 종료 델리게이트 기준으로 EndAbility + StateTag 정리
  • 대시 스택은 GE로 분리, 연속 대시는 태그로 Dash→Dash 캔슬 후 재사용
  • 탄 소모는 GE SetByCaller + cpp 잔탄 체크
This post is licensed under CC BY 4.0 by the author.