관리 메뉴

Mini

[UE5] 체력통에 실제값을 연결하는 방법 // .cpp.h키는법 본문

UE5/UI

[UE5] 체력통에 실제값을 연결하는 방법 // .cpp.h키는법

Mini_96 2024. 5. 28. 01:35

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. 결과