Unreal Engine GAS(Gameplay Ability System) 심화LESSON 42
자주 발생하는 GAS 실패와 수리 순서
난이도심화
예상 시간185분
선수지식41강의 GAS 디버깅 도구
42강. 자주 발생하는 GAS 실패와 수리 순서
1. 이번 강의에서 해결할 문제
GAS 오류는 한 설정 실수가 여러 증상으로 번집니다. 예를 들어 ActorInfo 누락은 입력, TargetData, 애니메이션, RPC 실패처럼 보일 수 있습니다. 증상별 임시 분기를 추가하지 말고 가장 앞선 불변식부터 고칩니다.
2. 학습 목표
3. 핵심 개념
수리 순서는 모듈/플러그인 활성화 → ASC 생성·복제 → Owner/Avatar 초기화 → 서버 Ability 부여 → 입력 Tag → 활성화 조건 → Commit → TargetData → Effect/Attribute → Cue입니다. 앞 단계가 실패하면 뒤 단계 코드를 바꾸지 않습니다.
4. 구현
| 증상 | 먼저 확인 | 흔한 원인 |
|---|---|---|
| Ability 목록이 비어 있음 | 서버 부여 로그 | 클라이언트 부여, AbilitySet 누락 |
| 입력은 오지만 활성화 안 됨 | ActorInfo·Blocked Tag | 초기화 시점, Tag 불일치 |
| Server RPC/TargetData 실패 | Owner 연결 | ASC 소유권 불일치 |
| 체력 UI만 갱신 안 됨 | RepNotify·Delegate | DOREPLIFETIME_CONDITION_NOTIFY 누락 |
| Cost가 두 번 차감 | Commit 호출 횟수 | BP와 C++ 양쪽 Commit |
| Cue가 안 보임 | Effect 적용·Cue 경로 | Tag/스캔 경로/전용 서버 표현 |
중복 초기화 방어 예시
void AGASCombatCharacter::InitializeAbilityActorInfo()
{
AGASPlayerState* PS = GetPlayerState<AGASPlayerState>();
if (!PS) return;
UAbilitySystemComponent* ASC = PS->GetAbilitySystemComponent();
if (ASC->GetAvatarActor() != this)
{
ASC->InitAbilityActorInfo(PS, this);
}
}
방어 조건은 호출 횟수를 숨기는 용도가 아닙니다. PossessedBy와 OnRep_PlayerState가 각각 어느 인스턴스에서 호출되는지 로그로 확인하고, Ability 부여는 Authority와 별도 bStartupAbilitiesGranted 정책으로 제어합니다.
5. 코드가 동작하는 이유
불변식 순서로 점검하면 하나의 초기화 오류를 여러 기능에서 반복 수정하지 않습니다. 수정 뒤 정상·지연·사망·부활을 다시 시험해 국소 패치가 다른 경로를 깨지 않았는지 확인할 수 있습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2자주 발생하는 GAS 실패와 수리 순서 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
42강. 자주 발생하는 GAS 실패와 수리 순서 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.