언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

경험치와 레벨업 - 2) 경험치 Attribute

monstro 2025. 10. 24. 13:51
728x90
반응형

- 개요

프로젝트에서 경험치는 Meta Attribute로서 사용하고 연결된 Tag를 통해 이벤트를 발동한다

이벤트가 발동되면 경험치를 처리하는 패시브형 Gameplay Ability에서 GE를 적용하여 Attribute의 값을 수정한다

 

1) C++ 사이드

1 - 1) AuraGameplayTags 클래스

경험치 Attribute의 Tag 추가

 

추가한 경험치 Attribute의 Tag 생성

 

이벤트를 발동시키기 위한 경험치 Attribute의 Tag를 위와 같이 추가 + 생성하였다

 

1 - 2) AuraAttributeSet 클래스

경험치 Attribute 추가

 

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

 

 

PostGameplayEffectExecute 함수에 위와 같이 로직을 추가한다

IncomingXP 어트리뷰트가 GE에 의해서 수정된 후에, 수정된 값을 다시 0.0으로 초기화한다

 

1 - 3) CharacterClassInfo 클래스

CharacterClassDefaultInfo 구조체 수정

 

CharacterClassDefaultInfo 구조체에 위와 같이 XPReward 멤버변수를 추가한다

해당 멤버변수를 통해 직업군별로 제공할 경험치를 선형적으로 설정할 수 있다

 

1 - 4) AuraAbilitySystemLibrary 클래스

 

 

GetXPRewardForClassAndLevel 함수를 추가한다

해당 함수를 사용하여 몬스터 직업군별 경험치를 반환한다

 

1 - 5) AuraAbilitySystemComponent 클래스

 

 

AddCharacterPassiveAbilities 함수의 로직은 위와 같다

인자로 받은 StartupPassiveAbilities를 순회하면서 GASpec을 생성하고 부여하면서 발동한다

 

 

1 - 6) CombatInterface 클래스

 

GetCharacterClass 함수를 추가하여 게임의 캐릭터들로부터 직업군을 반환할 수 있도록 설정한다

경험치는 직업군 별다른 값으로 제공된다

 

1 - 7) AuraCharacterBase 클래스

GetCharacterClass 함수 오버라이드

 

캐릭터 별로 직업군 설정

 

경험치를 처리하기 위한 GameplayAbility 멤버변수

 

위와 같이 멤버함수 + 멤버변수를 추가한다

부모 클래스인 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 멤버변수의 값을 위와 같이 설정한다

 

ActivateAbility 이벤트

 

"Attributes"의 Tag를 통해 이벤트가 발동되면, EventBasedEffectClass 멤버변수에 저장된 GE를 

ApplyGameplayEffectSpecToSelf 함수를 호출하여 자기자신에게 적용하도록 설정하였다

 

2 - 5) BP_AuraCharacter 블루프린트

 

Startup Passive Abilities 멤버변수를 위와 같이 2 - 4)의 GA로 설정한다

 

- 최종 실행 결과

 

728x90
반응형