0. .cpp.h키는법
라이더에서 cpp파일을 선택후 alt+O 하면된다.
1. 오버레이위젯컨트롤러에 델리게이트 설정
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnHealthChangedSignature, float, NewHealth);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnMaxHealthChangedSignature, float, NewMaxHealth);
/**
*
*/
UCLASS()
class AURA_API UOverlayWidgetController : public UAuraWidgetController
{
GENERATED_BODY()
델리게이트를 변수로 설정 -> BP에서 바인딩
//BP에서 할당할거임
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnHealthChangedSignature OnHealthChanged;
UPROPERTY(BlueprintAssignable, Category="GAS|Attributes")
FOnMaxHealthChangedSignature OnMaxHealthChanged;
2. (hp)초기값 브로드캐스팅
위젯컨트롤러는 AS변수를 가지고있음을 참고.
void UOverlayWidgetController::BroadcastInitialValues()
{
const UAuraAttributeSet* AuraAttributeSet = CastChecked<UAuraAttributeSet>(AttributeSet);
//실제 체력을 가져와서 방송해야함
OnHealthChanged.Broadcast(AuraAttributeSet->GetHealth());
OnMaxHealthChanged.Broadcast(AuraAttributeSet->GetMaxHealth());
}
3. 언제 초기화? -> 위젯에 위젯컨트롤러 바인딩 이후 && 뷰포트 추가전에 하면되겠군
//위젯에 컨트롤러 set하기
OverlayWidget->SetWidgetController(WidgetController);
WidgetController->BroadcastInitialValues(); //뷰포트추가전에 방송
Widget->AddToViewport();
4. BP> 오버레이는 위젯컨트롤러가 3번 코드에의해 설정되어있다.
but, 피통 마나통의 컨트롤러는 설정해줘야한다.
피통, 마나통 선택 > 그래프 클릭 후
걔들의 컨트롤러를 WidgetController(오버레이의 컨트롤러와 같도록)로 설정해준다.
* c++의 overlaywidget->set코드가 실행되면, controller set 이벤트가 발생 -> 위 BP코드도 실행되는것이다!
-> 하위의 마나통, 피통의 컨트롤러가 set 되었음을 보장한다!!
5. 마나통 BP에서 컨트롤러를 cast해서 사용하기 위해
UCLASS 설정
UCLASS(Blueprintable, BlueprintType)
class AURA_API UOverlayWidgetController : public UAuraWidgetController
{
and 컨트롤러도 BP 만드는게 좋겠다.
HUD(뷰)에서도 BP로 바꿔준다.
6. 방송수신 바인딩
아래와 같이 방송이 발생하면, 위 이벤트가 실행된다.
7. 백분률 계산위해
마나통, 피통의 부모인 progressbar에서 함수정의
8. 변화가 방송되면, 값갱신 && precent 갱신
* 추가 : 값갱신은 Effector에서 일어난다!
AS의 set으로 값을 변경함.
9. BP 코드정리
10. 결과
'UE5 > UI' 카테고리의 다른 글
[UE5] UI 체력포션먹으면 마나25감소 구현 (0) | 2024.05.28 |
---|---|
[UE5] 체력변화가생길시 즉시 업데이트 구현 // 바인딩 버그?(auto vs 직접호출), 의존성점검(뷰->컨트롤러->모델) (0) | 2024.05.28 |
[UE5] HUD 마나통 뷰포트(화면)에 띄워주기 // TSubClassOf란? (0) | 2024.05.27 |
[UE5] UI 체력통 만들기, 오버레이 (0) | 2024.05.27 |
[UE5] UI 에서 데이터 얻어오는법 (0) | 2024.05.27 |