- 개요
AttributeSet에 새로운 TMap 프로퍼티를 추가한다
특정 Attribute에 대한 GameplayTag를 Key로, Attribute에 대한 Getter 함수를 Value로 구성한다
Attribute의 값이 변경될 때마다 해당 TMap을 사용하여 View(스탯창 UI)를 갱신하도록 설정한다
또, 스탯창 UI의 Controller인 AttributeMenuWidgetController 클래스의
비어있던 로직을 구성하여 Model에 있는 데이터의 값을 View에 반영할 수 있도록 설정한다
마지막으로 View인 스탯창 UI의 블루 프린트에 로직을 추가하여
필요한 데이터를 설정하는 과정을 진행한다
1) Model - AuraAttributeSet 클래스

우선, template 포인터인 TStaticFuncPtr을 추가한다
표시한 BaseStaticDelegateInstance는 정적 함수에 바인딩된 델리게이트 인스턴스를 의미하는 클래스인데,
static 함수에 대한 델리게이트를 정의할 때 사용할 수 있다
프로젝트에서 해당 포인터는 Attribute에 대한 Getter 함수에 바인딩된 델리게이트로서 사용한다
***
언리얼 엔진에서 델리게이트는 함수 포인터로서 사용이 가능하다
***

TagsToAttributes 프로퍼티를 추가한다
해당 프로퍼티는 TMap으로서 특정 Attribute에 대한 Tag와 Getter 함수를 연결하여 저장한다

생성자에서 TagsToAttributes 프로퍼티에 Attribute들에 대한 GameplayTag와 Getter 함수를 저장한다
2) Controller - AttributeMenuWidgetController 클래스

AttributeInfo에 저장된 AuraAttributeInfo를 인자로 받는 AttributeInfoSignature 델리게이트를 추가한다
해당 델리게이트를 통해 AuraAttributeInfo의 변경이 발생하면 이를 View에 전파할 수 있다

추가한 델리게이트를 프로퍼티로 추가한다

Model의 데이터를 Controller에서 참조할 수 있도록 프로퍼티로 추가한다

델리게이트 프로퍼티에 바인드된 함수나 데이터를 Broadcast하는 BroadcastAttributeInfo 함수를 추가한다

BroadcastAttributeInfo 함수의 로직은 위와 같다
인자로 받은 GameplayTag를 바탕으로 프로퍼티의 AttributeInfo에서 AuraAttributeInfo를 가져오고,
가져온 AuraAttributeInfo의 값을 인자로 받은 Attribute의 값으로 설정한다
델리게이트 프로퍼티를 통해 설정이 끝난 AuraAttributeInfo를 브로드캐스트한다

BindCallbacksToDependencies 함수의 로직은 위와 같다
AuraAttributeSet에서 TagsToAttributes를 가져와 순회하면서,
GetGameplayAttributeValueChangeDelegate 델리게이트에 순회중인 Pair의 Value를 넘겨준다
해당 델리게이트는 어트리뷰트가 변경되면 바인드된 콜백 함수를 호출하는데,
람다를 사용하여 순회중인 Pair에 대해서 BroadcastAttributeInfo 함수를 호출하도록 설정하였다

BroadcastInitialValues 함수의 로직은 위와 같다
AuraAttributeSet을 가져오고 다시, TagsToAttributes 프로퍼티를 가져온다
가져온 프로퍼티를 순회하면서 BroadcastAttributeInfo 함수를 호출한다
***
따라서 다음과 같이 정리할 수 있다
- BindCallbacksToDependencies 함수 : Attribute에 대한 변경사항을 브로드캐스트하는 용도
- BroadcastInitialValues 함수 : 변경되지 않은 Attribute의 기초값을 브로드캐스트하는 용도
***
3) View - WBP_AttributeMenu 블루프린트

Event Graph에 시퀀스를 추가하고 위와 같이 3개의 로직을 추가한다
구성은 다음과 같다
- 스탯창 UI에 포함된 각각의 스탯을 보여주는 Row에 대한 Tag를 설정
- 위젯의 Controller를 설정하고 서브 위젯의 Controller를 설정
- 설정된 위젯의 Controller를 통해 Model의 기초값을 브로드캐스트


스탯창 UI에 대한 Controller의 프로퍼티를 설정한다

HUD 블루프린트에서 설정한 Controller를 프로퍼티로 사용한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| GameplayAbility - 2) Gameplay Ability 적용 (0) | 2025.08.08 |
|---|---|
| GameplayAbility - 1) Gameplay Ability에 대하여 (0) | 2025.08.08 |
| 스탯창 UI - 3) AttributeInfo 데이터애셋 클래스와 BlueprintFunctionLibrary 클래스 (0) | 2025.08.01 |
| 스탯창 UI - 2) Native한 GameplayTag + AssetManager (0) | 2025.08.01 |
| 스탯창 UI - 1) 스탯창 UI 애셋과 설계 구조 (0) | 2025.08.01 |