Widget.h
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
class USlider* MouseSpeedSlider;
UFUNCTION()
void MouseSpeedValue(float Value);
virtual void NativeOnInitialized();
먼저 헤더파일에서 Widget에 생성한 Slider와 연동시킬 USlider 클래스를 선언한다.
해당 Slider의 값이 바뀔 때마다 호출될 함수 또한 선언한다.
Widget이 생성될 때 호출되는 NativeOnInitialized() 함수 또한 UserWidget 라이브러리에 있는 함수를 호출하여 사용할 것이다.
Widget.cpp
#include "Components/Slider.h"
#include "PlayerCharacter.h"
void UInGameOption::NativeOnInitialized()
{
Super::NativeOnInitialized();
Player = Cast<APlayerCharacter>(GetOwningPlayerPawn());
MouseSpeedSlider = Cast<USlider>(GetWidgetFromName(TEXT("MouseSlider")));
if (Player) {
if (MouseSpeedSlider) {
MouseSpeedSlider->SetValue(Player->mouseSpeed / 60);
MouseSpeedSlider->OnValueChanged.AddDynamic(this, &UInGameOption::MouseValue);
}
}
}
void UInGameOption::MouseValue(float Value)
{
Player->mouseSpeed = Value * 60;
MouseSpeedSlider->SetValue(Value);
}
CPP 파일에서는 만들어 둔 Character 내의 변수의 값을 바꿔줄 것이기에 PlayerCharacter의 헤더파일과 Components/Slider 라이브러리를 include 해주었다.
Widget의 생성과 동시에 Player와 Widget의 이름으로 헤더파일에 생성해 둔 변수를 초기화 시킨다.
Slider는 0부터 1 사이의 값을 Value로 받아오기에 이를 원하는 값으로 바꿔서 SetValue()를 해준다.
Slider의 값이 바뀔 때마다 OnValueChanged 이벤트가 호출되고, AddDynamic을 통해 해당 이벤트가 호출될 때마다 미리 선언해둔 함수가 실행되도록 한다.
OnValueChanged 이벤트를 통해 호출된 함수는 실수타입의 변수가 매개변수로 전달된다. 이를 사용하여 원하는 값을 조절하고, Slider의 값을 SetValue를 통해 바꿔주면 된다.