1) 개념 (What & Why)
- FGameplayAbilityTargetData는 언리얼 엔진의 **Gameplay Ability System (GAS)**에서 능력이 적용될 대상(들), 위치, 히트결과 등을 표현하는 구조체입니다.
- “어떤 대상에게, 어떤 방식으로 능력을 적용할지”를 한데 모아 전달하기 위한 용도로 쓰입니다.
- TargetData는 C++에서 직접 생성(예: new FGameplayAbilityTargetData_SingleTargetHit)하거나, 블루프린트 노드(예: Ability Target Data from Actor 등)를 통해 얻을 수 있습니다.
2) 기본 사용법
- 타겟 데이터 생성
- 상황별로 알맞은 하위 구조체를 생성합니다. 예:
- FGameplayAbilityTargetData_SingleTargetHit → 단일 히트 결과를 다룸
- FGameplayAbilityTargetData_ActorArray → 여러 액터 목록을 한꺼번에 지정
- FGameplayAbilityTargetData_LocationInfo → 특정 위치(혹은 시작·종료 지점) 정보
- 상황별로 알맞은 하위 구조체를 생성합니다. 예:
- TargetDataHandle 구성
- FGameplayAbilityTargetDataHandle에 생성한 TargetData를 Add(...)로 추가합니다.
- 여러 TargetData를 하나의 Handle에 넣을 수도 있습니다.
- 능력/효과 적용
- 완성된 FGameplayAbilityTargetDataHandle을 ApplyGameplayEffectToTarget, CommitAbility 등에 넘겨주어 게임플레이 이펙트나 능력 로직에서 활용합니다.
- 내부적으로 Handle에 담긴 모든 대상, 히트 결과 등을 참조해 효과를 적용합니다.
3) AOE(광역) 스킬 활용 예시
- 예시: SphereOverlap 또는 Trace를 통해 여러 대상을 찾은 뒤, 각 HitResult를 FGameplayAbilityTargetData_SingleTargetHit 구조체로 감싸 TargetDataHandle에 쌓습니다.
- 마지막에 ApplyGameplayEffectToTarget(…, TargetDataHandle, …) 식으로 호출 → 핸들 안의 모든 대상에게 동시에 효과 부여.
- 혹은 여러 액터를 단순히 FGameplayAbilityTargetData_ActorArray 한 개에 추가한 뒤 한꺼번에 넘겨도 광역 처리가 가능합니다.
4) 특정 대상(단일) 선택 예시
- 단일 타겟(조준, 클릭 등)을 히트로 구했을 경우, FGameplayAbilityTargetData_SingleTargetHit에 해당 히트결과를 넣습니다.
- 또는 이미 특정 Actor를 알고 있다면, FGameplayAbilityTargetData_ActorArray를 만들어 ActorArray.Add(TargetActor)로 추가해도 동일 효과.
- 생성된 TargetDataHandle을 능력 실행 함수나 Apply… 계열 함수에 전달하면, 지정된 대상에게만 효과가 적용됩니다.
5) 추가 팁 (Etc.)
- 내장 AbilityTask(예: UAbilityTask_WaitTargetData)와 AGameplayAbilityTargetActor 클래스를 조합하면, 블루프린트 상에서 손쉽게 TargetData를 얻을 수 있습니다. (Confirm/Cancel 입력도 자동 처리)
- 여러 개의 TargetData 항목을 하나의 Handle에 담을 수 있으므로, 대량 대상 처리나 세밀한 충돌 결과를 다룰 때도 유용합니다.
- 보안/검증: TargetData는 주로 클라이언트가 서버에 전송하는 형식이므로, 서버 측 능력 로직에서 재검증(대상이 실제로 유효한지, 거리가 맞는지 등)을 하는 것이 좋습니다.
- 커스텀 확장: 기본 ActorArray/SingleTargetHit 외에, NetSerialize 등을 구현해 커스텀 구조체를 만들면 게임 특유의 타겟 데이터를 담을 수 있습니다.
최종 한줄 정리
FGameplayAbilityTargetData는 GAS에서 '누구/어디'에 능력을 적용할지 표현하는 핵심 구조체로,
AOE·단일 대상·특정 위치 등 다양한 시나리오를 유연하게 처리하도록 돕는다.
위 내용을 통해 FGameplayAbilityTargetData를 어떻게 생성·활용하고, AOE나 단일 대상 같은 상황에서 간단히 적용할 수 있는지 이해하셨길 바랍니다. 능력 구현 시 TargetData를 잘 활용하면 여러 대상 동시 처리나 특정 트레이스 결과 반영을 효율적으로 할 수 있습니다.
'개발일지(Unreal5) > GAS[Gameplay Ability System]' 카테고리의 다른 글
| AGameplayAbilityWorldReticle (0) | 2025.03.01 |
|---|---|
| Unreal Engine GAS - Gameplay Cue (0) | 2025.02.14 |
| 4.5 게임플레이 이펙트 (0) | 2024.02.21 |
| 4.2 Gameplay Tags (0) | 2024.02.20 |
| #1. 어빌리티 컴포넌트 (0) | 2024.02.20 |