본문으로 건너뛰기
Unreal Engine GAS(Gameplay Ability System) 심화LESSON 07

AttributeSet 설계와 Attribute의 역할

난이도심화
예상 시간120분
선수지식6강의 ASC Owner·Avatar 초기화

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에 정의합니다.

GASAttributeSet.h
#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. 핵심 요약​

MINI QUIZ

AttributeSet 설계와 Attribute의 역할 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“AttributeSet 설계와 Attribute의 역할”의 두 선택을 비교할 때 기준이 되는 설명은 무엇인가요?
  2. 문제 2‘Damage를 Health처럼 저장·복제’ 상태에 관한 “AttributeSet 설계와 Attribute의 역할” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

7강. AttributeSet 설계와 Attribute의 역할 미완료 상태