티스토리 뷰

Attribute Info Delegate

Attribute Menu Widget Controller를 할당했기에, 이제 Attribute Menu Widget에 표시해야하는 데이터를 전달해야 한다.

이를 위해서는 콜백에 위젯을 바인딩하고, 초기 값을 브로드캐스트하는 작업이 필요하다.

위젯 컨트롤러 -> 데이터 브로드캐스트 -> 위젯 수신 -> UI 갱신

 

broadcast할 데이터는 이미 만들어준 Aura Attribute Info(Data Asset)을 활용한다.

해당 데이터는 하나의 속성에 대해 다음과 같은 정보를 담고 있다.

Gameplay Tag
이름(Name)
설명(Description)
값(Attribute Value)

 

따라서 앞으로 위젯 컨트롤러는 이 구조체를 브로드캐스트하고, 속성 메뉴 위젯에서 이 구조체를 받아 자신의 UI를 업데이트한다.


 

속성 값을 얻으려면 먼저 Attribute Set이 필요하며, 이미 위젯 컨트롤러에 AttributeSet 멤버가 존재한다.

하지만 타입은 UAuraAttributeSet이 아니므로 캐스팅해서 사용해야한다.

우선은 가장 간단하게 Strength 하나만 가져와서 테스트 해볼 예정이지만, 이 값을 위젯에게 전달하려면 Delegate가 필요하다.

잠재적으로 여러 위젯이 바인딩할 수 있기를 원하므로 동적 멀티캐스트 델리게이트로 선언할 것이다.

그리고 이어서 델리게이트 멤버 변수을 Bluprint에서 바인딩 가능하도록 설정해주고, 이어서 브로드캐스트할 속성 정보를 조회하기 위해 UAttributeInfo 데이터 에셋 포인터를 멤버 변수로 선언해준다.

 

이제 해당 구조체 내용을 통해 Strength에 대한 Tag를 조회하고, Data Asset에 Attribute Value 값은 저장되어 있지 않기 때문에 실제 Attribute Set에서 가져와야한다.

이후에 준비된 최종 Info를 델리게이트로 브로드캐스트 해준다.

 

가장 먼저 AttributeMenuWidgetController에서 Data Asset을 연결해주자.

 

이제 위젯이 델리게이트를 받아야하는데, 속성 메뉴에는 여러 개의 Row가 있다.

따라서 Strength Row에는 Strength만, Intelligence Row에는 Intelligence만 표시되어야 하지만, 지금은 아직 구현하지 않고 우선 델리게이트가 제대로 전달되는지만 체크한다.

 

따라서 TextValueButtonRow 블루프린트를 열고, Widget Controller를 가져와 델리게이트 이벤트를 연결해주자.

여기서 우리가 원하는 Info(AttributeInfo 구조체)에 접근할 수 있다.

 

우리는 여기서 Text를 변경할 것이기 떄문에, 내용 변경을 위한 함수가 필요하다.

따라서 우선 텍스트 블록을 변수로 만들어주자.

 

그리고 함수에서 해당 텍스트 블록에 텍스트를 할당하기 위한 내용을 구현해주자.

 

이제 Info에서 Attribute Name을 텍스트로 할당해주자.

 

이 상태에서 실행해도 아무것도 보이지 않는데, 아직 BoradcastInitialValue 함수를 호출하지 않았기 때문이다.

따라서 지금은 델리게이트만 존재할 뿐, 브로드캐스트를 하지 않은 상태이다.

이를 위해 BoradcastInitialValue를 블루프린트에서 호출해야하지만, 기존 베이스 위젯 컨트롤러에서 설정을 추가로 해주어야한다.

 

이제 AttributeMenu에서 브로드캐스트를 설정해주자.

 

이 상태로 컴파일하면, 텍스트가 모두 Strength로 바뀐 것을 볼 수 있다.

 


 

추가적으로 AttributeValue 값도 확인해줄 것이다.

이를 우선 화면에 출력되도록 해주자.

 

그러면 현재 Info에 저장된 값이 정상적으로 출력되는 모습을 볼 수 있다.

 

따라서 해당 값도 똑같이 설정해주자.

이를 위해 마찬가지로 WBP_FrameValue도 변수로 만들고, 여기서 숫자에 접근할 것이다.

 

마찬가지로 텍스트 설정을 위한 함수를 만들고, WBP_FrameValue를 통해 텍스트 블록을 호출한다.

그리고 숫자의 경우 Int 값으로 설정해주었다.

 

이제 라벨 값에 이어 숫자도 이어서 출력해주자.

 

이제 숫자도 마찬가지로 출력되는 모습을 확인할 수 있다.

 


 

지금은 모든 Row가 Strength에 대한 내용을 표시하고 있지만, 원래는 각 Row 마다 자신의 속성만 표시해야 한다.

이를 위해서는 각 Row에 Gameplay Tag를 부여하고, 브로드캐스트된 AttributeInfo의 태그와 자신의 태그를 비교하여 일치할 때만 UI를 갱신해야 한다.

이 부분은 다음 강의에서 진행될 예정이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함