- 개요
프로젝트에서 경험치는 Meta Attribute로서 사용하고 연결된 Tag를 통해 이벤트를 발동한다
이벤트가 발동되면 경험치를 처리하는 패시브형 Gameplay Ability에서 GE를 적용하여 Attribute의 값을 수정한다
1) C++ 사이드
1 - 1) AuraGameplayTags 클래스


이벤트를 발동시키기 위한 경험치 Attribute의 Tag를 위와 같이 추가 + 생성하였다
1 - 2) AuraAttributeSet 클래스

경험치로 사용할 IncomingXP 어트리뷰트를 추가하고, ATTRIBUTE_ACCESSORS 매크로도 정의한다

PostGameplayEffectExecute 함수에 위와 같이 로직을 추가한다
IncomingXP 어트리뷰트가 GE에 의해서 수정된 후에, 수정된 값을 다시 0.0으로 초기화한다
1 - 3) CharacterClassInfo 클래스

CharacterClassDefaultInfo 구조체에 위와 같이 XPReward 멤버변수를 추가한다
해당 멤버변수를 통해 직업군별로 제공할 경험치를 선형적으로 설정할 수 있다
1 - 4) AuraAbilitySystemLibrary 클래스


GetXPRewardForClassAndLevel 함수를 추가한다
해당 함수를 사용하여 몬스터의 직업군별 경험치를 반환한다
1 - 5) AuraAbilitySystemComponent 클래스


AddCharacterPassiveAbilities 함수의 로직은 위와 같다
인자로 받은 StartupPassiveAbilities를 순회하면서 GASpec을 생성하고 부여하면서 발동한다
1 - 6) CombatInterface 클래스

GetCharacterClass 함수를 추가하여 게임의 캐릭터들로부터 직업군을 반환할 수 있도록 설정한다
경험치는 직업군 별로 다른 값으로 제공된다
1 - 7) AuraCharacterBase 클래스



위와 같이 멤버함수 + 멤버변수를 추가한다
부모 클래스인 AuraCharacterBase에서 직업군을 설정하므로 AuraEnemy 클래스의 멤버변수는 제거한다

GetCharacterClass 함수의 오버라이드한 로직은 위와 같은데, CharacterClass 멤버변수를 반환한다

AddCharacterAbilities 함수에 위와 같이 로직을 추가하여, 기본적인 패시브 GA를 부여(Give)한다
1 - 8) AuraCharacter 클래스

AuraCharacter 클래스의 생성자에서 플레이어 캐릭터의 직업군을 마법사로 설정한다
2) 블루프린트 사이드
2 - 1) CT_XP_Reward 커브 테이블

위와 같이 프로젝트에 포함된 직업군별로 제공할 경험치의 커브를 생성한다
2 - 2) DA_CharacterClassInfo 데이터애셋

1)에서 생성한 커브테이블의 커브를 사용하여 직업군별 제공할 경험치를 설정한다
2 - 3) GE_EventBasedEffect 블루프린트

패시브 GA로부터 적용할 GameplayEffect를 위와 같이 설정한다
SetByCaller 방식으로 Tag와 연결된 Value의 값을 통해 IncomingXP 어트리뷰트를 수정한다
2 - 4) GA_ListenForEvent 블루프린트

패시브 GA는 서버에서만 동작하도록 위와 같이 레플리케이션을 비활성화한다

EventBasedEffectClass 멤버변수의 값을 위와 같이 설정한다

"Attributes"의 Tag를 통해 이벤트가 발동되면, EventBasedEffectClass 멤버변수에 저장된 GE를
ApplyGameplayEffectSpecToSelf 함수를 호출하여 자기자신에게 적용하도록 설정하였다
2 - 5) BP_AuraCharacter 블루프린트

Startup Passive Abilities 멤버변수를 위와 같이 2 - 4)의 GA로 설정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 경험치와 레벨업 - 최종) 레벨과 UI 연동 (0) | 2025.10.25 |
|---|---|
| 경험치와 레벨업 - 3) 레벨업 구현과 경험치 바 UI (0) | 2025.10.24 |
| 경험치와 레벨업 - 1) LevelUpInfo 클래스를 통한 레벨 정의 (0) | 2025.10.23 |
| 코스트와 쿨타임 - 최종) 쿨타임과 UI 연동 (0) | 2025.10.19 |
| 코스트와 쿨타임 - 4) BlueprintAsyncActionReady 클래스를 사용한 어빌리티 쿨타임 설계 (0) | 2025.10.18 |