티스토리 뷰

Responding to Attribute Changes

속성(Attribute) 변경을 감지하기 위해 Callback 함수 또는 Lambda 함수를 사용할 수 있다.

AbilitySystemComponent에는 GetGameplayAttributeValueChangeDelegate()가 이미 구현되어 있으며, 특정 Attribute의 값이 변경되면 해당 Delegate가 자동으로 브로드캐스트된다.

따라서 BindCallbacksToDependencies() 함수에서 각 Attribute의 변경 Delegate에 Lambda를 바인딩하여 속성 변경 시 UI가 자동으로 갱신되도록 구현한다.

 

먼저 AttributeSet을 가져온 뒤, 특정 Attribute 하나만 처리하는 것이 아니라 모든 Attribute를 처리하기 위해 TagToAttributes Map을 for문으로 순회한다.

반복문에서는 Map에 저장된 값을 통해 각 Attribute의 값 변경 Delegate에 Lambda를 등록한다.

이후 Lambda가 호출되면 GameplayTag를 통해 FAuraAttributeInfo를 가져오고, Attribute의 현재 값을 GetNumericValue()로 읽어 AttributeValue에 저장한 뒤, 완성된 FAuraAttributeInfo를 브로드캐스트하여 해당 GameplayTag를 가진 위젯이 최신 값으로 갱신하게 된다.

 

그리고 실행하기에 앞서서, 보조 속성들도 전과 같이 동일한 작업을 해주었다.

 

이제 확인해보면 주속성과 보조속성 모두 이름과 값이 제대로 설정된 것을 볼 수 있다.

 

테스트를 위해서 테스트용 박스에 기존 모디파이어를 지우고 단순히 Strength 수치만 15더하도록 설정하였다.

 

이제 직접 확인해보면, 무사히 Strength에 +15가 된 값이 UI이 반영된 것을 볼 수 있다.

 

원하는 방식으로 구현은 성공했지만, 현재 AttributeValue 값을 브로드캐스트하는 내용의 세 줄의 코드가 두 군데에서 반복된다.

따라서 이를 함수 하나로 묶어주고 마무리해주었다.

 

BindCallbackToPependencies 함수의 경우, 기존에 AS를 캡쳐했으나 이제 필요없어졌으므로 삭제해주자.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/07   »
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 31
글 보관함