游戏都有一个开始界面,里面有开始游戏按钮、设置游戏按钮、退出游戏按钮等。
?视图创建的方式参照之前的第八篇UMG创建方式,UE4C++学习篇(八)--- UI界面添加(UMG方式)
添加完视图之后,在创建的UMG类里面创建三个按钮,并进行点击事件的动态绑定。
//按钮-游戏开始
UFUNCTION()
void OnGameStart();
//按钮-游戏设置
UFUNCTION()
void OnGameSetting();
//按钮-游戏退出
UFUNCTION()
void OnGameExit();
public:
//游戏开始按钮
UPROPERTY(meta = (BindWidget))
UButton* GameStart;
//游戏设置按钮
UPROPERTY(meta = (BindWidget))
UButton* GameSetting;
//游戏退出按钮
UPROPERTY(meta = (BindWidget))
UButton* GameExit;
动态绑定的方法注意加UFUNCTION修饰,否则无效。
//游戏开始按钮绑定
if (GameStart)
{
GameStart->OnClicked.AddDynamic(this,&UMenuUserWidget::OnGameStart);
}
//游戏设置按钮绑定
if (GameSetting)
{
GameSetting->OnClicked.AddDynamic(this, &UMenuUserWidget::OnGameSetting);
}
//游戏退出按钮绑定
if (GameExit)
{
GameExit->OnClicked.AddDynamic(this, &UMenuUserWidget::OnGameExit);
}
游戏的退出处理:
这里使用UKismetSystemLibrary::QuitGame进行处理。
AMenuPlayerController* PC = Cast<AMenuPlayerController>(UGameplayStatics::GetPlayerController(this,0));
UKismetSystemLibrary::QuitGame(GetWorld(),PC,EQuitPreference::Quit,true);
在玩家控制器处理输入模式,因为在UI界面中,想要鼠标一直显示,并且不会对场景进行操作。
//隐藏鼠标
bShowMouseCursor = true;
//设置输入模式
FInputModeUIOnly InputUIOnly;
InputUIOnly.SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways);
SetInputMode(InputUIOnly);
这里使用的是仅UI模式,只对UI进行操作,不能对场景的东西进行操作。
|