AttributeSet 설계와 Attribute의 역할
7강. AttributeSet 설계와 Attribute의 역할
1. 이번 강의에서 해결할 문제
Health, AttackPower, Damage를 모두 같은 영구 수치로 만들면 데미지 계산의 중간값이 복제되고 저장되거나, 임시 Buff가 Base 값을 영구 변경합니다. Attribute가 나타내는 상태와 변경 수명을 먼저 분류해야 합니다.
2. 학습 목표
3. 핵심 개념
FGameplayAttributeData는 Base와 Current 값을 관리합니다. Instant Effect는 일반적으로 Base를 변경하고 Duration·Infinite Modifier는 활성 중 Current에 영향을 주며 종료 시 되돌아갑니다. Damage처럼 계산 입력을 잠시 전달하고 Health로 소비한 뒤 0으로 되돌리는 값은 Meta Attribute로 둘 수 있습니다.
4. 구현
공통 접근자 매크로를 프로젝트 Header에 정의합니다.
#pragma once
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
Attribute를 책임별로 분류합니다.
Resource: Health, MaxHealth, Mana, MaxMana
Combat Stat: AttackPower, Defense, CriticalChance
Meta: IncomingDamage, IncomingHealing
Derived/Optional: MoveSpeedMultiplier
게임 규칙이 독립적으로 변경되는 대규모 프로젝트는 HealthSet, CombatSet처럼 나눌 수 있지만, 작은 데모에서는 한 Set이 더 읽기 쉽습니다. 여러 Set을 쓸 때 같은 Attribute를 중복 정의하지 않습니다.
5. 코드가 동작하는 이유
접근자 매크로는 Reflection Property와 값 Getter·Setter·Initializer를 일관되게 제공합니다. Meta Attribute를 영구 상태와 분리하면 Execution Calculation이 계산 결과를 전달하고 AttributeSet이 방어·무적·사망 같은 최종 규칙을 한곳에서 처리할 수 있습니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
AttributeSet 설계와 Attribute의 역할 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.