1. 어트리뷰트 변경시 브로드캐스트 하기
현재 위젯 컨트롤러는 처음 초기값을 브로드캐스팅한다. 이러한 브로드캐스팅은 한번만 하고 끝이 아니라 값이 변경될때마다 지속적으로 호출되어야 할 것이다.
베이스 위젯 컨트롤러 클래스로가 델리게이트들을 바인딩 할 수 있는 함수를 만들 것이다. 이렇게 하면 이를 상속받는 모든 컨트롤러가 해당 함수를 사용할 수 있을 것이다.
virtual void BindCallbacksToDependencies();
베이스 클래스에서 실제 정의는 하지 않을 것이니 빈 함수 몸체를 놓아두면 된다.
자식 클래스에서 이를 오버라이드하여 사용하자.
이제 자식클래스에서는 바인딩할 함수를 만들어야 한다.
protected:
void HealthChanged(const FOnAttributeChangeData& Data);
void MaxHealthChanged(const FOnAttributeChangeData& Data);
물론 이렇게 함수를 바인딩하는 것이 아니라 람다함수를 통해 익명함수를 바인딩할 수도 있다. 그 작업은 나중에 하도록 하겠다.
이제 델리게이트와 함수를 바인딩 하자.
void UOverlayWidgetController::BindCallbacksToDependencies()
{
const UAuraAttributeSet* AuraAttributeSet = CastChecked<UAuraAttributeSet>(AttributeSet);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(
AuraAttributeSet->GetHealthAttribute()).AddUObject(this, & UOverlayWidgetController::HealthChanged);
}
GAS에는 어트리뷰트 속성이 바뀔때마다 브로드캐스트를 해주는 델리게이트를 간편하게 만들 수 있게 제공해준다.
이제 헬스 어트리뷰트가 바뀔 때마다 콜백함수가 실행될 것이다.
MaxHealth도 똑같이 설정해주면 된다.
헬스가 변경되면 무엇을 해야할까? 사실 이미 이에 관한 델리게이트는 만들어져있다. 다시 한번 해당 델리게이트로 브로드캐스트를 하면 된다.
void UOverlayWidgetController::HealthChanged(const FOnAttributeChangeData& Data) const
{
OnHealthChanged.Broadcast(Data.NewValue);
}
void UOverlayWidgetController::MaxHealthChanged(const FOnAttributeChangeData& Data) const
{
OnMaxHealthChanged.Broadcast(Data.NewValue);
}
2. BindCallbacksToDependencies() 함수 호출하기
이제 함수를 호출해 실제로 델리게이트를 할당할 필요가 있다.
디펜던시 함수는 오버레이 위젯 컨트롤러가 설정될때 함께 지정해주면 좋을 것이다.
UOverlayWidgetController* AAuraHUD::GetOverlayWidgetController(const FWidgetControllerParams& WCParams)
{
if (OverlayWidgetController == nullptr)
{
OverlayWidgetController = NewObject<UOverlayWidgetController>(this, OverlayWidgetControllerClass);
OverlayWidgetController->SetWidgetControllerParams(WCParams);
OverlayWidgetController->BindCallbacksToDependencies();
}
return OverlayWidgetController;
}
오버레이 위젯 컨트롤러를 만들고 반환해주는 함수에서 이 함수를 시행해주도록 하자.
이제 어트리뷰트 속성을 화면에 보여주는 작업은 끝났다. 하지만 정작 어트리뷰트를 설정하지는 않았다. 이어서 어트리뷰트를 설정하여 실제로 값을 넣어줄 것이다.
그리고 이때 사용하는 것이 게임플레이 이펙트이다.
'게임프로그래밍 > 실습2' 카테고리의 다른 글
[실습2] 22. 인스턴트 게임플레이 이펙트 (0) | 2024.11.29 |
---|---|
[실습2] 21. 이펙트 액터 기능 구현하기 (0) | 2024.11.29 |
[실습2] 19. 초기값 위젯에 브로드캐스팅하기기 (0) | 2024.11.29 |
[실습2] 18. 위젯 컨트롤러로 설정하기 (0) | 2024.11.29 |
[실습2] 17. HUD 만들기 (0) | 2024.11.29 |