티스토리 뷰

Aura Ability System Blueprint Library

우리는 프로젝트 전체에서 단 하나만 존재하는 위젯 컨트롤러에 어디서든 안전하게 접근할 수 있는 구조를 만들 것이다.

특히 Blueprint에서 간단하게 함수 하나만 호출해서 현재 존재하는 위젯 컨트롤러를 얻을 수 있도록 Blueprint Function Library를 제작한다.

 

하지만 현재는 HUD -> Widget Contrller 생성 -> Attribute Menu 전달과 같은 방식으로 동작한다.

즉 Attribute Menu가 자기 컨트롤러를 직접 찾는 거싱 아니라, Overlay 쪽에서 만들어서 넣어주는 구조이다.

 

Overlay Widget Contrller의 경우에는 다음과 같은 문제가 있다.

Health Globe
Mana Globe
Overlay UI 등 여러 UI 공유

-> 순서가 매우 중요

Overlay Widget Controller 생성
↓
Health Globe 연결
↓
Mana Globe 연결

-> 순서가 꼬일 시

Health Globe가 먼저 접근
↓
Widget Controller 없음
↓
에러

 

그래서 Overlay Widget Controller는 HUD에서 생성하고 관리한다.

하지만 Attribute Menu의 경우에는 다음과 같이 생성 시점이 명확한 구조이다.

버튼 클릭
↓
Attribute Menu 생성
↓
Attribute Menu Widget Controller 필요

 

그래서 Attribute Menu Widget이 스스로 Widget Contrller를 얻는 구조가 더 자연스럽다.

이를 해결하기 위해 어디서든 호출 가능한 정적 함수(Static Function)을 모아둔 클래스인 Blueprint Functio Library를 활용한다.

해당 클래스를 통해 다음과 같은 유틸리티 함수들을 다룰 수 있다.

Get Ability System Component()
Get Overlay Widget Controller()
Get Attribute Menu Widget Controller()

 


 

이제 Blueprint Function Library 베이스 클래스부터 생성해주자.

 

그리고 우선 OverlayWidgetContrller 함수를 위에서 언급했던 형태로 호출하도록 구조를 구성할 것이다.

여기서 인푸승로 WorldConttextObject를 요구하는데, 이는 함수가 Static이기 때문이다.

Static 함수는 특정 개체에 속하지 않기 때문에 현재 플레이어, HUD 등을 알 수 없기 때문에 Word Context Object가 필요하다.

 

AuraHUD의 GetOverlayWidgetController 함수를 다뤘을 때와 마찬가지로 인풋으로 다음과 같은 값들이 필요하다.

PlayerController
PlayerState
AbilitySystemComponent
AttributeSet

 

먼저 WorldContextObject를 이용해 현재 플레이어의 PlayerController를 얻는다.

이후 PlayerController를 통해 PlayerState를 가져오고, PlayerState가 보유하고 있는 AbilitySystemComponent와 AttributeSet을 획득한다.

이렇게 얻은 PlayerController, PlayerState, AbilitySystemComponent, AttributeSet을 FWidgetControllerParams로 구성한 뒤, 이를 HUD의 GetOverlayWidgetController() 함수에 전달하여 Overlay Widget Controller를 반환받는다.

 

이제 컴파일을 해보면 WBP_Overlay에서 Get Overlay Widget Controller를 호출할 수 있게 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함