Unreal Engine GAS(Gameplay Ability System) 심화LESSON 15
Instancing Policy와 Ability 객체의 상태 관리
난이도심화
예상 시간125분
선수지식14강의 Ability 생명주기
15강. Instancing Policy와 Ability 객체의 상태 관리
1. 이번 강의에서 해결할 문제
NonInstanced Ability에 현재 Target이나 Task Handle을 멤버로 저장하면 CDO 공유 상태가 되어 플레이어 간 값이 섞일 수 있습니다. PerExecution을 무조건 사용하면 인스턴스 생성과 동시 실행 관리가 늘어납니다.
2. 학습 목표
3. 핵심 개념
| 정책 | 인스턴스 | 적합한 용도 |
|---|---|---|
| NonInstanced | CDO 공유 | 상태 없는 즉시 실행 |
| InstancedPerActor | Spec당 Actor별 인스턴스 | 대부분의 지속·Task Ability |
| InstancedPerExecution | 활성화마다 인스턴스 | 같은 Ability의 동시 실행 |
정확한 정책 지원과 제약은 사용하는 엔진의 UGameplayAbility Header를 확인합니다.
4. 구현
GASGameplayAbility.cpp
UGASGameplayAbility::UGASGameplayAbility()
{
InstancingPolicy =
EGameplayAbilityInstancingPolicy::InstancedPerActor;
NetExecutionPolicy =
EGameplayAbilityNetExecutionPolicy::LocalPredicted;
}
PerActor Ability의 CurrentTargetData는 활성화 시작에 초기화하고 End·Cancel에서 Clear합니다. Ability 전역 설정은 EditDefaultsOnly로 두고 실행 상태와 구분합니다.
상태 정리
void UGASGameplayAbility::ResetActivationState()
{
CachedTargetData.Clear();
ActiveTask = nullptr;
bHitConfirmed = false;
}
5. 코드가 동작하는 이유
PerActor는 Actor마다 인스턴스가 있으므로 Task Delegate와 캐시를 안전하게 보관하면서 반복 활성화 때 재사용할 수 있습니다. 활성화 사이 상태를 반드시 초기화해야 이전 실행 데이터가 다음 실행으로 넘어가지 않습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2Instancing Policy와 Ability 객체의 상태 관리 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
15강. Instancing Policy와 Ability 객체의 상태 관리 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.