1.8 KiB
1.8 KiB
title, date, excerpt, tags, rating
title | date | excerpt | tags | rating |
---|---|---|---|---|
UE5 Lyra学习笔记(6)—CommonUI | 2024-03-22 15:03:59 | ⭐ |
前言
- 全局管理类
- #UGameUIManagerSubsystem
- #UGameUIPolicy
- UPrimaryGameLayout
- #UGameUIPolicy
- #UGameUIManagerSubsystem
- Widgets 使用#GameplayAbility检测玩家输入并且开启UI。
UGameUIManagerSubsystem
父类为:UGameInstanceSubsystem,主要的功能是管理CurrentPolicy(UGameUIPolicy)。
UGameUIPolicy
GameplayAbility
Lyra使用2个位于Plugins/ShooterCore/Content/Input/Abilites/
- GAB_ShowWidget_WhenInputPressed
- GAB_ShowWidget_WhileInputHeld
GAB_ShowWidget_WhenInputPressed:!GAB_ShowWidget_WhenInputPressed.png GAB_ShowWidget_WhileInputHeld,略微复杂一些会多一些:!GAB_ShowWidget_WhileInputHeld.png
GameplayTasks
- UCancellableAsyncAction
核心函数逻辑如下,主要调用UPrimaryGameLayout::PushWidgetToLayerStackAsync()
void UAsyncAction_PushContentToLayerForPlayer::Activate()
{
if (UPrimaryGameLayout* RootLayout = UPrimaryGameLayout::GetPrimaryGameLayout(OwningPlayerPtr.Get()))
{
TWeakObjectPtr<UAsyncAction_PushContentToLayerForPlayer> WeakThis = this;
StreamingHandle = RootLayout->PushWidgetToLayerStackAsync<UCommonActivatableWidget>(LayerName, bSuspendInputUntilComplete, WidgetClass, [this, WeakThis](EAsyncWidgetLayerState State, UCommonActivatableWidget* Widget) {
if (WeakThis.IsValid())
{
switch (State)
{
case EAsyncWidgetLayerState::Initialize:
BeforePush.Broadcast(Widget);
break;
case EAsyncWidgetLayerState::AfterPush:
AfterPush.Broadcast(Widget);
SetReadyToDestroy();
break;
case EAsyncWidgetLayerState::Canceled:
SetReadyToDestroy();
break;
}
}
SetReadyToDestroy();
});
}
else
{
SetReadyToDestroy();
}
}