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

코스트와 쿨타임 - 2) 어빌리티와 Tag 연동 + 어빌리티와 UI 연동 세팅

monstro 2025. 10. 18. 04:08
728x90
반응형

- 개요

GameplayAbility와 GA를 사용하기 위한 Tag를 연동하는 구조체를 추가한다

, 해당 구조체를 사용하여 스킬 UI마다 알맞은 GA를 연결한다

 

1) C++ 사이드

1 - 1) AuraLogChannels 클래스

헤더 파일

 

cpp 파일

 

위와 같이 커스텀 로그 클래스를 추가한다

로그의 구성은 다음과 같다

  • LogAura : 출력할 로그의 이름
  • Log : 로그로 남겨질 상세정보
  • All : 어디까지 상세정보를 남길지 여부

 

1 - 2) AuraGameplayTags 클래스

스킬 관련 GA의 Tag 추가

 

추가한 Tag를 생성

 

위와 같이 추가하여 스킬 관련 GA의 Tag를 추가 + 생성한다

 

1 - 3) AbilityInfo 클래스

AuraAbilityInfo 구조체

 

스킬 관련 GameplayAbility의 Tag들필요한 정보를 래핑한 AuraAbilityInfo 구조체를 추가한다

구성은 다음과 같다

  • AbilityTag 멤버변수 : 해당 GA의 Tag
  • InputTag 멤버변수 : 해당 GA를 발동시키기 위한 입력키의 Tag
  • Icon 멤버변수 : 스킬 UI에서 보여줄 해당 GA의 아이콘
  • BackgroundMaterial 멤버변수 : 스킬 UI에서 보여줄 해당 GA의 배경

 

 

AbilityInfo 클래스 DataAsset으로서 여러개의 AuraAbilityInfo를 저장하는 역할을 수행한다

AbilityInformation 멤버변수에 AuraAbilityInfo들을 저장한다

 

 

FindAbilityInfoForTag 함수의 로직은 위와 같다

AbilityInformation 멤버변수를 순회하면서 인자로 받은 Tag에 일치하는 AuraAbilityInfo를 반환한다

 

1 - 4) AuraAttributeInfo 클래스

 

FindAttributeInfoForTag 함수에서 추가한 커스텀 로그를 사용하도록 로직을 수정한다

 

1 - 5) AuraAbilitySystemComponent 클래스

 

위와 같이 2개의 델리게이트를 추가한다

  • AbilitiesGiven : AuraAbilitySystemComponent를 인자로 사용하여 C++에서만 사용하며 1 : 多로 전파
  • ForEachAbility : GameplayAbilitySpec을 인자로 사용하며 C++에서만 사용하며 1 : 1로 전파

 

 

위와 같이 새로운 멤버변수와 함수들을 추가한다

멤버변수는 다음과 같다

  • bStartupAbilitiesGiven : 게임이 시작되면서 GA가 부여되었는지 판단
  • AbilitiesGivenDelegate : AbilitiesGiven 델리게이트로서 GA가 부여되었다면 해당 변수를 통해 브로드캐스트

 

 

AddCharacterAbilities 함수의 로직을 위와 같이 수정하였다

StartupAbilities를 전부 순회한 이후에 bStartupAbilitiesGivenTrue로 설정하고,

AbilitiesGivenDelegate 멤버변수를 브로드캐스트한다

 

 

ForEachAbility 함수의 로직은 위와 같다

현재 발동가능GASpec들을 순회하면서 인자로 받은 Delegate바인드되어 있는지 판단한다

바인드되어 있다면 순회중인 GASpec을 인자로 넘겨 함수를 실행하지만,

현재에는 바인드되어 있지 않은 상황이라면 로그만을 출력한다

 

 

GetAbilityTagFromSpec 함수의 로직은 위와 같다

인자로 받은 GASpec에서 GA -> 해당 GA의 Tag들 순서로 가져와 순회한다

만약, 순회중인 Tag가 "Abilities"를 포함하고 있다면 해당 Tag를 반환한다

 

 

GetInputTagFromSpec 함수의 로직은 위와 같다

인자로 받은 GASpecDynamicTag를 순회하면서 "InputTag"가 포함되어 있다면 해당 Tag를 반환한다

 

1 - 6) OverlayWidgetController 클래스

 

위와 같이 델리게이트를 추가한다

  • AbilityInfoSignature : AuraAbilityInfo인자로 사용하면서 블루프린트에서도 사용하면서 1 : 多로 전파

 

 

 

위와 같이 멤버변수와 멤버함수를 새롭게 추가한다

  • AbilityInfoDelegate : AbilityInfoSignature 델리게이트로서 사용
  • AbilityInfo : AbilityInfo저장

 

BindCallbacksToDependencies 함수 수정

 

BindCallbacksToDependencies 함수의 로직을 위와 같이 수정하였다

AuraASC로부터 bStartupAbilitiesGiven을 확인하여 다음과 같이 진행한다

  • True : OnInitializeStartupAbilities 멤버함수 호출
  • False : AuraASC의 AbilitiesGivenDelegate 델리게이트에 OnInitializeStartupAbilities 함수 바인드

 

 

OnInitializeStartupAbilities 함수의 로직은 위와 같다

ForEachAbility 델리게이트 인스턴스를 생성하고 람다를 바인드한다

람다의 로직은 다음과 같다

  • AbilityInfo로부터 인자로 받은 GASpec의 Tag에 해당하는 AuraAbilityInfo 반환
  • 반환된 AuraAbilityInfo의 InputTag를 인자로 받은 GASpec의 InputTag로 설정
  • AbilityInfoDelegate 멤버변수를 통해 설정이 끝난 AuraAbilityInfo 브로드캐스트

 

이후에 인자로 받은 ASC로부터 위에서 생성한 델리게이트 인스턴스를 인자로 ForEachAbility 함수를 호출한다

 

2) 블루프린트 사이드

2 - 1) DA_AbilityInfo 데이터애셋

 

위와 같이 FireBolt 어빌리티에 대한 설정을 추가한다

 

2 - 2) BP_OverlayWidgetController 블루프린트

 

생성한 DA_AbilityInfo 데이터 애셋을 AbilityInfo 멤버변수에 설정한다

728x90
반응형