Unreal Engine GAS(Gameplay Ability System) 심화LESSON 36
예측 실패, 서버 보정, 중복 표현 디버깅
난이도심화
예상 시간210분
선수지식35강의 실행 정책
36강. 예측 실패, 서버 보정, 중복 표현 디버깅
1. 이번 강의에서 해결할 문제
예측 버그는 정상 네트워크에서 숨고 지연·손실 때만 나타납니다. 대표 증상은 Cost가 잠깐 줄었다 돌아옴, Montage 두 번 재생, 투사체 잔상, 서버 거절 뒤 입력 잠금 지속입니다. 감으로 고치지 말고 하나의 활성화를 끝까지 추적해야 합니다.
2. 학습 목표
3. 핵심 개념
예측 오류는 입력, Ability 활성화, Commit, TargetData, Effect, Cue 단계를 나눠 관찰합니다. SpecHandle·PredictionKey·Avatar·NetRole·로컬 제어 여부·서버 시간을 같은 로그 형식으로 남기면 클라이언트의 한 시도가 서버의 어떤 결과와 연결되는지 확인할 수 있습니다.
4. 구현
예측 추적 로그 도우미
void UGASDebugLibrary::LogAbilityPoint(
const UGameplayAbility* Ability, const TCHAR* Point)
{
const FGameplayAbilityActorInfo* Info = Ability->GetCurrentActorInfo();
const FGameplayAbilityActivationInfo InfoCopy = Ability->GetCurrentActivationInfo();
UE_LOG(LogGASCourse, Log,
TEXT("[%s] Avatar=%s Role=%d Local=%d Key=%s"),
Point,
*GetNameSafe(Info ? Info->AvatarActor.Get() : nullptr),
Info && Info->AvatarActor.IsValid()
? static_cast<int32>(Info->AvatarActor->GetLocalRole()) : -1,
Info ? Info->IsLocallyControlled() : 0,
*InfoCopy.GetActivationPredictionKey().ToString());
}
서버에서 CanActivateAbility 또는 Target 검증을 의도적으로 실패시키고 예상 롤백을 표로 만듭니다. Montage는 PlayMontageAndWait 경로를 하나로, Cue는 예측과 복제 시 같은 효과를 재사용하도록 구성합니다. 수동 Server RPC 흐름은 Server RPC 강의와 비교합니다.
5. 코드가 동작하는 이유
상관관계 로그는 두 창의 사건을 시간만으로 추정하지 않게 합니다. 실패 조건을 고정하면 정상·지연·손실에서 같은 순서 차이를 비교할 수 있고, 어느 단계가 두 번 실행됐거나 정리되지 않았는지 좁힐 수 있습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2예측 실패, 서버 보정, 중복 표현 디버깅 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
36강. 예측 실패, 서버 보정, 중복 표현 디버깅 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.