Unreal Engine GAS(Gameplay Ability System) 심화LESSON 11
Attribute 복제와 UI 갱신 Delegate
난이도심화
예상 시간155분
선수지식10강의 서버 권한 Health 흐름
11강. Attribute 복제와 UI 갱신 Delegate
1. 이번 강의에서 해결할 문제
서버 Health는 줄지만 Client UI가 갱신되지 않거나, 예측한 Mana가 서버 값으로 보정될 때 HUD가 두 번 튀는 문제가 생깁니다. UPROPERTY 복제 선언, Lifetime 등록, RepNotify 매크로와 ASC Delegate를 모두 연결해야 합니다.
2. 학습 목표
3. 핵심 개념
일반 OnRep에서 UI를 직접 호출하지 않습니다. GAMEPLAYATTRIBUTE_REPNOTIFY가 ASC의 Attribute Change Delegate에 복제 변화를 전달하고 UI Adapter가 이를 구독합니다. 예측 가능한 Attribute는 REPNOTIFY_Always로 서버 확인 값도 처리합니다.
4. 구현
GASAttributeSet.cpp
#include "Net/UnrealNetwork.h"
void UGASAttributeSet::GetLifetimeReplicatedProps(
TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME_CONDITION_NOTIFY(
UGASAttributeSet, Health, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(
UGASAttributeSet, MaxHealth, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(
UGASAttributeSet, Mana, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(
UGASAttributeSet, MaxMana, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(
UGASAttributeSet, AttackPower, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(
UGASAttributeSet, Defense, COND_None, REPNOTIFY_Always);
}
void UGASAttributeSet::OnRep_Health(
const FGameplayAttributeData& OldValue) const
{
GAMEPLAYATTRIBUTE_REPNOTIFY(UGASAttributeSet, Health, OldValue);
}
HUD Adapter는 ASC 초기화 뒤 바인딩합니다.
CombatHUDPresenter.cpp
HealthChangedHandle = ASC->GetGameplayAttributeValueChangeDelegate(
UGASAttributeSet::GetHealthAttribute()).AddUObject(
this, &UCombatHUDPresenter::HandleHealthChanged);
StunChangedHandle = ASC->RegisterGameplayTagEvent(
TAG_State_Stunned,
EGameplayTagEventType::NewOrRemoved).AddUObject(
this, &UCombatHUDPresenter::HandleStunChanged);
Presenter 종료 또는 Avatar 변경 시 두 Handle을 해당 Delegate에서 제거합니다. Widget은 Presenter가 전달한 정규화 값과 상태 텍스트만 표시합니다.
5. 코드가 동작하는 이유
AttributeSet 복제가 GAS Delegate 경로로 합류하므로 로컬 예측 변화와 서버 복제 변화를 UI가 한 구독 방식으로 처리합니다. Tag Event는 Count가 0↔1로 바뀌는 시점만 관찰해 매 Tick Query하지 않습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2Attribute 복제와 UI 갱신 Delegate 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
11강. Attribute 복제와 UI 갱신 Delegate 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.