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

스킬창 UI - 4) 플레이어 레벨과 스킬 연동 + 스킬과 스킬창 UI 연동

monstro 2025. 11. 2. 16:12
728x90
반응형

- 개요

플레이어의 레벨에 따라 스킬 어빌리티의 상태를 변경하고, 변경된 상태스킬 창 UI에서 표현하도록 구성한다

 

- C++ 사이드

1) AuraGameplayTags 클래스

새로운 스킬 어빌리티의 Tag 추가

 

추가한 Tag를 실제로 생성

 

번개를 소환하는 스킬 어빌리티의 Tag를 새롭게 추가하고, 추가한 Tag를 실제로 생성한다

 

2) AbilityInfo 클래스

AuraAbilityInfo 구조체 수정

 

AuraAbilityInfo 구조체에 위와 같이 2개의 멤버변수를 추가한다

  • LevelRequirement : 해당 스킬 어빌리티를 습득하기 위한 최소레벨
  • Ability : 습득할 스킬의 GameplayAbility

 

3) AuraAbilitySystemComponent 클래스

델리게이트 추가

 

AbilityStatusChanged 델리게이트를 새롭게 추가한다

해당 델리게이트는 스킬 어빌리티의 Tag + 스킬 어빌리티의 상태 Tag의 2개의 GameplayTag를 인자로 받으며

C++에서만 사용이 가능하며 1 : 多의 형태로 브로드캐스트를 진행한다

 

 

추가한 델리게이트를 위와 같이 멤버변수로 추가한다

 

 

또한 위와 같이 3개의 함수를 새롭게 추가한다

 

 

GetSpecFromAbilityTag 함수의 로직은 위와 같다

발동가능한 GA들을 순회하면서 인자로 받은 Tag와 일치하는 Tag를 지닌 GA의 GASpec을 반환한다

 

 

UpdateAbilityStatuses 함수의 로직은 위와 같다

AvatarActor로부터 AbilityInfo -> AbilityInformation을 가져와 AuraAbilityInfo를 순회한다

순회중인 AuraAbilityInfo에서 GetSpecFromAbilityTag 함수를 호출하여 GASpec을 가져올 수 있는지 확인한다

이후 다음의 로직을 진행한다

  • GASpec을 가져와 AbilitySpec이라는 이름으로 저장
  • AbilitySpec에 "Abilities.Status.Eligible"의 Tag를 수식하여 해당 어빌리티의 스킬을 부여할 수 있도록 설정
  • GiveAbility 함수에 해당 AbilitySpec을 넘겨 어빌리티 부여
  • MarkAbilitySpecDirty 함수에 해당 AbiltiySpec을 넘겨 어빌리티 변경 사항 기록
  • ClientUpdateAbilityStatus 함수에 순회중인 대상의 AbilityTagAbilities.Status.Eligible를 넘겨 브로드캐스트

 

 

ClientUpdateAbilityStatus 함수에서는 AbilityStatusChanged 멤버변수를 통해 2개의 Tag를 브로드캐스트한다

 

4) AuraGameModeBase 클래스

 

AbilityInfo 멤버변수를 추가하여 게임에서 사용하는 스킬의 GA들GameMode도 접근할 수 있다

 

5) AuraAbilitySystemLibrary 클래스

 

 

GetAbilityInfo 함수를 추가하여 GameMode를 통해 AbilityInfo를 반환하도록 설정한다

 

6) SpellMenuWidgetController 클래스

 

BindCallbacksToDependencies 함수의 구성은 위와 같다

ASC의 AbilityStatusChanged 델리게이트에 람다 함수를 바인드한다

람다 함수의 로직은 다음과 같은데, AbilityInfo로부터 Tag에 맞는 AuraAbilityInfo 가져온다

AuraAbilityInfo의 StatusTag를 설정하고, AbilityInfoDelegate 멤버변수를 통해 AuraAbilityInfo를 브로드캐스트한다

 

7) AuraCharacter 클래스

 

AddToPlayer 함수에 위의 로직을 추가한다

플레이어가 레벨업을 한 이후에, ASC의 UpdateAbilityStatuses 함수를 호출하고 플레이어의 레벨을 넘겨준다

 

- 블루프린트 사이드

1) GA_Electrocute 블루프린트

 

해당 GA의 AssetTags를 위와 같이 설정한다

 

2) DA_AbilityInfo 데이터애셋

 

GA_Electrocute에 관한 데이터들을 새롭게 데이터애셋에 추가한다

Level Requirement를 2로 설정하여 2 레벨에 해당 GA의 상태를 갱신한다

 

3) BP_AuraGameMode 블루프린트

 

AbilityInfo 멤버변수를 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형