diff --git a/03-UnrealEngine/Gameplay/Lyra/UE5 Lyra学习笔记(6)—CommonUI.md b/03-UnrealEngine/Gameplay/Lyra/UE5 Lyra学习笔记(6)—CommonUI.md new file mode 100644 index 0000000..ad6cc57 --- /dev/null +++ b/03-UnrealEngine/Gameplay/Lyra/UE5 Lyra学习笔记(6)—CommonUI.md @@ -0,0 +1,67 @@ +--- +title: UE5 Lyra学习笔记(6)—CommonUI +date: 2024-03-22 15:03:59 +excerpt: +tags: +rating: ⭐ +--- +# 前言 +- 全局管理类 + - [[#UGameUIManagerSubsystem]] + - [[#UGameUIPolicy]] + - UPrimaryGameLayout +- 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|800]] + GAB_ShowWidget_WhileInputHeld,略微复杂一些会多一些:![[GAB_ShowWidget_WhileInputHeld.png|1200]] + +## GameplayTasks +- UCancellableAsyncAction + - [[#UAsyncAction_PushContentToLayerForPlayer]] + +核心函数逻辑如下,主要调用UPrimaryGameLayout::PushWidgetToLayerStackAsync() +```c++ +void UAsyncAction_PushContentToLayerForPlayer::Activate() +{ + if (UPrimaryGameLayout* RootLayout = UPrimaryGameLayout::GetPrimaryGameLayout(OwningPlayerPtr.Get())) + { + TWeakObjectPtr WeakThis = this; + StreamingHandle = RootLayout->PushWidgetToLayerStackAsync(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(); + } +} +``` \ No newline at end of file diff --git a/08-Assets/Images/ImageBag/Lyra/UI/GAB_ShowWidget_WhenInputPressed.png b/08-Assets/Images/ImageBag/Lyra/UI/GAB_ShowWidget_WhenInputPressed.png new file mode 100644 index 0000000..d806914 Binary files /dev/null and b/08-Assets/Images/ImageBag/Lyra/UI/GAB_ShowWidget_WhenInputPressed.png differ diff --git a/08-Assets/Images/ImageBag/Lyra/UI/GAB_ShowWidget_WhileInputHeld.png b/08-Assets/Images/ImageBag/Lyra/UI/GAB_ShowWidget_WhileInputHeld.png new file mode 100644 index 0000000..651043e Binary files /dev/null and b/08-Assets/Images/ImageBag/Lyra/UI/GAB_ShowWidget_WhileInputHeld.png differ